X-Git-Url: https://jfr.im/git/irc/evilnet/x3.git/blobdiff_plain/d76ed9a966ee3d955c8ef00ecc02e643c2005e2e..9b2d838a3f6c15287a36caed1c8e10ff8d74613d:/src/dict-splay.c diff --git a/src/dict-splay.c b/src/dict-splay.c index 38117cd..42bb902 100644 --- a/src/dict-splay.c +++ b/src/dict-splay.c @@ -202,7 +202,7 @@ dict_insert(dict_t dict, const char *key, void *data) int dict_remove2(dict_t dict, const char *key, int no_dispose) { - struct dict_node *new_root; + struct dict_node *new_root, *old_root; if (!dict->root) return 0; @@ -220,13 +220,14 @@ dict_remove2(dict_t dict, const char *key, int no_dispose) if (dict->first == dict->root) dict->first = dict->first->next; if (dict->root->next) dict->root->next->prev = dict->root->prev; if (dict->last == dict->root) dict->last = dict->last->prev; + old_root = dict->root; + dict->root = new_root; + dict->count--; if (no_dispose) { - free(dict->root); + free(old_root); } else { - dict_dispose_node(dict->root, dict->free_keys, dict->free_data); + dict_dispose_node(old_root, dict->free_keys, dict->free_data); } - dict->root = new_root; - dict->count--; return 1; }