unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
From: David Bremner <david@tethera.net>
To: notmuch@notmuchmail.org, notmuch@freelists.org
Subject: [PATCH 19/23] lib: refactor _notmuch_messsage_file_get_combined_header
Date: Sat,  3 Jun 2017 14:47:50 -0300	[thread overview]
Message-ID: <20170603174754.16911-20-david@tethera.net> (raw)
In-Reply-To: <20170603174754.16911-1-david@tethera.net>

We need to rewrite the loop for gmime-3.0; move the loop body to its
own function to avoid code duplication.  Keep the common exit via
"goto DONE" to make this pure code movement.  It's important to note
that the existing exit path only deallocates the iterator.
---
 lib/message-file.c | 57 ++++++++++++++++++++++++++++++------------------------
 1 file changed, 32 insertions(+), 25 deletions(-)

diff --git a/lib/message-file.c b/lib/message-file.c
index db18b163..7d38ebd0 100644
--- a/lib/message-file.c
+++ b/lib/message-file.c
@@ -201,6 +201,37 @@ _notmuch_message_file_get_mime_message (notmuch_message_file_t *message,
  *
  * Return NULL on errors, empty string for non-existing headers.
  */
+
+static char *
+_extend_header (char *combined, const char *value) {
+    char *decoded;
+
+    decoded = g_mime_utils_header_decode_text (value);
+    if (! decoded) {
+	if (combined) {
+	    g_free (combined);
+	    combined = NULL;
+	}
+	goto DONE;
+    }
+
+    if (combined) {
+	char *tmp = g_strdup_printf ("%s %s", combined, decoded);
+	g_free (decoded);
+	g_free (combined);
+	if (! tmp) {
+	    combined = NULL;
+	    goto DONE;
+	}
+
+	combined = tmp;
+    } else {
+	combined = decoded;
+    }
+ DONE:
+    return combined;
+}
+
 static char *
 _notmuch_message_file_get_combined_header (notmuch_message_file_t *message,
 					   const char *header)
@@ -222,37 +253,13 @@ _notmuch_message_file_get_combined_header (notmuch_message_file_t *message,
 
     do {
 	const char *value;
-	char *decoded;
-
 	if (strcasecmp (g_mime_header_iter_get_name (iter), header) != 0)
 	    continue;
 
 	/* Note that GMime retains ownership of value... */
 	value = g_mime_header_iter_get_value (iter);
 
-	/* ... while decoded needs to be freed with g_free(). */
-	decoded = g_mime_utils_header_decode_text (value);
-	if (! decoded) {
-	    if (combined) {
-		g_free (combined);
-		combined = NULL;
-	    }
-	    goto DONE;
-	}
-
-	if (combined) {
-	    char *tmp = g_strdup_printf ("%s %s", combined, decoded);
-	    g_free (decoded);
-	    g_free (combined);
-	    if (! tmp) {
-		combined = NULL;
-		goto DONE;
-	    }
-
-	    combined = tmp;
-	} else {
-	    combined = decoded;
-	}
+	combined = _extend_header (combined, value);
     } while (g_mime_header_iter_next (iter));
 
     /* Return empty string for non-existing headers. */
-- 
2.11.0

  parent reply	other threads:[~2017-06-03 17:48 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-03 17:47 David Bremner
2017-06-03 17:47 ` [PATCH 01/23] emacs: convert to use format-version 3 David Bremner
2017-06-03 17:47 ` [PATCH 02/23] devel/schemata: describe version 4 David Bremner
2017-06-03 17:47 ` [PATCH 03/23] cli: implement structured output " David Bremner
2017-07-04 11:37   ` David Bremner
2017-06-03 17:47 ` [PATCH 04/23] test/multipart: reorganize creation of multipart message David Bremner
2017-06-03 17:47 ` [PATCH 05/23] test: mark inclusion of headers as broken in gmime-2.x David Bremner
2017-06-03 17:47 ` [PATCH 06/23] test: mark test as broken in gmime 3.0 David Bremner
2017-06-03 17:47 ` [PATCH 07/23] test/crypto: mark extra space in userid as a bug in gmime-2.6 David Bremner
2017-07-05 20:26   ` Tomi Ollila
2017-07-06 14:15     ` Daniel Kahn Gillmor
2017-06-03 17:47 ` [PATCH 08/23] test: add test for modified pgp/mime signed message David Bremner
2017-06-03 17:47 ` [PATCH 09/23] test/crypto: add test for corrupted signatures David Bremner
2017-07-05 11:03   ` David Bremner
2017-06-03 17:47 ` [PATCH 10/23] test: test parsing of malformed from addresses David Bremner
2017-06-03 17:47 ` [PATCH 11/23] cli: replace use of g_mime_message_get_date_as_string David Bremner
2017-06-03 17:47 ` [PATCH 12/23] cli: replace use of g_mime_message_get_reply_to David Bremner
2017-06-03 17:47 ` [PATCH 13/23] lib/cli: replace use of g_mime_message_get_sender David Bremner
2017-06-03 17:47 ` [PATCH 14/23] cli: replace use of g_mime_message_get_recipients David Bremner
2017-06-03 17:47 ` [PATCH 15/23] util: fake gmime-2.6 compatible API for gmime-3.0 David Bremner
2017-06-03 17:47 ` [PATCH 16/23] cli: generalize use of GMIME_SIGNATURE_{ERROR, STATUS} to gmime-3 David Bremner
2017-07-07 22:18   ` Daniel Kahn Gillmor
2017-06-03 17:47 ` [PATCH 17/23] cli: hide rename of GMimeCertificateTrust David Bremner
2017-06-03 17:47 ` [PATCH 18/23] lib: wrap use of g_mime_utils_header_decode_date David Bremner
2017-06-03 17:47 ` David Bremner [this message]
2017-06-03 17:47 ` [PATCH 20/23] lib: add version of _n_m_f_get_combinded_header for gmime 3.0 David Bremner
2017-06-03 17:47 ` [PATCH 21/23] lib: paper over allocation difference David Bremner
2017-06-03 17:47 ` [PATCH 22/23] cli: make keyid from fingerprint in gmime 3.0 David Bremner
2017-06-03 17:47 ` [PATCH 23/23] cli: wrap getting uid David Bremner
2017-07-14 13:12   ` [PATCH 1/3] config: deprecate/drop crypto.gpg_path under gmime 2.6/3.0 Daniel Kahn Gillmor
2017-07-14 13:12     ` [PATCH 2/3] clean up use of constants in g_mime_multipart_ wrappers Daniel Kahn Gillmor
2017-07-14 13:12     ` [PATCH 3/3] crypto: Avoid explicit handling of GMimeCryptoContext in gmime 3.0 Daniel Kahn Gillmor
2017-07-15 11:55       ` David Bremner
2017-07-15 18:57       ` [PATCH 1/4] cli/crypto: treat failure to create a crypto context as fatal David Bremner
2017-07-15 18:57         ` [PATCH 2/4] cli/crypto: eliminated compiler warnings about unused arguments David Bremner
2017-07-15 18:57         ` [PATCH 3/4] crypto: Avoid explicit handling of GMimeCryptoContext in gmime 3 David Bremner
2017-07-15 22:45           ` Daniel Kahn Gillmor
2017-07-15 23:01             ` [PATCH v2 1/4] cli/crypto: treat failure to create a crypto context as fatal Daniel Kahn Gillmor
2017-07-15 23:01               ` [PATCH v2 2/4] cli/crypto: eliminated compiler warnings about unused arguments Daniel Kahn Gillmor
2017-07-15 23:01               ` [PATCH v2 3/4] crypto: Avoid explicit handling of GMimeCryptoContext in gmime 3 Daniel Kahn Gillmor
2017-07-15 23:01               ` [PATCH v2 4/4] crypto: clean up unused definitions in gmime 3.0 Daniel Kahn Gillmor
2017-07-16 10:53               ` [PATCH v2 1/4] cli/crypto: treat failure to create a crypto context as fatal David Bremner
2017-07-15 18:57         ` [PATCH 4/4] crypto: clean up unused definitions in gmime 3.0 David Bremner
2017-07-14 13:19     ` [PATCH 1/3] config: deprecate/drop crypto.gpg_path under gmime 2.6/3.0 Daniel Kahn Gillmor

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://notmuchmail.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170603174754.16911-20-david@tethera.net \
    --to=david@tethera.net \
    --cc=notmuch@freelists.org \
    --cc=notmuch@notmuchmail.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).