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