lib: Fix a few bugs in trailing_strtoln()

At present this has a minor bug in that it reads the byte before the
start of the string, if it is empty. Also it doesn't handle a
non-numeric prefix which is only one character long.

Fix these bugs with a reworked implementation. Add a test for the second
case. The first one is hard to test.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass
2022-04-24 23:30:57 -06:00
committed by Tom Rini
parent 4e64cae0a0
commit d667a0d8f4
3 changed files with 11 additions and 5 deletions

View File

@@ -189,11 +189,12 @@ long trailing_strtoln(const char *str, const char *end)
if (!end)
end = str + strlen(str);
if (isdigit(end[-1])) {
for (p = end - 1; p > str; p--) {
if (!isdigit(*p))
return dectoul(p + 1, NULL);
}
p = end - 1;
if (p > str && isdigit(*p)) {
do {
if (!isdigit(p[-1]))
return dectoul(p, NULL);
} while (--p > str);
}
return -1;