/* * Initial implementation: * Copyright (c) 2002 Robert Drehmel * All rights reserved. * * As long as the above copyright statement and this notice remain * unchanged, you can do what ever you want with this file. * * $FreeBSD: src/lib/libc/stdlib/insque.c,v 1.3 2003/01/04 07:34:41 tjr Exp $ */ #define _SEARCH_PRIVATE #include #ifdef DEBUG #include #else #include /* for NULL */ #endif void insque(void *element, void *pred) { struct que_elem *prev, *next, *elem; elem = (struct que_elem *)element; prev = (struct que_elem *)pred; if (prev == NULL) { elem->prev = elem->next = NULL; return; } next = prev->next; if (next != NULL) { #ifdef DEBUG if (next->prev != prev) { fprintf(stderr, "insque: Inconsistency detected:" " next(%p)->prev(%p) != prev(%p)\n", next, next->prev, prev); } #endif next->prev = elem; } prev->next = elem; elem->prev = prev; elem->next = next; }