From: Guus Sliepen <guus@tinc-vpn.org>
Date: Sun, 15 May 2011 14:29:54 +0000 (+0200)
Subject: Allow inserting items in the middle of a list.
X-Git-Tag: release-1.1pre1~56
X-Git-Url: http://git.tinc-vpn.org/git/browse?a=commitdiff_plain;h=4574b04f79d79d53492b7e0eb592d64ff9b2362b;p=tinc

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 *);