1209878Snwhitehorn/*
2209878Snwhitehorn * Initial implementation:
3209878Snwhitehorn * Copyright (c) 2002 Robert Drehmel
4209878Snwhitehorn * All rights reserved.
5209878Snwhitehorn *
6209878Snwhitehorn * As long as the above copyright statement and this notice remain
7209878Snwhitehorn * unchanged, you can do what ever you want with this file.
8209878Snwhitehorn */
9209878Snwhitehorn#include <sys/cdefs.h>
10209878Snwhitehorn__FBSDID("$FreeBSD: releng/10.2/lib/libc/stdlib/insque.c 108644 2003-01-04 07:34:41Z tjr $");
11209878Snwhitehorn
12209878Snwhitehorn#define	_SEARCH_PRIVATE
13209878Snwhitehorn#include <search.h>
14209878Snwhitehorn#ifdef DEBUG
15209878Snwhitehorn#include <stdio.h>
16209878Snwhitehorn#else
17209878Snwhitehorn#include <stdlib.h>	/* for NULL */
18209878Snwhitehorn#endif
19209878Snwhitehorn
20209878Snwhitehornvoid
21209878Snwhitehorninsque(void *element, void *pred)
22209878Snwhitehorn{
23209878Snwhitehorn	struct que_elem *prev, *next, *elem;
24209878Snwhitehorn
25209878Snwhitehorn	elem = (struct que_elem *)element;
26209878Snwhitehorn	prev = (struct que_elem *)pred;
27209878Snwhitehorn
28209878Snwhitehorn	if (prev == NULL) {
29209878Snwhitehorn		elem->prev = elem->next = NULL;
30209878Snwhitehorn		return;
31209878Snwhitehorn	}
32209878Snwhitehorn
33209878Snwhitehorn	next = prev->next;
34209878Snwhitehorn	if (next != NULL) {
35209878Snwhitehorn#ifdef DEBUG
36209878Snwhitehorn		if (next->prev != prev) {
37209878Snwhitehorn			fprintf(stderr, "insque: Inconsistency detected:"
38209878Snwhitehorn			    " next(%p)->prev(%p) != prev(%p)\n",
39209878Snwhitehorn			    next, next->prev, prev);
40217398Skib		}
41217398Skib#endif
42		next->prev = elem;
43	}
44	prev->next = elem;
45	elem->prev = prev;
46	elem->next = next;
47}
48