format_config: don't init strbuf
authorJeff King <peff@peff.net>
Thu, 20 Aug 2015 14:46:04 +0000 (10:46 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 20 Aug 2015 20:16:50 +0000 (13:16 -0700)
It's unusual for a function which writes to a passed-in
strbuf to call strbuf_init; that will throw away anything
already there, leaking memory. In this case, there are
exactly two callers; one relies on this initialization and
the other passes in an already-initialized buffer.

There's no leak, as the initialized buffer doesn't have
anything in it. But let's bump the strbuf_init out to the
one caller who needs it, making format_config more
idiomatic.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/config.c
index 810e104224d11236ed5aa6a2bf7345df69347807..91aa56feedc87e52a63dd6662d4227bba6267ccf 100644 (file)
@@ -108,8 +108,6 @@ struct strbuf_list {
 
 static int format_config(struct strbuf *buf, const char *key_, const char *value_)
 {
-       strbuf_init(buf, 0);
-
        if (show_keys)
                strbuf_addstr(buf, key_);
        if (!omit_values) {
@@ -166,6 +164,7 @@ static int collect_config(const char *key_, const char *value_, void *cb)
                return 0;
 
        ALLOC_GROW(values->items, values->nr + 1, values->alloc);
+       strbuf_init(&values->items[values->nr], 0);
 
        return format_config(&values->items[values->nr++], key_, value_);
 }