From: Rusty Russell Date: Tue, 24 Jan 2017 06:22:00 +0000 (+1030) Subject: tal: make tal_len/tal_count(NULL) return 0. X-Git-Url: http://git.ozlabs.org/?p=ccan;a=commitdiff_plain;h=9b3f4ef6eec6a5981dcaa62f45da49b8f4f95388;hp=b137aba87d2c6dc791539b71f1b3ca8c371b8496 tal: make tal_len/tal_count(NULL) return 0. Previously it crashed, but if you're always dealing with tal arrays, this is painful. Signed-off-by: Rusty Russell --- diff --git a/ccan/tal/tal.c b/ccan/tal/tal.c index 2a2eca77..555dd133 100644 --- a/ccan/tal/tal.c +++ b/ccan/tal/tal.c @@ -654,6 +654,9 @@ size_t tal_len(const tal_t *ptr) { struct length *l; + if (!ptr) + return 0; + l = find_property(debug_tal(to_tal_hdr(ptr)), LENGTH); if (!l) return 0; diff --git a/ccan/tal/tal.h b/ccan/tal/tal.h index 200c2b16..e525a01d 100644 --- a/ccan/tal/tal.h +++ b/ccan/tal/tal.h @@ -304,18 +304,18 @@ const char *tal_name(const tal_t *ptr); /** * tal_count - get the count of objects in a tal_arr. - * @ptr: The tal allocated object array. + * @ptr: The tal allocated object array (or NULL) * - * Returns 0 if @ptr has no length property, but be aware that that is - * also a valid size! + * Returns 0 if @ptr has no length property or is NULL, but be aware + * that that is also a valid size! */ #define tal_count(p) (tal_len(p) / sizeof(*p)) /** * tal_len - get the count of bytes in a tal_arr. - * @ptr: The tal allocated object array. + * @ptr: The tal allocated object array (or NULL) * - * Returns 0 if @ptr has no length property, but be aware that that is + * Returns 0 if @ptr has no length property or NULL, but be aware that that is * also a valid size! */ size_t tal_len(const tal_t *ptr); diff --git a/ccan/tal/test/run-count.c b/ccan/tal/test/run-count.c index 6a4eb4ab..33049b9f 100644 --- a/ccan/tal/test/run-count.c +++ b/ccan/tal/test/run-count.c @@ -43,7 +43,11 @@ int main(void) tal_set_backend(my_alloc, my_realloc, my_free, NULL); - plan_tests(19 * 3); + plan_tests(2 + 19 * 3); + + p1 = NULL; + ok1(tal_len(p1) == 0); + ok1(tal_count(p1) == 0); for (i = 0; i < 3; i++) { move = i; diff --git a/tools/depends.c b/tools/depends.c index 95bda1b5..e6a79d71 100644 --- a/tools/depends.c +++ b/tools/depends.c @@ -306,7 +306,7 @@ static char *get_one_ported(const void *ctx, const char *dir, char **ported = get_one_prop(ctx, dir, "ported", get_info); /* No news is good news. */ - if (!ported || tal_count(ported) == 0) + if (tal_count(ported) == 0) return NULL; if (tal_count(ported) != 1)