fix core text and map ownership
This commit is contained in:
22
trie.c
22
trie.c
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user