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