]> git.ozlabs.org Git - ccan/commitdiff
tal/str: make tal_count() work for strsplit.
authorRusty Russell <rusty@rustcorp.com.au>
Mon, 3 Dec 2012 08:59:39 +0000 (19:29 +1030)
committerRusty Russell <rusty@rustcorp.com.au>
Mon, 3 Dec 2012 08:59:39 +0000 (19:29 +1030)
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
ccan/tal/str/str.c
ccan/tal/str/str.h
ccan/tal/str/test/run.c

index 09c45447fb6e3e3fa53882f4e4d829cab001aa0b..7d5b103a66cffd848fd6a8371fc1bce5f7c25eca 100644 (file)
@@ -49,6 +49,11 @@ char **strsplit(const tal_t *ctx,
                        goto fail;
        }
        parts[num] = NULL;
+
+       /* Ensure that tal_count() is correct. */
+       if (unlikely(!tal_resize(&parts, num+1)))
+               goto fail;
+
        if (taken(delims))
                tal_free(delims);
        return parts;
index 7d0a94541e41b10501ca2076ab6536ffa489d7e1..295c3a6b9cb0b0c63d779877b0001b012641ce9b 100644 (file)
@@ -26,7 +26,8 @@ enum strsplit {
  * Multiple delimiters result in empty substrings.  By definition, no
  * delimiters will appear in the substrings.
  *
- * The final char * in the array will be NULL.
+ * The final char * in the array will be NULL, and tal_count() will
+ * return the number of elements plus 1 (for that NULL).
  *
  * Example:
  *     #include <ccan/tal/str/str.h>
index 70ebbc92fd2041acc5df1ffbfd7dad4e79b1dd13..303a0fd273e14e445ffb1f4406d9c89edbaa5f06 100644 (file)
@@ -14,24 +14,27 @@ int main(int argc, char *argv[])
        char **split, *str;
        void *ctx;
 
-       plan_tests(65);
+       plan_tests(69);
        split = strsplit(NULL, "hello  world", " ", STR_EMPTY_OK);
        ok1(!strcmp(split[0], "hello"));
        ok1(!strcmp(split[1], ""));
        ok1(!strcmp(split[2], "world"));
        ok1(split[3] == NULL);
+       ok1(tal_count(split) == 4);
        tal_free(split);
 
        split = strsplit(NULL, "hello  world", " ", STR_NO_EMPTY);
        ok1(!strcmp(split[0], "hello"));
        ok1(!strcmp(split[1], "world"));
        ok1(split[2] == NULL);
+       ok1(tal_count(split) == 3);
        tal_free(split);
 
        split = strsplit(NULL, "  hello  world", " ", STR_NO_EMPTY);
        ok1(!strcmp(split[0], "hello"));
        ok1(!strcmp(split[1], "world"));
        ok1(split[2] == NULL);
+       ok1(tal_count(split) == 3);
        tal_free(split);
 
        split = strsplit(NULL, "hello  world", "o ", STR_EMPTY_OK);
@@ -41,6 +44,7 @@ int main(int argc, char *argv[])
        ok1(!strcmp(split[3], "w"));
        ok1(!strcmp(split[4], "rld"));
        ok1(split[5] == NULL);
+       ok1(tal_count(split) == 6);
 
        ctx = split;
        split = strsplit(ctx, "hello  world", "o ", STR_EMPTY_OK);