From ffbe2ad9466fdded56a8088066dc6e5dff845a2c Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Fri, 17 Sep 2021 15:34:10 -0400 Subject: [PATCH] libroot: Reinstate tdestroy. It was removed in hrev55422 as we never had declared it in any headers. But it seems some software came to depend on it anyway. Reinstate it, and add a declaration for it, behind _GNU_SOURCE. --- headers/posix/search.h | 4 ++++ src/system/libroot/posix/musl/search/Jamfile | 1 + src/system/libroot/posix/musl/search/tdestroy.c | 16 ++++++++++++++++ 3 files changed, 21 insertions(+) create mode 100644 src/system/libroot/posix/musl/search/tdestroy.c diff --git a/headers/posix/search.h b/headers/posix/search.h index 459d558fab..1583b21023 100644 --- a/headers/posix/search.h +++ b/headers/posix/search.h @@ -49,6 +49,10 @@ extern void *tsearch(const void *key, void **_root, extern void twalk(const void *root, void (*action)(const void *, VISIT, int )); +#ifdef _GNU_SOURCE +extern void tdestroy(void *root, void (*free_key)(void *)) +#endif + #ifdef __cplusplus } #endif diff --git a/src/system/libroot/posix/musl/search/Jamfile b/src/system/libroot/posix/musl/search/Jamfile index a70172d45f..42a1e95841 100644 --- a/src/system/libroot/posix/musl/search/Jamfile +++ b/src/system/libroot/posix/musl/search/Jamfile @@ -13,6 +13,7 @@ for architectureObject in [ MultiArchSubDirSetup ] { insque.c lsearch.c tdelete.c + tdestroy.c tfind.c tsearch.c twalk.c diff --git a/src/system/libroot/posix/musl/search/tdestroy.c b/src/system/libroot/posix/musl/search/tdestroy.c new file mode 100644 index 0000000000..699a901c6a --- /dev/null +++ b/src/system/libroot/posix/musl/search/tdestroy.c @@ -0,0 +1,16 @@ +#define _GNU_SOURCE +#include +#include +#include "tsearch.h" + +void tdestroy(void *root, void (*freekey)(void *)) +{ + struct node *r = root; + + if (r == 0) + return; + tdestroy(r->a[0], freekey); + tdestroy(r->a[1], freekey); + if (freekey) freekey((void *)r->key); + free(r); +}