fix core text and map ownership

This commit is contained in:
2026-08-11 19:32:58 +09:00
parent b63122dd14
commit e70278a3d2
6 changed files with 99 additions and 31 deletions

22
trie.c
View File

@@ -53,7 +53,10 @@ insert(Trie *t, char *key, int klen, char *val, int vlen)
ci = add(t, ni, key[i]);
ni = ci;
}
t->nodes[ni].val = val;
free(t->nodes[ni].val);
t->nodes[ni].val = emalloc(vlen + 1);
memmove(t->nodes[ni].val, val, vlen);
t->nodes[ni].val[vlen] = '\0';
t->nodes[ni].vlen = vlen;
}
@@ -74,6 +77,9 @@ trieopen(char *path)
t->n = 0;
t->root = newnode(t);
while((line = Brdstr(b, '\n', 1)) != nil){
vlen = strlen(line);
if(vlen > 0 && line[vlen-1] == '\r')
line[--vlen] = '\0';
if(line[0] == '\0'){
free(line);
continue;
@@ -87,11 +93,25 @@ trieopen(char *path)
val = tab + 1;
vlen = strlen(val);
insert(t, key, klen, val, vlen);
free(line);
}
Bterm(b);
return t;
}
void
trieclose(Trie *t)
{
int i;
if(t == nil)
return;
for(i = 0; i < t->n; i++)
free(t->nodes[i].val);
free(t->nodes);
free(t);
}
char*
trieget(Trie *t, char *key, int klen, int *vlen)
{