[PATCH 02/15] strbuf: avoid static variables in strbuf_add_commented_lines()
- From
Jeff King <peff@peff.net>
- Date
- Mar 7, 2024, 09:16 UTC
- Message-ID
- <20240307091652.GB2080210@coredump.intra.peff.net>
- In-Reply-To
- <20240307091407.GA2072522@coredump.intra.peff.net>
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> --- In the long run we'll end up just passing in the comment-string that the caller gives us, so this patch could arguably be dropped until that point.
strbuf.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/strbuf.c b/strbuf.c index 689d8acd5e..ca80a2c77e 100644 --- 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); }
-- 2.44.0.463.g71abcb3a9f