mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-25 13:05: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->tok_buf_len = ((port_type *) obj)->tok_buf_len;
|
||||||
hp->mem_buf = ((port_type *)obj)->mem_buf;
|
hp->mem_buf = ((port_type *)obj)->mem_buf;
|
||||||
hp->mem_buf_len = ((port_type *)obj)->mem_buf_len;
|
hp->mem_buf_len = ((port_type *)obj)->mem_buf_len;
|
||||||
|
hp->read_len = ((port_type *)obj)->read_len;
|
||||||
return (char *)hp;
|
return (char *)hp;
|
||||||
}
|
}
|
||||||
case bignum_tag:{
|
case bignum_tag:{
|
||||||
|
|
|
@ -788,9 +788,10 @@ typedef struct {
|
||||||
size_t tok_buf_len;
|
size_t tok_buf_len;
|
||||||
char *mem_buf;
|
char *mem_buf;
|
||||||
size_t mem_buf_len;
|
size_t mem_buf_len;
|
||||||
|
unsigned short read_len;
|
||||||
} port_type;
|
} port_type;
|
||||||
|
|
||||||
#define CYC_IO_BUF_LEN 1024
|
#define CYC_IO_BUF_LEN 4096
|
||||||
|
|
||||||
/** Create a new port object in the nursery */
|
/** Create a new port object in the nursery */
|
||||||
#define make_port(p,f,m) \
|
#define make_port(p,f,m) \
|
||||||
|
@ -809,15 +810,16 @@ typedef struct {
|
||||||
p.tok_buf = NULL; \
|
p.tok_buf = NULL; \
|
||||||
p.tok_buf_len = 0; \
|
p.tok_buf_len = 0; \
|
||||||
p.mem_buf = NULL; \
|
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; \
|
port_type p; \
|
||||||
p.hdr.mark = gc_color_red; \
|
p.hdr.mark = gc_color_red; \
|
||||||
p.hdr.grayed = 0; \
|
p.hdr.grayed = 0; \
|
||||||
p.tag = port_tag; \
|
p.tag = port_tag; \
|
||||||
p.fp = f; \
|
p.fp = f; \
|
||||||
p.mode = m; \
|
p.mode = 1; \
|
||||||
p.flags = 1; \
|
p.flags = 1; \
|
||||||
p.line_num = 1; \
|
p.line_num = 1; \
|
||||||
p.col_num = 1; \
|
p.col_num = 1; \
|
||||||
|
@ -827,7 +829,8 @@ typedef struct {
|
||||||
p.tok_buf = malloc(CYC_IO_BUF_LEN); \
|
p.tok_buf = malloc(CYC_IO_BUF_LEN); \
|
||||||
p.tok_buf_len = CYC_IO_BUF_LEN; \
|
p.tok_buf_len = CYC_IO_BUF_LEN; \
|
||||||
p.mem_buf = malloc(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
|
* @brief Vector type
|
||||||
|
|
|
@ -3382,7 +3382,7 @@ port_type Cyc_stdout()
|
||||||
|
|
||||||
port_type Cyc_stdin()
|
port_type Cyc_stdin()
|
||||||
{
|
{
|
||||||
make_port(p, stdin, 1);
|
make_input_port(p, stdin, 1);
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3397,7 +3397,7 @@ port_type Cyc_io_open_input_file(void *data, object str)
|
||||||
const char *fname;
|
const char *fname;
|
||||||
Cyc_check_str(data, str);
|
Cyc_check_str(data, str);
|
||||||
fname = ((string_type *) str)->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");
|
p.fp = fopen(fname, "r");
|
||||||
if (p.fp == NULL) {
|
if (p.fp == NULL) {
|
||||||
Cyc_rt_raise2(data, "Unable to open file", str);
|
Cyc_rt_raise2(data, "Unable to open file", str);
|
||||||
|
@ -5694,7 +5694,7 @@ int read_from_port(port_type *p)
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
errno = 0;
|
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) {
|
if (rv != 0 || !ferror(fp) || errno != EINTR) {
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Add table
Reference in a new issue