X-Git-Url: https://tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=lib%2Favl_tree.c;h=a4f005182a0051d6f33e1a90d7b6186778a9f1bc;hp=8630d4d039f3ca82f2b9169b28de2956d0648466;hb=ed509312906625acee4007da6262de3898846888;hpb=4bc394a3e29f2f90434bbbfc9f23d5587398471b diff --git a/lib/avl_tree.c b/lib/avl_tree.c index 8630d4d0..a4f00518 100644 --- a/lib/avl_tree.c +++ b/lib/avl_tree.c @@ -29,7 +29,7 @@ library for inclusion into tinc (http://tinc.nl.linux.org/) by Guus Sliepen . - $Id: avl_tree.c,v 1.1.2.5 2001/02/06 10:13:21 guus Exp $ + $Id: avl_tree.c,v 1.1.2.8 2002/02/10 21:57:51 guus Exp $ */ #include @@ -430,7 +430,7 @@ avl_node_t *avl_insert(avl_tree_t *tree, void *data) new->data = data; avl_insert_after(tree, closest, new); break; - case 0: + default: return NULL; } } @@ -493,6 +493,9 @@ void avl_insert_before(avl_tree_t *tree, avl_node_t *before, avl_node_t *node) node->parent = before; node->prev = before->prev; + if(before->left) + return avl_insert_after(tree, before->prev, node); + if (before->prev) before->prev->next = node; else @@ -509,6 +512,9 @@ void avl_insert_after(avl_tree_t *tree, avl_node_t *after, avl_node_t *node) if (!after) return tree->head ? avl_insert_before(tree, tree->head, node) : avl_insert_top(tree, node); + if(after->right) + return avl_insert_before(tree, after->next, node); + node->prev = after; node->parent = after; node->next = after->next; @@ -591,6 +597,15 @@ void avl_unlink_node(avl_tree_t *tree, avl_node_t *node) } avl_rebalance(tree, balnode); + + node->next = node->prev = node->parent = node->left = node->right = NULL; + +#ifdef AVL_COUNT + node->count = 0; +#endif +#ifdef AVL_DEPTH + node->depth = 0; +#endif } void avl_delete_node(avl_tree_t *tree, avl_node_t *node)