#define _SEARCH_PRIVATE
#include <search.h>
#include <stdlib.h>
static void
nul_node_free(void *node __unused)
{
}
void
tdestroy(void *rootp, void (*node_free)(void *))
{
posix_tnode *back, *curr, **front;
if (rootp == NULL)
return;
if (node_free == NULL)
node_free = nul_node_free;
back = rootp;
front = &back;
for (;;) {
curr = *front;
if (curr->rlink != NULL)
front = &curr->llink;
else {
*front = curr->llink;
node_free(curr->key);
free(curr);
}
if (*front != NULL)
continue;
if (back == NULL)
break;
curr = back;
back = curr->llink;
if (back == NULL)
front = &back;
*front = curr->rlink;
node_free(curr->key);
free(curr);
}
}