X-Git-Url: https://git.notmuchmail.org/git?a=blobdiff_plain;f=lib%2Fmessage-file.c;h=d7acf0d5b4e2739eac56756c1ca35f30eeacf424;hb=4ce7591610444a1c5ef6f56b57af8e180437fa62;hp=db18b1630bfd0468fc967c684b33cb186b925a34;hpb=6a833a6e83865f6999707cc30768d07e1351c2cb;p=notmuch diff --git a/lib/message-file.c b/lib/message-file.c index db18b163..d7acf0d5 100644 --- a/lib/message-file.c +++ b/lib/message-file.c @@ -201,6 +201,38 @@ _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; +} + +#if (GMIME_MAJOR_VERSION < 3) static char * _notmuch_message_file_get_combined_header (notmuch_message_file_t *message, const char *header) @@ -222,37 +254,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. */ @@ -264,6 +272,39 @@ _notmuch_message_file_get_combined_header (notmuch_message_file_t *message, return combined; } +#else +static char * +_notmuch_message_file_get_combined_header (notmuch_message_file_t *message, + const char *header) +{ + char *combined = NULL; + GMimeHeaderList *headers; + + headers = g_mime_object_get_header_list (GMIME_OBJECT (message->message)); + if (! headers) + return NULL; + + + for (int i=0; i < g_mime_header_list_get_count (headers); i++) { + const char *value; + GMimeHeader *g_header = g_mime_header_list_get_header_at (headers, i); + + if (strcasecmp (g_mime_header_get_name (g_header), header) != 0) + continue; + + /* GMime retains ownership of value, we hope */ + value = g_mime_header_get_value (g_header); + + combined = _extend_header (combined, value); + } + + /* Return empty string for non-existing headers. */ + if (! combined) + combined = g_strdup (""); + + return combined; +} +#endif const char * _notmuch_message_file_get_header (notmuch_message_file_t *message,