]> git.saurik.com Git - apple/libc.git/blobdiff - stdlib/FreeBSD/insque.c
Libc-320.tar.gz
[apple/libc.git] / stdlib / FreeBSD / insque.c
diff --git a/stdlib/FreeBSD/insque.c b/stdlib/FreeBSD/insque.c
new file mode 100644 (file)
index 0000000..92984b0
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Initial implementation:
+ * Copyright (c) 2002 Robert Drehmel
+ * All rights reserved.
+ *
+ * As long as the above copyright statement and this notice remain
+ * unchanged, you can do what ever you want with this file. 
+ */
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: src/lib/libc/stdlib/insque.c,v 1.3 2003/01/04 07:34:41 tjr Exp $");
+
+#define        _SEARCH_PRIVATE
+#include <search.h>
+#ifdef DEBUG
+#include <stdio.h>
+#else
+#include <stdlib.h>    /* for NULL */
+#endif
+
+void
+insque(void *element, void *pred)
+{
+       struct que_elem *prev, *next, *elem;
+
+       elem = (struct que_elem *)element;
+       prev = (struct que_elem *)pred;
+
+       if (prev == NULL) {
+               elem->prev = elem->next = NULL;
+               return;
+       }
+
+       next = prev->next;
+       if (next != NULL) {
+#ifdef DEBUG
+               if (next->prev != prev) {
+                       fprintf(stderr, "insque: Inconsistency detected:"
+                           " next(%p)->prev(%p) != prev(%p)\n",
+                           next, next->prev, prev);
+               }
+#endif
+               next->prev = elem;
+       }
+       prev->next = elem;
+       elem->prev = prev;
+       elem->next = next;
+}