X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Futils%2Favltree.c;h=54c1895673a8dd68e6aeccf4655615db00078930;hb=1886cc190cfbd37daf047194fd1a2f5c13a15d64;hp=7397a34fdbb56dfd54d4db07c82f797cf3d93b76;hpb=7c0c900e329faf456e2b7e1a017a197ef7839c5d;p=sysdb.git diff --git a/src/utils/avltree.c b/src/utils/avltree.c index 7397a34..54c1895 100644 --- a/src/utils/avltree.c +++ b/src/utils/avltree.c @@ -154,9 +154,30 @@ tree_clear(sdb_avltree_t *tree) { node_t *n; - n = node_smallest(tree); + if ((! tree) || (! tree->root)) + return; + + /* do a depth-first iteration and delete the leafs */ + n = tree->root; while (n) { - node_t *tmp = node_next(n); + node_t *tmp; + + if (n->left) { + n = n->left; + continue; + } + else if (n->right) { + n = n->right; + continue; + } + + tmp = n->parent; + if (tmp) { + if (tmp->left == n) + tmp->left = NULL; + else + tmp->right = NULL; + } node_destroy(n); n = tmp; @@ -414,7 +435,7 @@ sdb_avltree_iter_destroy(sdb_avltree_iter_t *iter) free(iter); } /* sdb_avltree_iter_destroy */ -_Bool +bool sdb_avltree_iter_has_next(sdb_avltree_iter_t *iter) { if (! iter) @@ -442,12 +463,12 @@ sdb_avltree_size(sdb_avltree_t *tree) return tree ? tree->size : 0; } /* sdb_avltree_size */ -_Bool +bool sdb_avltree_valid(sdb_avltree_t *tree) { node_t *n; - _Bool status = 1; + bool status = 1; size_t size = 0; if (! tree)