From 4c5191f2b89d7e2a1bfe4309954159888d22fda3 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Thu, 17 Aug 2017 13:54:44 +0000 Subject: [PATCH] Added new read_len field for fread --- gc.c | 1 + include/cyclone/types.h | 13 ++++++++----- runtime.c | 6 +++--- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/gc.c b/gc.c index 243c24ee..455499e9 100644 --- a/gc.c +++ b/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:{ diff --git a/include/cyclone/types.h b/include/cyclone/types.h index 9f3708ca..694e5ef0 100644 --- a/include/cyclone/types.h +++ b/include/cyclone/types.h @@ -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 diff --git a/runtime.c b/runtime.c index 4bbd3a1d..b74b2124 100644 --- a/runtime.c +++ b/runtime.c @@ -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;