diff options
-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); } |