summaryrefslogtreecommitdiff
path: root/memory.c
diff options
context:
space:
mode:
Diffstat (limited to 'memory.c')
-rw-r--r--memory.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/memory.c b/memory.c
index b65ad42..2134ff8 100644
--- a/memory.c
+++ b/memory.c
@@ -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);