LibC: Fix strtol() not populating `endptr' for valid strings

We were not writing anything out to the `endptr` pointer if a number
was successfully parsed from the input string.

Fixes #460.
This commit is contained in:
Andreas Kling 2019-08-17 22:07:48 +02:00
parent a20f3c6647
commit 266b9cb654
Notes: sideshowbarker 2024-07-19 12:38:15 +09:00

View file

@ -352,7 +352,8 @@ long strtol(const char* str, char** endptr, int base)
}
}
}
const char* estr = str + strlen(str) - 1;
size_t length = strlen(str);
const char* estr = str + length - 1;
long track = 1;
long num = 0;
while (estr >= str) {
@ -362,12 +363,14 @@ long strtol(const char* str, char** endptr, int base)
digit_value = 10 + (*estr - 'A');
num += (track *= base) / base * digit_value;
} else {
if (endptr != NULL)
if (endptr)
*endptr = const_cast<char*>(estr);
return 0;
};
estr--;
}
if (endptr)
*endptr = const_cast<char*>(str + length);
return num * sign;
}