From 4574b04f79d79d53492b7e0eb592d64ff9b2362b Mon Sep 17 00:00:00 2001 From: Guus Sliepen Date: Sun, 15 May 2011 16:29:54 +0200 Subject: [PATCH] Allow inserting items in the middle of a list. --- src/list.c | 20 ++++++++++++++++++++ src/list.h | 1 + 2 files changed, 21 insertions(+) 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 *); -- 2.39.5