root/lib/libc/stdlib/insque.c
/*
 * 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. 
 */
#define _SEARCH_PRIVATE
#include <search.h>
#ifdef DEBUG
#include <stdio.h>
#else
#include <stdlib.h>     /* 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;
}