1209878Snwhitehorn/* 2209878Snwhitehorn * Initial implementation: 3209878Snwhitehorn * Copyright (c) 2002 Robert Drehmel 4209878Snwhitehorn * All rights reserved. 5209878Snwhitehorn * 6209878Snwhitehorn * As long as the above copyright statement and this notice remain 7209878Snwhitehorn * unchanged, you can do what ever you want with this file. 8209878Snwhitehorn */ 9209878Snwhitehorn#include <sys/cdefs.h> 10209878Snwhitehorn__FBSDID("$FreeBSD: releng/10.2/lib/libc/stdlib/insque.c 108644 2003-01-04 07:34:41Z tjr $"); 11209878Snwhitehorn 12209878Snwhitehorn#define _SEARCH_PRIVATE 13209878Snwhitehorn#include <search.h> 14209878Snwhitehorn#ifdef DEBUG 15209878Snwhitehorn#include <stdio.h> 16209878Snwhitehorn#else 17209878Snwhitehorn#include <stdlib.h> /* for NULL */ 18209878Snwhitehorn#endif 19209878Snwhitehorn 20209878Snwhitehornvoid 21209878Snwhitehorninsque(void *element, void *pred) 22209878Snwhitehorn{ 23209878Snwhitehorn struct que_elem *prev, *next, *elem; 24209878Snwhitehorn 25209878Snwhitehorn elem = (struct que_elem *)element; 26209878Snwhitehorn prev = (struct que_elem *)pred; 27209878Snwhitehorn 28209878Snwhitehorn if (prev == NULL) { 29209878Snwhitehorn elem->prev = elem->next = NULL; 30209878Snwhitehorn return; 31209878Snwhitehorn } 32209878Snwhitehorn 33209878Snwhitehorn next = prev->next; 34209878Snwhitehorn if (next != NULL) { 35209878Snwhitehorn#ifdef DEBUG 36209878Snwhitehorn if (next->prev != prev) { 37209878Snwhitehorn fprintf(stderr, "insque: Inconsistency detected:" 38209878Snwhitehorn " next(%p)->prev(%p) != prev(%p)\n", 39209878Snwhitehorn next, next->prev, prev); 40217398Skib } 41217398Skib#endif 42 next->prev = elem; 43 } 44 prev->next = elem; 45 elem->prev = prev; 46 elem->next = next; 47} 48