mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-23 20:15:05 +02:00
Added new read_len field for fread
This commit is contained in:
parent
cc9a16b033
commit
4c5191f2b8
3 changed files with 12 additions and 8 deletions
1
gc.c
1
gc.c
|
@ -495,6 +495,7 @@ char *gc_copy_obj(object dest, char *obj, gc_thread_data * thd)
|
|||
hp->tok_buf_len = ((port_type *) obj)->tok_buf_len;
|
||||
hp->mem_buf = ((port_type *)obj)->mem_buf;
|
||||
hp->mem_buf_len = ((port_type *)obj)->mem_buf_len;
|
||||
hp->read_len = ((port_type *)obj)->read_len;
|
||||
return (char *)hp;
|
||||
}
|
||||
case bignum_tag:{
|
||||
|
|
|
@ -788,9 +788,10 @@ typedef struct {
|
|||
size_t tok_buf_len;
|
||||
char *mem_buf;
|
||||
size_t mem_buf_len;
|
||||
unsigned short read_len;
|
||||
} port_type;
|
||||
|
||||
#define CYC_IO_BUF_LEN 1024
|
||||
#define CYC_IO_BUF_LEN 4096
|
||||
|
||||
/** Create a new port object in the nursery */
|
||||
#define make_port(p,f,m) \
|
||||
|
@ -809,15 +810,16 @@ typedef struct {
|
|||
p.tok_buf = NULL; \
|
||||
p.tok_buf_len = 0; \
|
||||
p.mem_buf = NULL; \
|
||||
p.mem_buf_len = 0;
|
||||
p.mem_buf_len = 0; \
|
||||
p.read_len = 1;
|
||||
|
||||
#define make_file_backed_port(p,f,m) \
|
||||
#define make_input_port(p,f,rl) \
|
||||
port_type p; \
|
||||
p.hdr.mark = gc_color_red; \
|
||||
p.hdr.grayed = 0; \
|
||||
p.tag = port_tag; \
|
||||
p.fp = f; \
|
||||
p.mode = m; \
|
||||
p.mode = 1; \
|
||||
p.flags = 1; \
|
||||
p.line_num = 1; \
|
||||
p.col_num = 1; \
|
||||
|
@ -827,7 +829,8 @@ typedef struct {
|
|||
p.tok_buf = malloc(CYC_IO_BUF_LEN); \
|
||||
p.tok_buf_len = CYC_IO_BUF_LEN; \
|
||||
p.mem_buf = malloc(CYC_IO_BUF_LEN); \
|
||||
p.mem_buf_len = 0;
|
||||
p.mem_buf_len = 0; \
|
||||
p.read_len = rl;
|
||||
|
||||
/**
|
||||
* @brief Vector type
|
||||
|
|
|
@ -3382,7 +3382,7 @@ port_type Cyc_stdout()
|
|||
|
||||
port_type Cyc_stdin()
|
||||
{
|
||||
make_port(p, stdin, 1);
|
||||
make_input_port(p, stdin, 1);
|
||||
return p;
|
||||
}
|
||||
|
||||
|
@ -3397,7 +3397,7 @@ port_type Cyc_io_open_input_file(void *data, object str)
|
|||
const char *fname;
|
||||
Cyc_check_str(data, str);
|
||||
fname = ((string_type *) str)->str;
|
||||
make_file_backed_port(p, NULL, 1);
|
||||
make_input_port(p, NULL, CYC_IO_BUF_LEN);
|
||||
p.fp = fopen(fname, "r");
|
||||
if (p.fp == NULL) {
|
||||
Cyc_rt_raise2(data, "Unable to open file", str);
|
||||
|
@ -5694,7 +5694,7 @@ int read_from_port(port_type *p)
|
|||
|
||||
while(1) {
|
||||
errno = 0;
|
||||
rv = fread(buf, sizeof(char), CYC_IO_BUF_LEN, fp);
|
||||
rv = fread(buf, sizeof(char), p->read_len, fp);
|
||||
|
||||
if (rv != 0 || !ferror(fp) || errno != EINTR) {
|
||||
break;
|
||||
|
|
Loading…
Add table
Reference in a new issue