X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=mime-node.c;h=e33336bbb32e8ed11cdc58f88369e675652bd250;hp=19744f43eee7e6d0deb2b2bd455ae3f7cafe9995;hb=6682b4e686b7972883626c9b0f941ae4bf02dedb;hpb=b7ac4c05e118047442378f58eeb69d43bd1cbdb1 diff --git a/mime-node.c b/mime-node.c index 19744f43..e33336bb 100644 --- a/mime-node.c +++ b/mime-node.c @@ -21,13 +21,16 @@ * Austin Clements */ +#include +#include +#include + #include "notmuch-client.h" /* Context that gets inherited from the root node. */ typedef struct mime_node_context { /* Per-message resources. These are allocated internally and must * be destroyed. */ - FILE *file; GMimeStream *stream; GMimeParser *parser; GMimeMessage *mime_message; @@ -48,9 +51,6 @@ _mime_node_context_free (mime_node_context_t *res) if (res->stream) g_object_unref (res->stream); - if (res->file) - fclose (res->file); - return 0; } @@ -62,6 +62,7 @@ mime_node_open (const void *ctx, notmuch_message_t *message, mime_node_context_t *mctx; mime_node_t *root; notmuch_status_t status; + int fd; root = talloc_zero (ctx, mime_node_t); if (root == NULL) { @@ -80,8 +81,8 @@ mime_node_open (const void *ctx, notmuch_message_t *message, talloc_set_destructor (mctx, _mime_node_context_free); /* Fast path */ - mctx->file = fopen (filename, "r"); - if (! mctx->file) { + fd = open (filename, O_RDONLY); + if (fd == -1) { /* Slow path - for some reason the first file in the list is * not available anymore. This is clearly a problem in the * database, but we are not going to let this problem be a @@ -92,13 +93,13 @@ mime_node_open (const void *ctx, notmuch_message_t *message, notmuch_filenames_move_to_next (filenames)) { filename = notmuch_filenames_get (filenames); - mctx->file = fopen (filename, "r"); - if (mctx->file) + fd = open (filename, O_RDONLY); + if (fd != -1) break; } talloc_free (filenames); - if (! mctx->file) { + if (fd == -1) { /* Give up */ fprintf (stderr, "Error opening %s: %s\n", filename, strerror (errno)); status = NOTMUCH_STATUS_FILE_ERROR; @@ -106,13 +107,12 @@ mime_node_open (const void *ctx, notmuch_message_t *message, } } - mctx->stream = g_mime_stream_file_new (mctx->file); + mctx->stream = g_mime_stream_gzfile_new (fd); if (!mctx->stream) { fprintf (stderr, "Out of memory.\n"); status = NOTMUCH_STATUS_OUT_OF_MEMORY; goto DONE; } - g_mime_stream_file_set_owner (GMIME_STREAM_FILE (mctx->stream), false); mctx->parser = g_mime_parser_new_with_stream (mctx->stream); if (!mctx->parser) { @@ -121,7 +121,7 @@ mime_node_open (const void *ctx, notmuch_message_t *message, goto DONE; } - mctx->mime_message = g_mime_parser_construct_message (mctx->parser); + mctx->mime_message = g_mime_parser_construct_message (mctx->parser, NULL); if (!mctx->mime_message) { fprintf (stderr, "Failed to parse %s\n", filename); status = NOTMUCH_STATUS_FILE_ERROR; @@ -176,7 +176,7 @@ node_verify (mime_node_t *node, GMimeObject *part) node->verify_attempted = true; node->sig_list = g_mime_multipart_signed_verify - (GMIME_MULTIPART_SIGNED (part), cryptoctx, &err); + (GMIME_MULTIPART_SIGNED (part), GMIME_ENCRYPT_NONE, &err); if (node->sig_list) set_signature_list_destructor (node);