insque.c revision 105245
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 * $FreeBSD: head/lib/libc/stdlib/insque.c 105245 2002-10-16 14:00:46Z robert $ 10 */ 11#include <sys/cdefs.h> 12__FBSDID("$FreeBSD: head/lib/libc/stdlib/insque.c 105245 2002-10-16 14:00:46Z robert $"); 13 14#define _SEARCH_PRIVATE 15#include <search.h> 16#ifdef DEBUG 17#include <stdio.h> 18#else 19#include <stdlib.h> /* for NULL */ 20#endif 21 22void insque(void *element, void *pred) 23{ 24 struct que_elem *prev, *next, *elem; 25 26 elem = (struct que_elem *)element; 27 prev = (struct que_elem *)pred; 28 29 if (prev == NULL) { 30 elem->prev = elem->next = NULL; 31 return; 32 } 33 34 next = prev->next; 35 if (next != NULL) { 36#ifdef DEBUG 37 if (next->prev != prev) { 38 fprintf(stderr, "insque: Inconsistency detected:" 39 " next(%p)->prev(%p) != prev(%p)\n", 40 next, next->prev, prev); 41 } 42#endif 43 next->prev = elem; 44 } 45 prev->next = elem; 46 elem->prev = prev; 47 elem->next = next; 48} 49