From: Jeff King Date: Tue, 12 Mar 2024 09:17:10 +0000 (-0400) Subject: strbuf: simplify comment-handling in add_lines() helper X-Git-Tag: v2.45.0-rc0~47^2~15 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=db7f93093f2231a922c3d58e7ef5135168e7bb80;p=thirdparty%2Fgit.git strbuf: simplify comment-handling in add_lines() helper In strbuf_add_commented_lines(), we prepare two strings with potential prefixes: one with just the comment char, and one with an additional space. In the add_lines() helper, we use the one without the extra space for blank lines or lines starting with a tab. While passing in two separate prefixes to the helper is very flexible, it's more flexibility than we actually use (or are likely to use, since the rules inside add_lines() only make sense if "prefix2" is a variant of "prefix1" without the extra space). And setting up the two strings makes refactoring in strbuf_add_commented_lines() awkward. Instead, let's pass in a single string, and just let add_lines() add the extra space to the result as appropriate. We do still need to pass in a flag to trigger this behavior. The helper is shared by strbuf_add_lines(), which passes in a NULL "prefix2" to inhibit this extra handling. Signed-off-by: Jeff King Signed-off-by: Junio C Hamano --- diff --git a/strbuf.c b/strbuf.c index 7827178d8e..689d8acd5e 100644 --- a/strbuf.c +++ b/strbuf.c @@ -340,18 +340,17 @@ void strbuf_addf(struct strbuf *sb, const char *fmt, ...) } static void add_lines(struct strbuf *out, - const char *prefix1, - const char *prefix2, - const char *buf, size_t size) + const char *prefix, + const char *buf, size_t size, + int space_after_prefix) { while (size) { - const char *prefix; const char *next = memchr(buf, '\n', size); next = next ? (next + 1) : (buf + size); - prefix = ((prefix2 && (buf[0] == '\n' || buf[0] == '\t')) - ? prefix2 : prefix1); strbuf_addstr(out, prefix); + if (space_after_prefix && buf[0] != '\n' && buf[0] != '\t') + strbuf_addch(out, ' '); strbuf_add(out, buf, next - buf); size -= next - buf; buf = next; @@ -362,14 +361,11 @@ 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 prefix1[3]; - static char prefix2[2]; + static char prefix[2]; - if (prefix1[0] != comment_line_char) { - xsnprintf(prefix1, sizeof(prefix1), "%c ", comment_line_char); - xsnprintf(prefix2, sizeof(prefix2), "%c", comment_line_char); - } - add_lines(out, prefix1, prefix2, buf, size); + if (prefix[0] != comment_line_char) + xsnprintf(prefix, sizeof(prefix), "%c", comment_line_char); + add_lines(out, prefix, buf, size, 1); } void strbuf_commented_addf(struct strbuf *sb, char comment_line_char, @@ -750,7 +746,7 @@ ssize_t strbuf_read_file(struct strbuf *sb, const char *path, size_t hint) void strbuf_add_lines(struct strbuf *out, const char *prefix, const char *buf, size_t size) { - add_lines(out, prefix, NULL, buf, size); + add_lines(out, prefix, buf, size, 0); } void strbuf_addstr_xml_quoted(struct strbuf *buf, const char *s)