]>
Commit | Line | Data |
---|---|---|
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 | ||
20 | void | |
21 | insque(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 | } |