]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
lib: Handle a special case with str_to_list()
authorSimon Glass <sjg@chromium.org>
Tue, 30 Jul 2024 14:39:36 +0000 (08:39 -0600)
committerTom Rini <trini@konsulko.com>
Wed, 7 Aug 2024 14:49:10 +0000 (08:49 -0600)
The current implementation can return an extra result at the end when
the string ends with a space. Fix this by adding a special case.

Signed-off-by: Simon Glass <sjg@chromium.org>
lib/strto.c
test/str_ut.c

index 5157332d6c1d7966e783455d57f8bc1115c29f40..f83ac67c6662b75f58fdada6c4321473543022af 100644 (file)
@@ -236,12 +236,14 @@ const char **str_to_list(const char *instr)
                return NULL;
 
        /* count the number of space-separated strings */
-       for (count = *str != '\0', p = str; *p; p++) {
+       for (count = 0, p = str; *p; p++) {
                if (*p == ' ') {
                        count++;
                        *p = '\0';
                }
        }
+       if (p != str && p[-1])
+               count++;
 
        /* allocate the pointer array, allowing for a NULL terminator */
        ptr = calloc(count + 1, sizeof(char *));
index 389779859a3d28a06c0152696e482839d086389b..96e048975d882245d967050fae04321f331f8538 100644 (file)
@@ -342,9 +342,7 @@ static int test_str_to_list(struct unit_test_state *uts)
        ut_asserteq_str("space", ptr[3]);
        ut_assertnonnull(ptr[4]);
        ut_asserteq_str("", ptr[4]);
-       ut_assertnonnull(ptr[5]);
-       ut_asserteq_str("", ptr[5]);
-       ut_assertnull(ptr[6]);
+       ut_assertnull(ptr[5]);
        str_free_list(ptr);
        ut_assertok(ut_check_delta(start));