]> git.ipfire.org Git - thirdparty/git.git/commitdiff
strbuf: avoid static variables in strbuf_add_commented_lines()
authorJeff King <peff@peff.net>
Tue, 12 Mar 2024 09:17:15 +0000 (05:17 -0400)
committerJunio C Hamano <gitster@pobox.com>
Tue, 12 Mar 2024 20:28:09 +0000 (13:28 -0700)
In strbuf_add_commented_lines(), we have to convert the single-byte
comment_line_char into a string to pass to add_lines(). We cache the
created string using a static-local variable. But this makes the
function non-reentrant, and it's doubtful that this provides any real
performance benefit given that we know the string always contains a
single character.

So let's just create it from scratch each time, and to give the compiler
the maximal opportunity to make it fast we'll ditch the over-complicated
xsnprintf() and just assign directly into the array.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
strbuf.c

index 689d8acd5e076f06a1eed20ab90ecb76f84872a3..ca80a2c77ee5f33f9fcbdf714df94cb642980714 100644 (file)
--- a/strbuf.c
+++ b/strbuf.c
@@ -361,10 +361,10 @@ static void add_lines(struct strbuf *out,
 void strbuf_add_commented_lines(struct strbuf *out, const char *buf,
                                size_t size, char comment_line_char)
 {
-       static char prefix[2];
+       char prefix[2];
 
-       if (prefix[0] != comment_line_char)
-               xsnprintf(prefix, sizeof(prefix), "%c", comment_line_char);
+       prefix[0] = comment_line_char;
+       prefix[1] = '\0';
        add_lines(out, prefix, buf, size, 1);
 }