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