insque.c revision 105246
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#include <sys/cdefs.h>
10__FBSDID("$FreeBSD: head/lib/libc/stdlib/insque.c 105246 2002-10-16 14:05:29Z robert $");
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
20void insque(void *element, void *pred)
21{
22	struct que_elem *prev, *next, *elem;
23
24	elem = (struct que_elem *)element;
25	prev = (struct que_elem *)pred;
26
27	if (prev == NULL) {
28		elem->prev = elem->next = NULL;
29		return;
30	}
31
32	next = prev->next;
33	if (next != NULL) {
34#ifdef DEBUG
35		if (next->prev != prev) {
36			fprintf(stderr, "insque: Inconsistency detected:"
37			    " next(%p)->prev(%p) != prev(%p)\n",
38			    next, next->prev, prev);
39		}
40#endif
41		next->prev = elem;
42	}
43	prev->next = elem;
44	elem->prev = prev;
45	elem->next = next;
46}
47