fix incorrect overflow errors on strtoul, etc.
[musl] / src / stdlib / wcstoull.c
index e324dfb..48c557d 100644 (file)
@@ -6,8 +6,11 @@
 
 unsigned long long wcstoull(const wchar_t *s, wchar_t **p, int base)
 {
-       uintmax_t x = wcstoumax(s, p, base);
-       if (x > ULLONG_MAX) {
+       intmax_t x;
+       if (sizeof(intmax_t) == sizeof(long long))
+               return wcstoumax(s, p, base);
+       x = wcstoimax(s, p, base);
+       if (-x > ULLONG_MAX || x > ULLONG_MAX) {
                errno = ERANGE;
                return ULLONG_MAX;
        }