about summary refs log tree commit diff
path: root/src/search/insque.c
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2011-06-25 18:18:57 -0400
committerRich Felker <dalias@aerifal.cx>2011-06-25 18:18:57 -0400
commitfebbd12d00883a716a9edca25011f8aa306b859b (patch)
tree45d291973571bebe85963add9ba94d4c8556d5e3 /src/search/insque.c
parent49388f3b7b72a1695bef05f64439b602b2e77a53 (diff)
downloadmusl-febbd12d00883a716a9edca25011f8aa306b859b.tar.gz
musl-febbd12d00883a716a9edca25011f8aa306b859b.tar.xz
musl-febbd12d00883a716a9edca25011f8aa306b859b.zip
XSI search.h API implementation by Szabolcs Nagy
Diffstat (limited to 'src/search/insque.c')
-rw-r--r--src/search/insque.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/search/insque.c b/src/search/insque.c
new file mode 100644
index 00000000..b7475d84
--- /dev/null
+++ b/src/search/insque.c
@@ -0,0 +1,32 @@
+#include <search.h>
+
+struct node {
+	struct node *next;
+	struct node *prev;
+};
+
+void insque(void *element, void *pred)
+{
+	struct node *e = element;
+	struct node *p = pred;
+
+	if (!p) {
+		e->next = e->prev = 0;
+		return;
+	}
+	e->next = p->next;
+	e->prev = p;
+	p->next = e;
+	if (e->next)
+		e->next->prev = e;
+}
+
+void remque(void *element)
+{
+	struct node *e = element;
+
+	if (e->next)
+		e->next->prev = e->prev;
+	if (e->prev)
+		e->prev->next = e->next;
+}