From: Guus Sliepen Date: Sun, 15 May 2011 14:29:54 +0000 (+0200) Subject: Allow inserting items in the middle of a list. X-Git-Tag: import-tinc-1.1~531 X-Git-Url: https://git.meshlink.io/?a=commitdiff_plain;h=4574b04f79d79d53492b7e0eb592d64ff9b2362b;p=meshlink Allow inserting items in the middle of a list. --- diff --git a/src/list.c b/src/list.c index a26c58d6..9d4920b7 100644 --- a/src/list.c +++ b/src/list.c @@ -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; diff --git a/src/list.h b/src/list.h index 197fbb8b..a4580399 100644 --- a/src/list.h +++ b/src/list.h @@ -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 *);