diff mbox series

[6/6] format-patch: simplify after-subject MIME header handling

Message ID 20240320003557.GF904136@coredump.intra.peff.net (mailing list archive)
State Accepted
Commit 838ba014ce8226e0fb6c87b1b1c587fc61582323
Headers show
Series [1/6] shortlog: stop setting pp.print_email_subject | expand

Commit Message

Jeff King March 20, 2024, 12:35 a.m. UTC
In log_write_email_headers(), we append our MIME headers to the set of
extra headers by creating a new strbuf, adding the existing headers, and
then adding our new ones.  We had to do it this way when our output
buffer might point to the constant opt->extra_headers variable.

But since the previous commit, we always make a local copy of that
variable. Let's turn that into a strbuf, which lets the MIME code simply
append to it. That simplifies the function and avoids a pointless extra
copy of the headers.

Signed-off-by: Jeff King <peff@peff.net>
---
 log-tree.c | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

Comments

Kristoffer Haugsbakk March 22, 2024, 10:08 p.m. UTC | #1
On Wed, Mar 20, 2024, at 01:35, Jeff King wrote:
> In log_write_email_headers(), we append our MIME headers to the set of
> extra headers by creating a new strbuf, adding the existing headers, and
> then adding our new ones.  We had to do it this way when our output
> buffer might point to the constant opt->extra_headers variable.
>
> But since the previous commit, we always make a local copy of that
> variable. Let's turn that into a strbuf, which lets the MIME code simply
> append to it. That simplifies the function and avoids a pointless extra
> copy of the headers.
>
> Signed-off-by: Jeff King <peff@peff.net>

I like how all the previous work makes this change straightforward.
diff mbox series

Patch

diff --git a/log-tree.c b/log-tree.c
index 5092a75958..eb2e841046 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -474,12 +474,15 @@  void log_write_email_headers(struct rev_info *opt, struct commit *commit,
 			     int *need_8bit_cte_p,
 			     int maybe_multipart)
 {
-	char *extra_headers = xstrdup_or_null(opt->extra_headers);
+	struct strbuf headers = STRBUF_INIT;
 	const char *name = oid_to_hex(opt->zero_commit ?
 				      null_oid() : &commit->object.oid);
 
 	*need_8bit_cte_p = 0; /* unknown */
 
+	if (opt->extra_headers)
+		strbuf_addstr(&headers, opt->extra_headers);
+
 	fprintf(opt->diffopt.file, "From %s Mon Sep 17 00:00:00 2001\n", name);
 	graph_show_oneline(opt->graph);
 	if (opt->message_id) {
@@ -496,15 +499,13 @@  void log_write_email_headers(struct rev_info *opt, struct commit *commit,
 		graph_show_oneline(opt->graph);
 	}
 	if (opt->mime_boundary && maybe_multipart) {
-		struct strbuf subject_buffer = STRBUF_INIT;
 		static struct strbuf buffer = STRBUF_INIT;
 		struct strbuf filename =  STRBUF_INIT;
 		*need_8bit_cte_p = -1; /* NEVER */
 
 		strbuf_reset(&buffer);
 
-		strbuf_addf(&subject_buffer,
-			 "%s"
+		strbuf_addf(&headers,
 			 "MIME-Version: 1.0\n"
 			 "Content-Type: multipart/mixed;"
 			 " boundary=\"%s%s\"\n"
@@ -515,11 +516,8 @@  void log_write_email_headers(struct rev_info *opt, struct commit *commit,
 			 "Content-Type: text/plain; "
 			 "charset=UTF-8; format=fixed\n"
 			 "Content-Transfer-Encoding: 8bit\n\n",
-			 extra_headers ? extra_headers : "",
 			 mime_boundary_leader, opt->mime_boundary,
 			 mime_boundary_leader, opt->mime_boundary);
-		free(extra_headers);
-		extra_headers = strbuf_detach(&subject_buffer, NULL);
 
 		if (opt->numbered_files)
 			strbuf_addf(&filename, "%d", opt->nr);
@@ -539,7 +537,7 @@  void log_write_email_headers(struct rev_info *opt, struct commit *commit,
 		opt->diffopt.stat_sep = buffer.buf;
 		strbuf_release(&filename);
 	}
-	*extra_headers_p = extra_headers;
+	*extra_headers_p = headers.len ? strbuf_detach(&headers, NULL) : NULL;
 }
 
 static void show_sig_lines(struct rev_info *opt, int status, const char *bol)