xref: /dragonfly/lib/libc/stdlib/insque.c (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
1 /*
2  * Initial implementation:
3  * Copyright (c) 2002 Robert Drehmel
4  * All rights reserved.
5  *
6  * As long as the above copyright statement and this notice remain
7  * unchanged, you can do what ever you want with this file.
8  *
9  * $FreeBSD: src/lib/libc/stdlib/insque.c,v 1.3 2003/01/04 07:34:41 tjr Exp $
10  */
11 
12 #define   _SEARCH_PRIVATE
13 #include <search.h>
14 #ifdef DEBUG
15 #include <stdio.h>
16 #else
17 #include <stdlib.h> /* for NULL */
18 #endif
19 
20 void
insque(void * element,void * pred)21 insque(void *element, void *pred)
22 {
23           struct que_elem *prev, *next, *elem;
24 
25           elem = (struct que_elem *)element;
26           prev = (struct que_elem *)pred;
27 
28           if (prev == NULL) {
29                     elem->prev = elem->next = NULL;
30                     return;
31           }
32 
33           next = prev->next;
34           if (next != NULL) {
35 #ifdef DEBUG
36                     if (next->prev != prev) {
37                               fprintf(stderr, "insque: Inconsistency detected:"
38                                   " next(%p)->prev(%p) != prev(%p)\n",
39                                   next, next->prev, prev);
40                     }
41 #endif
42                     next->prev = elem;
43           }
44           prev->next = elem;
45           elem->prev = prev;
46           elem->next = next;
47 }
48