@@ -62,6 +62,7 @@ size_t l2_io_file_read(struct l2_io_reader *self, void *buf, size_t len); | |||
struct l2_io_mem_writer { | |||
struct l2_io_writer w; | |||
size_t len; | |||
size_t size; | |||
void *mem; | |||
}; | |||
void l2_io_mem_write(struct l2_io_writer *self, const void *buf, size_t len); |
@@ -103,8 +103,14 @@ size_t l2_io_file_read(struct l2_io_reader *self, void *buf, size_t len) { | |||
void l2_io_mem_write(struct l2_io_writer *self, const void *buf, size_t len) { | |||
struct l2_io_mem_writer *w = (struct l2_io_mem_writer *)self; | |||
size_t idx = w->len; | |||
if (w->len + len > w->size) { | |||
if (w->size == 0) w->size = 64; | |||
while (w->len + len > w->size) w->size *= 2; | |||
w->mem = realloc(w->mem, w->size); | |||
} | |||
w->len += len; | |||
w->mem = realloc(w->mem, w->len); | |||
memcpy((char *)w->mem + idx, buf, len); | |||
} | |||
@@ -75,8 +75,6 @@ static void check_impl(const char *name) { | |||
struct l2_io_mem_writer bytecode = { | |||
.w.write = l2_io_mem_write, | |||
.len = 0, | |||
.mem = NULL, | |||
}; | |||
struct l2_lexer lexer; |