From a1380a837e87b38c06256fac373b035478a7b4a2 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Sat, 6 Sep 2003 00:32:05 +0000 Subject: Fix the bugs I stupidly added --- libc/misc/search/tsearch.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'libc/misc/search/tsearch.c') diff --git a/libc/misc/search/tsearch.c b/libc/misc/search/tsearch.c index b584e2f15..72abcee7b 100644 --- a/libc/misc/search/tsearch.c +++ b/libc/misc/search/tsearch.c @@ -28,6 +28,7 @@ Cambridge, MA 02139, USA. */ */ /*LINTLIBRARY*/ +#define _GNU_SOURCE #include #include @@ -187,4 +188,30 @@ void twalk(__const void *vroot, __action_fn_t action) } #endif +#ifdef L_tdestroy +/* The standardized functions miss an important functionality: the + tree cannot be removed easily. We provide a function to do this. */ +static void +internal_function +tdestroy_recurse (node *root, __free_fn_t freefct) +{ + if (root->left != NULL) + tdestroy_recurse (root->left, freefct); + if (root->right != NULL) + tdestroy_recurse (root->right, freefct); + (*freefct) ((void *) root->key); + /* Free the node itself. */ + free (root); +} + +void tdestroy (void *vroot, __free_fn_t freefct) +{ + node *root = (node *) vroot; + if (root != NULL) { + tdestroy_recurse (root, freefct); + } +} +#endif + /* tsearch.c ends here */ + -- cgit v1.2.3