strtouq on 64bit

Khem Raj raj.khem at gmail.com
Tue Mar 10 18:19:50 UTC 2009


On Tue, Mar 10, 2009 at 9:46 AM, Peter Korsgaard <jacmet at sunsite.dk> wrote:
> Hi,
>
> The bsd extension strtouq (which maps to strtoull() on 32bit and
> strtoul on 64bit) is currently only available on 32bit:
>
> i586-linux-nm -D ./libuClibc-0.9.30.so|grep strtou
> 00046525 T strtoul
> 00046769 T strtoul_l
> 000466ec T strtoull
> 000468e5 T strtoull_l
> 000466ec T strtoumax
> 000466ec T strtouq
>
> vs:
>
> x86_64-linux-nm -D libuClibc-0.9.30.so|grep strtou
> 000000000004850c T strtoul
> 00000000000486b4 T strtoul_l
> 000000000004850c T strtoull
> 00000000000486b4 T strtoull_l
> 000000000004850c T strtoumax
>
> The following patch fixes it:
> -----------------------------
>
> [PATCH]: Add strtouq alias (to strtoul) for 64bit
>
> The strtouq alias was only available on 32bit, breaking compilation of stuff
> using strtouq on 64bit machines. At the same time use the correct return
> type (u_quad_t).
>
> Signed-of-by: Peter Korsgaard <jacmet at sunsite.dk>
> ---
>  include/stdlib.h     |    4 +++-
>  libc/stdlib/stdlib.c |    1 +
>  2 files changed, 4 insertions(+), 1 deletion(-)
>
> Index: uClibc-0.9.30.1/libc/stdlib/stdlib.c
> ===================================================================
> --- uClibc-0.9.30.1.orig/libc/stdlib/stdlib.c
> +++ uClibc-0.9.30.1/libc/stdlib/stdlib.c
> @@ -401,6 +401,7 @@
>  libc_hidden_proto(__XL_NPP(strtoull))
>  strong_alias(__XL_NPP(strtoul),__XL_NPP(strtoull))
>  libc_hidden_def(__XL_NPP(strtoull))
> +strong_alias(strtoul,strtouq)
>  #endif
>
>
> Index: uClibc-0.9.30.1/include/stdlib.h
> ===================================================================
> --- uClibc-0.9.30.1.orig/include/stdlib.h
> +++ uClibc-0.9.30.1/include/stdlib.h
> @@ -203,6 +203,8 @@
>  __END_NAMESPACE_STD
>
>  #ifdef __USE_BSD
> +#include <sys/types.h> /* for u_quad_t */
> +
>  /* Convert a string to a quadword integer.  */
>  __extension__
>  extern long long int strtoq (__const char *__restrict __nptr,
> @@ -210,7 +212,7 @@
>      __THROW __nonnull ((1)) __wur;
>  /* Convert a string to an unsigned quadword integer.  */
>  __extension__
> -extern unsigned long long int strtouq (__const char *__restrict __nptr,
> +extern u_quad_t strtouq (__const char *__restrict __nptr,
>                                       char **__restrict __endptr, int __base)
>      __THROW __nonnull ((1)) __wur;
>  #endif /* GCC and use BSD.  */

looks ok.

>
> --
> Bye, Peter Korsgaard
> _______________________________________________
> uClibc mailing list
> uClibc at uclibc.org
> http://lists.busybox.net/mailman/listinfo/uclibc
>


More information about the uClibc mailing list