| OLD | NEW | 
|---|
| 1 #include "stdio_impl.h" | 1 #include "stdio_impl.h" | 
| 2 #include "intscan.h" | 2 #include "intscan.h" | 
| 3 #include "shgetc.h" | 3 #include "shgetc.h" | 
| 4 #include <inttypes.h> | 4 #include <inttypes.h> | 
| 5 #include <limits.h> | 5 #include <limits.h> | 
| 6 #include <ctype.h> | 6 #include <ctype.h> | 
| 7 #include "libc.h" | 7 #include "libc.h" | 
| 8 | 8 | 
| 9 static unsigned long long strtox(const char *s, char **p, int base, unsigned lon
    g long lim) | 9 static unsigned long long strtox(const char* s, | 
| 10 { | 10                                  char** p, | 
| 11 »       /* FIXME: use a helper function or macro to setup the FILE */ | 11                                  int base, | 
| 12 »       FILE f; | 12                                  unsigned long long lim) { | 
| 13 »       f.flags = 0; | 13   /* FIXME: use a helper function or macro to setup the FILE */ | 
| 14 »       f.buf = f.rpos = (void *)s; | 14   FILE f; | 
| 15 »       if ((size_t)s > (size_t)-1/2) | 15   f.flags = 0; | 
| 16 »       »       f.rend = (void *)-1; | 16   f.buf = f.rpos = (void*)s; | 
| 17 »       else | 17   if ((size_t)s > (size_t)-1 / 2) | 
| 18 »       »       f.rend = (unsigned char *)s+(size_t)-1/2; | 18     f.rend = (void*)-1; | 
| 19 »       f.lock = -1; | 19   else | 
| 20 »       shlim(&f, 0); | 20     f.rend = (unsigned char*)s + (size_t)-1 / 2; | 
| 21 »       unsigned long long y = __intscan(&f, base, 1, lim); | 21   f.lock = -1; | 
| 22 »       if (p) { | 22   shlim(&f, 0); | 
| 23 »       »       size_t cnt = shcnt(&f); | 23   unsigned long long y = __intscan(&f, base, 1, lim); | 
| 24 »       »       *p = (char *)s + cnt; | 24   if (p) { | 
| 25 »       } | 25     size_t cnt = shcnt(&f); | 
| 26 »       return y; | 26     *p = (char*)s + cnt; | 
|  | 27   } | 
|  | 28   return y; | 
| 27 } | 29 } | 
| 28 | 30 | 
| 29 unsigned long long strtoull(const char *restrict s, char **restrict p, int base) | 31 unsigned long long strtoull(const char* restrict s, | 
| 30 { | 32                             char** restrict p, | 
| 31 »       return strtox(s, p, base, ULLONG_MAX); | 33                             int base) { | 
|  | 34   return strtox(s, p, base, ULLONG_MAX); | 
| 32 } | 35 } | 
| 33 | 36 | 
| 34 long long strtoll(const char *restrict s, char **restrict p, int base) | 37 long long strtoll(const char* restrict s, char** restrict p, int base) { | 
| 35 { | 38   return strtox(s, p, base, LLONG_MIN); | 
| 36 »       return strtox(s, p, base, LLONG_MIN); |  | 
| 37 } | 39 } | 
| 38 | 40 | 
| 39 unsigned long strtoul(const char *restrict s, char **restrict p, int base) | 41 unsigned long strtoul(const char* restrict s, char** restrict p, int base) { | 
| 40 { | 42   return strtox(s, p, base, ULONG_MAX); | 
| 41 »       return strtox(s, p, base, ULONG_MAX); |  | 
| 42 } | 43 } | 
| 43 | 44 | 
| 44 long strtol(const char *restrict s, char **restrict p, int base) | 45 long strtol(const char* restrict s, char** restrict p, int base) { | 
| 45 { | 46   return strtox(s, p, base, 0UL + LONG_MIN); | 
| 46 »       return strtox(s, p, base, 0UL+LONG_MIN); |  | 
| 47 } | 47 } | 
| 48 | 48 | 
| 49 intmax_t strtoimax(const char *restrict s, char **restrict p, int base) | 49 intmax_t strtoimax(const char* restrict s, char** restrict p, int base) { | 
| 50 { | 50   return strtoll(s, p, base); | 
| 51 »       return strtoll(s, p, base); |  | 
| 52 } | 51 } | 
| 53 | 52 | 
| 54 uintmax_t strtoumax(const char *restrict s, char **restrict p, int base) | 53 uintmax_t strtoumax(const char* restrict s, char** restrict p, int base) { | 
| 55 { | 54   return strtoull(s, p, base); | 
| 56 »       return strtoull(s, p, base); |  | 
| 57 } | 55 } | 
| 58 | 56 | 
| 59 weak_alias(strtol, __strtol_internal); | 57 weak_alias(strtol, __strtol_internal); | 
| 60 weak_alias(strtoul, __strtoul_internal); | 58 weak_alias(strtoul, __strtoul_internal); | 
| 61 weak_alias(strtoll, __strtoll_internal); | 59 weak_alias(strtoll, __strtoll_internal); | 
| 62 weak_alias(strtoull, __strtoull_internal); | 60 weak_alias(strtoull, __strtoull_internal); | 
| 63 weak_alias(strtoimax, __strtoimax_internal); | 61 weak_alias(strtoimax, __strtoimax_internal); | 
| 64 weak_alias(strtoumax, __strtoumax_internal); | 62 weak_alias(strtoumax, __strtoumax_internal); | 
| OLD | NEW | 
|---|