freebsd-skq/lib/libc/stdlib/insque.c

48 lines
925 B
C
Raw Normal View History

/*
* 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.
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#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;
}