diff --git a/gc.c b/gc.c index 4ffe0301..550c1db4 100644 --- a/gc.c +++ b/gc.c @@ -485,6 +485,7 @@ char *gc_copy_obj(object dest, char *obj, gc_thread_data * thd) type_of(hp) = port_tag; hp->fp = ((port_type *) obj)->fp; hp->mode = ((port_type *) obj)->mode; + hp->flags = ((port_type *) obj)->flags; hp->mem_buf = ((port_type *)obj)->mem_buf; hp->mem_buf_len = ((port_type *)obj)->mem_buf_len; return (char *)hp; diff --git a/include/cyclone/types.h b/include/cyclone/types.h index 0da9c00d..20c45761 100644 --- a/include/cyclone/types.h +++ b/include/cyclone/types.h @@ -778,6 +778,7 @@ typedef struct { tag_type tag; FILE *fp; int mode; + unsigned char flags; char *mem_buf; size_t mem_buf_len; } port_type; @@ -790,6 +791,18 @@ typedef struct { p.tag = port_tag; \ p.fp = f; \ p.mode = m; \ + p.flags = 0; \ + p.mem_buf = NULL; \ + p.mem_buf_len = 0; + +#define make_file_backed_port(p,f,m) \ + port_type p; \ + p.hdr.mark = gc_color_red; \ + p.hdr.grayed = 0; \ + p.tag = port_tag; \ + p.fp = f; \ + p.mode = m; \ + p.flags = 1; \ p.mem_buf = NULL; \ p.mem_buf_len = 0;