|
@@ -48,11 +48,9 @@ unsigned int _parse_integer(const char *s, unsigned int base, unsigned long long
|
|
{
|
|
{
|
|
unsigned long long res;
|
|
unsigned long long res;
|
|
unsigned int rv;
|
|
unsigned int rv;
|
|
- int overflow;
|
|
|
|
|
|
|
|
res = 0;
|
|
res = 0;
|
|
rv = 0;
|
|
rv = 0;
|
|
- overflow = 0;
|
|
|
|
while (*s) {
|
|
while (*s) {
|
|
unsigned int val;
|
|
unsigned int val;
|
|
|
|
|
|
@@ -71,15 +69,13 @@ unsigned int _parse_integer(const char *s, unsigned int base, unsigned long long
|
|
*/
|
|
*/
|
|
if (unlikely(res & (~0ull << 60))) {
|
|
if (unlikely(res & (~0ull << 60))) {
|
|
if (res > div_u64(ULLONG_MAX - val, base))
|
|
if (res > div_u64(ULLONG_MAX - val, base))
|
|
- overflow = 1;
|
|
|
|
|
|
+ rv |= KSTRTOX_OVERFLOW;
|
|
}
|
|
}
|
|
res = res * base + val;
|
|
res = res * base + val;
|
|
rv++;
|
|
rv++;
|
|
s++;
|
|
s++;
|
|
}
|
|
}
|
|
*p = res;
|
|
*p = res;
|
|
- if (overflow)
|
|
|
|
- rv |= KSTRTOX_OVERFLOW;
|
|
|
|
return rv;
|
|
return rv;
|
|
}
|
|
}
|
|
|
|
|