From 7b12b86450e684bec37c3c9c822b6101621c16b9 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 13 Jun 2024 00:17:20 +0900 Subject: [PATCH 1/3] strbuf: use CMP() macro strbuf_child_entry.c is uint8_t, so using CMP() is safer. This also adds missing assertions. --- src/basic/strbuf.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/basic/strbuf.c b/src/basic/strbuf.c index 226893842b..c08aa82e54 100644 --- a/src/basic/strbuf.c +++ b/src/basic/strbuf.c @@ -74,9 +74,11 @@ struct strbuf* strbuf_free(struct strbuf *str) { return mfree(str); } -static int strbuf_children_cmp(const struct strbuf_child_entry *n1, - const struct strbuf_child_entry *n2) { - return n1->c - n2->c; +static int strbuf_children_cmp(const struct strbuf_child_entry *n1, const struct strbuf_child_entry *n2) { + assert(n1); + assert(n2); + + return CMP(n1->c, n2->c); } static void bubbleinsert(struct strbuf_node *node, From c616e30e9c4fe95efe1a1153b32254e9d6061bb0 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 13 Jun 2024 00:20:26 +0900 Subject: [PATCH 2/3] strbuf: several cleanups - use FOREACH_ARRAY(), - add one missing assertion, - reduce indentation. --- src/basic/strbuf.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/basic/strbuf.c b/src/basic/strbuf.c index c08aa82e54..e12c0f9b11 100644 --- a/src/basic/strbuf.c +++ b/src/basic/strbuf.c @@ -48,20 +48,21 @@ struct strbuf* strbuf_new(void) { } static struct strbuf_node* strbuf_node_cleanup(struct strbuf_node *node) { - size_t i; + assert(node); + + FOREACH_ARRAY(child, node->children, node->children_count) + strbuf_node_cleanup(child->child); - for (i = 0; i < node->children_count; i++) - strbuf_node_cleanup(node->children[i].child); free(node->children); return mfree(node); } /* clean up trie data, leave only the string buffer */ void strbuf_complete(struct strbuf *str) { - if (!str) + if (!str || !str->root) return; - if (str->root) - str->root = strbuf_node_cleanup(str->root); + + str->root = strbuf_node_cleanup(str->root); } /* clean up everything */ From 6548aef1cdb56dc3afcd2f474619888561d8f454 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 13 Jun 2024 00:24:38 +0900 Subject: [PATCH 3/3] strbuf: use _cleanup_ attribute at one more place --- src/basic/strbuf.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/basic/strbuf.c b/src/basic/strbuf.c index e12c0f9b11..a53d733594 100644 --- a/src/basic/strbuf.c +++ b/src/basic/strbuf.c @@ -27,24 +27,22 @@ */ struct strbuf* strbuf_new(void) { - struct strbuf *str; + _cleanup_(strbuf_freep) struct strbuf *str = NULL; str = new(struct strbuf, 1); if (!str) return NULL; + *str = (struct strbuf) { .buf = new0(char, 1), .root = new0(struct strbuf_node, 1), .len = 1, .nodes_count = 1, }; - if (!str->buf || !str->root) { - free(str->buf); - free(str->root); - return mfree(str); - } + if (!str->buf || !str->root) + return NULL; - return str; + return TAKE_PTR(str); } static struct strbuf_node* strbuf_node_cleanup(struct strbuf_node *node) {