summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2022-04-24 23:30:57 -0600
committerTom Rini <trini@konsulko.com>2022-04-25 10:00:03 -0400
commitd667a0d8f413d7278f912aa4e671bc56d28b25f2 (patch)
tree333f3a7ff758dc6b9a32207fc8061c8f15bcca8a /lib
parent4e64cae0a060c579078de299c6a118aa6f6d7b5b (diff)
downloadu-boot-d667a0d8f413d7278f912aa4e671bc56d28b25f2.tar.gz
u-boot-d667a0d8f413d7278f912aa4e671bc56d28b25f2.tar.bz2
u-boot-d667a0d8f413d7278f912aa4e671bc56d28b25f2.zip
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>
Diffstat (limited to 'lib')
-rw-r--r--lib/strto.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/lib/strto.c b/lib/strto.c
index f191884376..b1d803a77d 100644
--- a/lib/strto.c
+++ b/lib/strto.c
@@ -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;