]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - lib/libc/stdlib/insque.c
Merge llvm-project main llvmorg-18-init-16003-gfc5f51cf5af4
[FreeBSD/FreeBSD.git] / lib / libc / stdlib / insque.c
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 #define _SEARCH_PRIVATE
10 #include <search.h>
11 #ifdef DEBUG
12 #include <stdio.h>
13 #else
14 #include <stdlib.h>     /* for NULL */
15 #endif
16
17 void
18 insque(void *element, void *pred)
19 {
20         struct que_elem *prev, *next, *elem;
21
22         elem = (struct que_elem *)element;
23         prev = (struct que_elem *)pred;
24
25         if (prev == NULL) {
26                 elem->prev = elem->next = NULL;
27                 return;
28         }
29
30         next = prev->next;
31         if (next != NULL) {
32 #ifdef DEBUG
33                 if (next->prev != prev) {
34                         fprintf(stderr, "insque: Inconsistency detected:"
35                             " next(%p)->prev(%p) != prev(%p)\n",
36                             next, next->prev, prev);
37                 }
38 #endif
39                 next->prev = elem;
40         }
41         prev->next = elem;
42         elem->prev = prev;
43         elem->next = next;
44 }