]> git.saurik.com Git - apple/libc.git/blame - stdlib/FreeBSD/insque.c
Libc-391.tar.gz
[apple/libc.git] / stdlib / FreeBSD / insque.c
CommitLineData
9385eb3d
A
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: src/lib/libc/stdlib/insque.c,v 1.3 2003/01/04 07:34:41 tjr Exp $");
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
21insque(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}