X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=message-file.c;h=75caba6d8b055e5c3b57b2d72d1926381ff11fc8;hp=e8e2843e225be9b3f45a0dcd823d72446e6635a8;hb=08d84ceeabce09d9fa870f64907acb8e576ebdef;hpb=bf78a89196b251c2465f6cefa8198f22c87ff23d diff --git a/message-file.c b/message-file.c index e8e2843e..75caba6d 100644 --- a/message-file.c +++ b/message-file.c @@ -22,6 +22,8 @@ #include "notmuch-private.h" +#include + #include /* GHashTable */ typedef struct { @@ -213,9 +215,15 @@ notmuch_message_file_get_header (notmuch_message_file_t *message, const char *header_desired) { int contains; - char *header, *value; + char *header, *decoded_value; const char *s, *colon; int match; + static int initialized = 0; + + if (! initialized) { + g_mime_init (0); + initialized = 1; + } message->parsing_started = 1; @@ -224,10 +232,10 @@ notmuch_message_file_get_header (notmuch_message_file_t *message, else contains = g_hash_table_lookup_extended (message->headers, header_desired, NULL, - (gpointer *) &value); + (gpointer *) &decoded_value); - if (contains && value) - return value; + if (contains && decoded_value) + return decoded_value; if (message->parsing_finished) return NULL; @@ -309,12 +317,12 @@ notmuch_message_file_get_header (notmuch_message_file_t *message, else match = (strcasecmp (header, header_desired) == 0); - value = xstrdup (message->value.str); + decoded_value = g_mime_utils_header_decode_text (message->value.str); - g_hash_table_insert (message->headers, header, value); + g_hash_table_insert (message->headers, header, decoded_value); if (match) - return value; + return decoded_value; } if (message->line) @@ -342,40 +350,3 @@ notmuch_message_file_get_header (notmuch_message_file_t *message, return NULL; } - -static size_t -_notmuch_message_file_get_header_size (notmuch_message_file_t *message) -{ - if (! message->parsing_finished) - notmuch_message_file_get_header (message, NULL); - - if (! message->parsing_finished) - INTERNAL_ERROR ("Parsing for NULL header did not force parsing to finish.\n"); - - return message->header_size; -} - -const char * -notmuch_message_file_get_all_headers (notmuch_message_file_t *message) -{ - char *headers = NULL; - size_t header_size = _notmuch_message_file_get_header_size (message); - - if (header_size == 0) - return ""; - - headers = talloc_size (message, header_size + 1); - if (unlikely (headers == NULL)) - return NULL; - - rewind (message->file); - if (fread (headers, 1, header_size, message->file) != header_size) { - fprintf (stderr, "Error: Short read occurred trying to read message header.\n"); - talloc_free (headers); - return NULL; - } - - headers[header_size] = '\0'; - - return headers; -}