diff options
Diffstat (limited to 'libc/stdlib')
| -rw-r--r-- | libc/stdlib/stdlib.c | 48 | 
1 files changed, 28 insertions, 20 deletions
| diff --git a/libc/stdlib/stdlib.c b/libc/stdlib/stdlib.c index d909417be..1cd350c31 100644 --- a/libc/stdlib/stdlib.c +++ b/libc/stdlib/stdlib.c @@ -35,12 +35,32 @@  #include <assert.h>  #include <unistd.h> -/* Work around gcc's refusal to create aliases. */ +/* Work around gcc's refusal to create aliases.  + * TODO: Add in a define to disable the aliases? */ + +#if UINT_MAX == ULONG_MAX  #define atoi __ignore_atoi  #define abs __ignore_abs +#endif +#if defined(ULLONG_MAX) && (ULLONG_MAX == ULONG_MAX) +#define llabs __ignore_llabs +#define atoll __ignore_atoll +#define strtoll __ignore_strtoll +#define strtoull __ignore_strtoull +#endif +  #include <stdlib.h> + +#if UINT_MAX == ULONG_MAX  #undef atoi  #undef abs +#endif +#if defined(ULLONG_MAX) && (ULLONG_MAX == ULONG_MAX) +#undef llabs +#undef atoll +#undef strtoll +#undef strtoull +#endif  extern unsigned long  _stdlib_strto_l(register const char * __restrict str, @@ -82,10 +102,7 @@ strong_alias(labs,abs)  #endif  #if defined(ULLONG_MAX) && (ULLONG_MAX == ULONG_MAX) -long long int llabs (long long int j) -{ -	return (j >= 0) ? j : -j; -} +strong_alias(labs,llabs)  #endif  #if ULONG_MAX == UINTMAX_MAX @@ -136,10 +153,7 @@ strong_alias(atol,atoi)  #endif  #if defined(ULLONG_MAX) && (ULLONG_MAX == ULONG_MAX) -long long int atoll (const char *nptr) -{ -	return strtol(nptr, (char **) NULL, 10); -} +strong_alias(atol,atoll)  #endif  long atol(const char *nptr) @@ -169,16 +183,14 @@ strong_alias(strtol,strtoimax)  #endif  #if defined(ULLONG_MAX) && (ULLONG_MAX == ULONG_MAX) -long long int strtoll (__const char *__restrict str, char **__restrict endptr, int base) -{ -    return _stdlib_strto_l(str, endptr, base, 1); -} +strong_alias(strtol,strtoll)  #endif  long strtol(const char * __restrict str, char ** __restrict endptr, int base)  {      return _stdlib_strto_l(str, endptr, base, 1);  } +  #endif  /**********************************************************************/  #ifdef L_strtoll @@ -206,15 +218,11 @@ strong_alias(strtoul,strtoumax)  #endif  #if defined(ULLONG_MAX) && (ULLONG_MAX == ULONG_MAX) -unsigned long long int strtoull (__const char *__restrict str,  -	char **__restrict endptr, int base) -{ -    return _stdlib_strto_l(str, endptr, base, 0); -} +strong_alias(strtoul,strtoull)  #endif -unsigned long strtoul(const char * __restrict str,  -	char ** __restrict endptr, int base) +unsigned long strtoul(const char * __restrict str, +					  char ** __restrict endptr, int base)  {      return _stdlib_strto_l(str, endptr, base, 0);  } | 
