Hide non-standard itoa/utoa() in stdlib.h or drop these functions?
Corinna Vinschen
vinschen@redhat.com
Tue Jan 23 09:03:19 GMT 2024
On Jan 22 19:46, Christian Franke wrote:
> The functions itoa() and utoa() are non-standard, not exported by Cygwin and
> also unavailable on FreeBSD and Linux (glibc and musl libc). Busybox for
> example could not be build OOTB using newlib's stdlib.h because there are
> conflicts with local functions with same names but different signatures.
>
> See the original posts on the Cygwin list for more details:
> https://sourceware.org/pipermail/cygwin/2024-January/255216.html
> https://sourceware.org/pipermail/cygwin/2024-January/255217.html
>
> Corinna proposed to either drop these functions entirely or hide the
> prototypes on Cygwin only. I attached a patch for the second alternative.
>
> --
> Regards,
> Christian
>
> From 5f1c43796c6a125f04c1f2436fc1048783ce3b7a Mon Sep 17 00:00:00 2001
> From: Christian Franke <christian.franke@t-online.de>
> Date: Mon, 22 Jan 2024 19:11:20 +0100
> Subject: [PATCH] Hide itoa, utoa, __itoa and __utoa in stdlib.h on Cygwin only
>
> These functions are non-standard and not exported by Cygwin.
>
> Signed-off-by: Christian Franke <christian.franke@t-online.de>
> ---
> newlib/libc/include/stdlib.h | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/newlib/libc/include/stdlib.h b/newlib/libc/include/stdlib.h
> index 15b349440..fd89f5ba7 100644
> --- a/newlib/libc/include/stdlib.h
> +++ b/newlib/libc/include/stdlib.h
> @@ -221,11 +221,13 @@ char * ecvtbuf (double, int, int*, int*, char *);
> char * fcvtbuf (double, int, int*, int*, char *);
> char * ecvtf (float,int,int *,int *);
> #endif
> +#ifndef __CYGWIN__
> char * __itoa (int, char *, int);
> char * __utoa (unsigned, char *, int);
> -#if __MISC_VISIBLE
> +# if __MISC_VISIBLE
> char * itoa (int, char *, int);
> char * utoa (unsigned, char *, int);
> +# endif
> #endif
> #if __POSIX_VISIBLE
> int rand_r (unsigned *__seed);
> --
> 2.43.0
>
In fact, while this patch fixes the namespace pollution for Cygwin, I
wonder if we shouldn't remove itoa/utoa entirely. The underscored
functions __itoa/__utoa accomplish exactly the same thing.
Does anybody actually *need* itoa/utoa as long as we have __itoa/__utoa?
Corinna
More information about the Newlib
mailing list