Forward packets in router mode.
[tinc] / lib / avl_tree.c
index 8630d4d..a4f0051 100644 (file)
@@ -29,7 +29,7 @@
     library for inclusion into tinc (http://tinc.nl.linux.org/) by
     Guus Sliepen <guus@sliepen.warande.net>.
 
-    $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 <stdio.h>
@@ -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)