summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libc/stdlib/stdlib.c81
1 files changed, 46 insertions, 35 deletions
diff --git a/libc/stdlib/stdlib.c b/libc/stdlib/stdlib.c
index 3bfdcfea5..b1dd98068 100644
--- a/libc/stdlib/stdlib.c
+++ b/libc/stdlib/stdlib.c
@@ -73,6 +73,14 @@
#include <stdlib.h>
#include <locale.h>
+extern long int __strtol (__const char *__restrict __nptr,
+ char **__restrict __endptr, int __base)
+ __THROW __nonnull ((1)) __wur attribute_hidden;
+__extension__
+extern long long int __strtoll (__const char *__restrict __nptr,
+ char **__restrict __endptr, int __base)
+ __THROW __nonnull ((1)) __wur attribute_hidden;
+
#ifdef __UCLIBC_HAS_WCHAR__
#include <wchar.h>
@@ -255,10 +263,11 @@ strong_alias(llabs,imaxabs)
#if INT_MAX < LONG_MAX
-int atoi(const char *nptr)
+int attribute_hidden __atoi(const char *nptr)
{
- return (int) strtol(nptr, (char **) NULL, 10);
+ return (int) __strtol(nptr, (char **) NULL, 10);
}
+strong_alias(__atoi,atoi)
#endif /* INT_MAX < LONG_MAX */
@@ -266,17 +275,19 @@ int atoi(const char *nptr)
/**********************************************************************/
#ifdef L_atol
-long atol(const char *nptr)
+long attribute_hidden __atol(const char *nptr)
{
- return strtol(nptr, (char **) NULL, 10);
+ return __strtol(nptr, (char **) NULL, 10);
}
+strong_alias(__atol,atol)
#if UINT_MAX == ULONG_MAX
-strong_alias(atol,atoi)
+hidden_strong_alias(__atol,__atoi)
+strong_alias(__atol,atoi)
#endif
#if defined(ULLONG_MAX) && (ULLONG_MAX == ULONG_MAX)
-strong_alias(atol,atoll)
+strong_alias(__atol,atoll)
#endif
#endif
@@ -287,7 +298,7 @@ strong_alias(atol,atoll)
long long atoll(const char *nptr)
{
- return strtoll(nptr, (char **) NULL, 10);
+ return __strtoll(nptr, (char **) NULL, 10);
}
#endif /* defined(ULLONG_MAX) && (LLONG_MAX > LONG_MAX) */
@@ -296,12 +307,14 @@ long long atoll(const char *nptr)
/**********************************************************************/
#if defined(L_strtol) || defined(L_strtol_l)
-long __XL(strtol)(const char * __restrict str, char ** __restrict endptr,
+long attribute_hidden __UCXL(strtol)(const char * __restrict str, char ** __restrict endptr,
int base __LOCALE_PARAM )
{
return __XL_NPP(_stdlib_strto_l)(str, endptr, base, 1 __LOCALE_ARG );
}
+__UCXL_ALIAS(strtol)
+
#if (ULONG_MAX == UINTMAX_MAX) && !defined(L_strtol_l)
strong_alias(strtol,strtoimax)
#endif
@@ -310,15 +323,13 @@ strong_alias(strtol,strtoimax)
strong_alias(__XL(strtol),__XL(strtoll))
#endif
-__XL_ALIAS(strtol)
-
#endif
/**********************************************************************/
#if defined(L_strtoll) || defined(L_strtoll_l)
#if defined(ULLONG_MAX) && (LLONG_MAX > LONG_MAX)
-long long __XL(strtoll)(const char * __restrict str,
+long long attribute_hidden __UCXL(strtoll)(const char * __restrict str,
char ** __restrict endptr, int base
__LOCALE_PARAM )
{
@@ -326,6 +337,8 @@ long long __XL(strtoll)(const char * __restrict str,
__LOCALE_ARG );
}
+__UCXL_ALIAS(strtoll)
+
#if !defined(L_strtoll_l)
#if (ULLONG_MAX == UINTMAX_MAX)
strong_alias(strtoll,strtoimax)
@@ -333,21 +346,21 @@ strong_alias(strtoll,strtoimax)
strong_alias(strtoll,strtoq)
#endif
-__XL_ALIAS(strtoll)
-
#endif /* defined(ULLONG_MAX) && (LLONG_MAX > LONG_MAX) */
#endif
/**********************************************************************/
#if defined(L_strtoul) || defined(L_strtoul_l)
-unsigned long __XL(strtoul)(const char * __restrict str,
+unsigned long attribute_hidden __UCXL(strtoul)(const char * __restrict str,
char ** __restrict endptr, int base
__LOCALE_PARAM )
{
return __XL_NPP(_stdlib_strto_l)(str, endptr, base, 0 __LOCALE_ARG );
}
+__UCXL_ALIAS(strtoul)
+
#if (ULONG_MAX == UINTMAX_MAX) && !defined(L_strtoul_l)
strong_alias(strtoul,strtoumax)
#endif
@@ -356,7 +369,6 @@ strong_alias(strtoul,strtoumax)
strong_alias(__XL(strtoul),__XL(strtoull))
#endif
-__XL_ALIAS(strtoul)
#endif
/**********************************************************************/
@@ -364,13 +376,15 @@ __XL_ALIAS(strtoul)
#if defined(ULLONG_MAX) && (LLONG_MAX > LONG_MAX)
-unsigned long long __XL(strtoull)(const char * __restrict str,
+unsigned long long attribute_hidden __UCXL(strtoull)(const char * __restrict str,
char ** __restrict endptr, int base
__LOCALE_PARAM )
{
return __XL_NPP(_stdlib_strto_ll)(str, endptr, base, 0 __LOCALE_ARG );
}
+__UCXL_ALIAS(strtoull)
+
#if !defined(L_strtoull_l)
#if (ULLONG_MAX == UINTMAX_MAX)
strong_alias(strtoull,strtoumax)
@@ -378,8 +392,6 @@ strong_alias(strtoull,strtoumax)
strong_alias(strtoull,strtouq)
#endif
-__XL_ALIAS(strtoull)
-
#endif /* defined(ULLONG_MAX) && (LLONG_MAX > LONG_MAX) */
#endif
@@ -437,7 +449,7 @@ __XL_ALIAS(strtoull)
#if defined(__UCLIBC_HAS_XLOCALE__) && !defined(__UCLIBC_DO_XLOCALE)
-unsigned long _stdlib_strto_l(register const Wchar * __restrict str,
+unsigned long attribute_hidden _stdlib_strto_l(register const Wchar * __restrict str,
Wchar ** __restrict endptr, int base,
int sflag)
{
@@ -450,7 +462,7 @@ unsigned long _stdlib_strto_l(register const Wchar * __restrict str,
/* This is the main work fuction which handles both strtol (sflag = 1) and
* strtoul (sflag = 0). */
-unsigned long __XL_NPP(_stdlib_strto_l)(register const Wchar * __restrict str,
+unsigned long attribute_hidden __XL_NPP(_stdlib_strto_l)(register const Wchar * __restrict str,
Wchar ** __restrict endptr, int base,
int sflag __LOCALE_PARAM )
{
@@ -582,7 +594,7 @@ unsigned long __XL_NPP(_stdlib_strto_l)(register const Wchar * __restrict str,
#if defined(__UCLIBC_HAS_XLOCALE__) && !defined(__UCLIBC_DO_XLOCALE)
-unsigned long long _stdlib_strto_ll(register const Wchar * __restrict str,
+unsigned long long attribute_hidden _stdlib_strto_ll(register const Wchar * __restrict str,
Wchar ** __restrict endptr, int base,
int sflag)
{
@@ -595,7 +607,7 @@ unsigned long long _stdlib_strto_ll(register const Wchar * __restrict str,
/* This is the main work fuction which handles both strtoll (sflag = 1) and
* strtoull (sflag = 0). */
-unsigned long long __XL_NPP(_stdlib_strto_ll)(register const Wchar * __restrict str,
+unsigned long long attribute_hidden __XL_NPP(_stdlib_strto_ll)(register const Wchar * __restrict str,
Wchar ** __restrict endptr, int base,
int sflag __LOCALE_PARAM )
{
@@ -966,12 +978,14 @@ size_t wcstombs(char * __restrict s, const wchar_t * __restrict pwcs, size_t n)
/**********************************************************************/
#if defined(L_wcstol) || defined(L_wcstol_l)
-long __XL(wcstol)(const wchar_t * __restrict str,
+long __UCXL(wcstol)(const wchar_t * __restrict str,
wchar_t ** __restrict endptr, int base __LOCALE_PARAM )
{
return __XL_NPP(_stdlib_wcsto_l)(str, endptr, base, 1 __LOCALE_ARG );
}
+__UCXL_ALIAS(wcstol)
+
#if (ULONG_MAX == UINTMAX_MAX) && !defined(L_wcstol_l)
strong_alias(wcstol,wcstoimax)
#endif
@@ -980,15 +994,13 @@ strong_alias(wcstol,wcstoimax)
strong_alias(__XL(wcstol),__XL(wcstoll))
#endif
-__XL_ALIAS(wcstol)
-
#endif
/**********************************************************************/
#if defined(L_wcstoll) || defined(L_wcstoll_l)
#if defined(ULLONG_MAX) && (LLONG_MAX > LONG_MAX)
-long long __XL(wcstoll)(const wchar_t * __restrict str,
+long long attribute_hidden __UCXL(wcstoll)(const wchar_t * __restrict str,
wchar_t ** __restrict endptr, int base
__LOCALE_PARAM )
{
@@ -996,6 +1008,8 @@ long long __XL(wcstoll)(const wchar_t * __restrict str,
__LOCALE_ARG );
}
+__UCXL_ALIAS(wcstoll)
+
#if !defined(L_wcstoll_l)
#if (ULLONG_MAX == UINTMAX_MAX)
strong_alias(wcstoll,wcstoimax)
@@ -1003,21 +1017,21 @@ strong_alias(wcstoll,wcstoimax)
strong_alias(wcstoll,wcstoq)
#endif
-__XL_ALIAS(wcstoll)
-
#endif /* defined(ULLONG_MAX) && (LLONG_MAX > LONG_MAX) */
#endif
/**********************************************************************/
#if defined(L_wcstoul) || defined(L_wcstoul_l)
-unsigned long __XL(wcstoul)(const wchar_t * __restrict str,
+unsigned long attribute_hidden __UCXL(wcstoul)(const wchar_t * __restrict str,
wchar_t ** __restrict endptr, int base
__LOCALE_PARAM )
{
return __XL_NPP(_stdlib_wcsto_l)(str, endptr, base, 0 __LOCALE_ARG );
}
+__UCXL_ALIAS(wcstoul)
+
#if (ULONG_MAX == UINTMAX_MAX) && !defined(L_wcstoul_l)
strong_alias(wcstoul,wcstoumax)
#endif
@@ -1026,21 +1040,21 @@ strong_alias(wcstoul,wcstoumax)
strong_alias(__XL(wcstoul),__XL(wcstoull))
#endif
-__XL_ALIAS(wcstoul)
-
#endif
/**********************************************************************/
#if defined(L_wcstoull) || defined(L_wcstoull_l)
#if defined(ULLONG_MAX) && (LLONG_MAX > LONG_MAX)
-unsigned long long __XL(wcstoull)(const wchar_t * __restrict str,
+unsigned long long attribute_hidden __UCXL(wcstoull)(const wchar_t * __restrict str,
wchar_t ** __restrict endptr, int base
__LOCALE_PARAM )
{
return __XL_NPP(_stdlib_wcsto_ll)(str, endptr, base, 0 __LOCALE_ARG );
}
+__UCXL_ALIAS(wcstoull)
+
#if !defined(L_wcstoull_l)
#if (ULLONG_MAX == UINTMAX_MAX)
strong_alias(wcstoull,wcstoumax)
@@ -1048,10 +1062,7 @@ strong_alias(wcstoull,wcstoumax)
strong_alias(wcstoull,wcstouq)
#endif
-__XL_ALIAS(wcstoull)
-
#endif /* defined(ULLONG_MAX) && (LLONG_MAX > LONG_MAX) */
#endif
/**********************************************************************/
-