diff options
author | Jani Nikula <jani@nikula.org> | 2014-06-05 08:34:09 +0200 |
---|---|---|
committer | David Bremner <david@tethera.net> | 2014-06-13 22:59:04 -0300 |
commit | 0cc0144875875fe974fe0851b5c2c21d63d9b06d (patch) | |
tree | ec8db15381d68bc24febdaa602053a34bd92110e /lib | |
parent | 2d722bf032bbd4b08b415369e07a3c9e26f2472a (diff) |
lib: resurrect support for single-message mbox files
This is effectively a revert of
commit 6812136bf576d894591606d9e10096719054d1f9
Author: Jani Nikula <jani@nikula.org>
Date: Mon Mar 31 00:21:48 2014 +0300
lib: drop support for single-message mbox files
The intention was to drop support for indexing new single-message mbox
files (and whether that was a good idea in the first place is
arguable). However this inadvertently broke support for reading
headers from previously indexed single-message mbox files, which is
far worse.
Distinguishing between the two cases would require more code than
simply bringing back support for single-message mbox files.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/message-file.c | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/lib/message-file.c b/lib/message-file.c index 67828827..483ba1e9 100644 --- a/lib/message-file.c +++ b/lib/message-file.c @@ -117,7 +117,7 @@ notmuch_message_file_close (notmuch_message_file_t *message) } static notmuch_bool_t -is_mbox (FILE *file) +_is_mbox (FILE *file) { char from_buf[5]; notmuch_bool_t ret = FALSE; @@ -139,13 +139,12 @@ _notmuch_message_file_parse (notmuch_message_file_t *message) GMimeParser *parser; notmuch_status_t status = NOTMUCH_STATUS_SUCCESS; static int initialized = 0; + notmuch_bool_t is_mbox; if (message->message) return NOTMUCH_STATUS_SUCCESS; - /* We no longer support mboxes at all. */ - if (is_mbox (message->file)) - return NOTMUCH_STATUS_FILE_NOT_EMAIL; + is_mbox = _is_mbox (message->file); if (! initialized) { g_mime_init (GMIME_ENABLE_RFC2047_WORKAROUNDS); @@ -163,7 +162,7 @@ _notmuch_message_file_parse (notmuch_message_file_t *message) g_mime_stream_file_set_owner (GMIME_STREAM_FILE (stream), FALSE); parser = g_mime_parser_new_with_stream (stream); - g_mime_parser_set_scan_from (parser, FALSE); + g_mime_parser_set_scan_from (parser, is_mbox); message->message = g_mime_parser_construct_message (parser); if (! message->message) { @@ -171,6 +170,27 @@ _notmuch_message_file_parse (notmuch_message_file_t *message) goto DONE; } + if (is_mbox) { + if (! g_mime_parser_eos (parser)) { + /* This is a multi-message mbox. */ + status = NOTMUCH_STATUS_FILE_NOT_EMAIL; + goto DONE; + } + /* + * For historical reasons, we support single-message mboxes, + * but this behavior is likely to change in the future, so + * warn. + */ + static notmuch_bool_t mbox_warning = FALSE; + if (! mbox_warning) { + mbox_warning = TRUE; + fprintf (stderr, "\ +Warning: %s is an mbox containing a single message,\n\ +likely caused by misconfigured mail delivery. Support for single-message\n\ +mboxes is deprecated and may be removed in the future.\n", message->filename); + } + } + DONE: g_object_unref (stream); g_object_unref (parser); |