diff options
Diffstat (limited to 'memory.c')
-rw-r--r-- | memory.c | 14 |
1 files changed, 7 insertions, 7 deletions
@@ -16,17 +16,17 @@ strings_len(Token *list) } static int -strings_cat(char *mem, Token *list) +strings_cat(char *mem, Token *list, int off) { - int len = 0; for (Token *e = list; e != NULL; e = e->next) if (e->type == TOK_GROUP) - len += strings_cat(mem + len, e->group.tokens); + off = strings_cat(mem, e->group.tokens, off); else if (e->type == TOK_STRING) { - slice_cpy(mem + len, e->slice); - len += slice_len(e->slice) + 1; + slice_cpy(mem + off, e->slice); + e->string_ptr = off; + off += slice_len(e->slice) + 1; } - return len; + return off; } int @@ -38,7 +38,7 @@ memory_create(Memory *memory, Token *list) perror("memory_create:malloc"); return 1; } - const int cated = strings_cat(memory->strings, list); + const int cated = strings_cat(memory->strings, list, 0); if (cated != len) { fprintf(stderr, "strings_cat wrote %d bytes instead of %d", cated, len); |