[PATCH] Newlib: Update search.h functions for POSIX.1-2024
Takashi Yano
takashi.yano@nifty.ne.jp
Fri May 2 12:12:52 GMT 2025
On Thu, 1 May 2025 15:53:06 -0700
Mark Geisert <mark@maxrnd.com> wrote:
> Add type posix_tnode. Change certain uses of "void" to "posix_tnode" in
> both the prototypes and definitions of functions associated with <search.h>.
>
> (Necessary changes to Cygwin's /usr/include/search.h will follow in a
> separate patch to be sent to cygwin-patches.)
Sorry, I accidentally pushed only the cygwin patch. So, I
pushed this patch reluctantly as well.
If something is going wrong in newlib side, please let me know.
> Reported-by: Collin Funk <collin.funk1@gmail.com>
> Addresses: https://cygwin.com/pipermail/cygwin/2025-April/258032.html
> Signed-off-by: Mark Geisert <mark@maxrnd.com>
> Fixes: ec98d19a08c2 "* wininfo.h (wininfo::timer_active): Delete."
>
> ---
> newlib/libc/include/search.h | 10 ++++++----
> newlib/libc/search/tdelete.c | 2 +-
> newlib/libc/search/tfind.c | 2 +-
> newlib/libc/search/tsearch.c | 2 +-
> newlib/libc/search/twalk.c | 4 ++--
> 5 files changed, 11 insertions(+), 9 deletions(-)
>
> diff --git a/newlib/libc/include/search.h b/newlib/libc/include/search.h
> index ed321b0f6..70a1a20ae 100644
> --- a/newlib/libc/include/search.h
> +++ b/newlib/libc/include/search.h
> @@ -36,6 +36,8 @@ typedef struct node {
> } node_t;
> #endif
>
> +typedef void posix_tnode;
> +
> struct hsearch_data
> {
> struct internal_head *htable;
> @@ -54,11 +56,11 @@ ENTRY *hsearch(ENTRY, ACTION);
> int hcreate_r(size_t, struct hsearch_data *);
> void hdestroy_r(struct hsearch_data *);
> int hsearch_r(ENTRY, ACTION, ENTRY **, struct hsearch_data *);
> -void *tdelete(const void *__restrict, void **__restrict, __compar_fn_t);
> +void *tdelete(const void *__restrict, posix_tnode **__restrict, __compar_fn_t);
> void tdestroy (void *, void (*)(void *));
> -void *tfind(const void *, void **, __compar_fn_t);
> -void *tsearch(const void *, void **, __compar_fn_t);
> -void twalk(const void *, void (*)(const void *, VISIT, int));
> +posix_tnode *tfind(const void *, posix_tnode *const *, __compar_fn_t);
> +posix_tnode *tsearch(const void *, posix_tnode **, __compar_fn_t);
> +void twalk(const posix_tnode *, void (*)(const posix_tnode *, VISIT, int));
> __END_DECLS
>
> #endif /* !_SEARCH_H_ */
> diff --git a/newlib/libc/search/tdelete.c b/newlib/libc/search/tdelete.c
> index a595200db..b12158e41 100644
> --- a/newlib/libc/search/tdelete.c
> +++ b/newlib/libc/search/tdelete.c
> @@ -27,7 +27,7 @@ __RCSID("$NetBSD: tdelete.c,v 1.2 1999/09/16 11:45:37 lukem Exp $");
> /* delete node with given key */
> void *
> tdelete (const void *__restrict vkey, /* key to be deleted */
> - void **__restrict vrootp, /* address of the root of tree */
> + posix_tnode **__restrict vrootp,/* address of the root of tree */
> int (*compar)(const void *, const void *))
> {
> node_t **rootp = (node_t **)vrootp;
> diff --git a/newlib/libc/search/tfind.c b/newlib/libc/search/tfind.c
> index 670f41fca..8bebdac71 100644
> --- a/newlib/libc/search/tfind.c
> +++ b/newlib/libc/search/tfind.c
> @@ -26,7 +26,7 @@ __RCSID("$NetBSD: tfind.c,v 1.2 1999/09/16 11:45:37 lukem Exp $");
> /* find a node, or return 0 */
> void *
> tfind (const void *vkey, /* key to be found */
> - void **vrootp, /* address of the tree root */
> + posix_tnode *const *vrootp, /* address of the tree root */
> int (*compar)(const void *, const void *))
> {
> node_t **rootp = (node_t **)vrootp;
> diff --git a/newlib/libc/search/tsearch.c b/newlib/libc/search/tsearch.c
> index 82d69447f..9be77f138 100644
> --- a/newlib/libc/search/tsearch.c
> +++ b/newlib/libc/search/tsearch.c
> @@ -26,7 +26,7 @@ __RCSID("$NetBSD: tsearch.c,v 1.3 1999/09/16 11:45:37 lukem Exp $");
> /* find or insert datum into search tree */
> void *
> tsearch (const void *vkey, /* key to be located */
> - void **vrootp, /* address of tree root */
> + posix_tnode **vrootp, /* address of tree root */
> int (*compar)(const void *, const void *))
> {
> node_t *q;
> diff --git a/newlib/libc/search/twalk.c b/newlib/libc/search/twalk.c
> index 7aec6e4dd..26d037a5d 100644
> --- a/newlib/libc/search/twalk.c
> +++ b/newlib/libc/search/twalk.c
> @@ -50,8 +50,8 @@ trecurse(
>
> /* Walk the nodes of a tree */
> void
> -twalk (const void *vroot, /* Root of the tree to be walked */
> - void (*action)(const void *, VISIT, int))
> +twalk (const posix_tnode *vroot,/* Root of the tree to be walked */
> + void (*action)(const posix_tnode *, VISIT, int))
> {
> if (vroot != NULL && action != NULL)
> trecurse(vroot, action, 0);
> --
> 2.45.1
>
--
Takashi Yano <takashi.yano@nifty.ne.jp>
More information about the Newlib
mailing list