Allow inserting items in the middle of a list.
authorGuus Sliepen <guus@tinc-vpn.org>
Sun, 15 May 2011 14:29:54 +0000 (16:29 +0200)
committerGuus Sliepen <guus@tinc-vpn.org>
Sun, 15 May 2011 14:29:54 +0000 (16:29 +0200)
src/list.c
src/list.h

index a26c58d603555a7bfceb77fa3a18774773a8758e..9d4920b70a075c0b257c622aeb24f87b277791ff 100644 (file)
@@ -91,6 +91,26 @@ list_node_t *list_insert_tail(list_t *list, void *data) {
        return node;
 }
 
+list_node_t *list_insert_after(list_t *list, list_node_t *after, void *data) {
+       list_node_t *node;
+
+       node = list_alloc_node();
+
+       node->data = data;
+       node->next = after->next;
+       node->prev = after;
+       after->next = node;
+
+       if(node->next)
+               node->next->prev = node;
+       else
+               list->tail = node;
+
+       list->count++;
+
+       return node;
+}
+
 void list_unlink_node(list_t *list, list_node_t *node) {
        if(node->prev)
                node->prev->next = node->next;
index 197fbb8b3088531f0830cf03f5416992ff81fb9a..a45803995bdce3e6fe3f5a273a0015aa16b2834e 100644 (file)
@@ -54,6 +54,7 @@ extern void list_free_node(list_t *, list_node_t *);
 
 extern list_node_t *list_insert_head(list_t *, void *);
 extern list_node_t *list_insert_tail(list_t *, void *);
+extern list_node_t *list_insert_after(list_t *, list_node_t *, void *);
 
 extern void list_unlink_node(list_t *, list_node_t *);
 extern void list_delete_node(list_t *, list_node_t *);