X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=mime-node.c;h=66ff744671fb3def8cae892fbe4e755f5a58f09d;hb=2c08beb2546156940e30526fc6759f4ee74b4fed;hp=cd3db67dfedde9d370f8cf7d78bf6a2bcef4698c;hpb=e9b870b6923afe767a7c9938be24f5390102031a;p=notmuch diff --git a/mime-node.c b/mime-node.c index cd3db67d..66ff7446 100644 --- a/mime-node.c +++ b/mime-node.c @@ -21,16 +21,20 @@ * 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; + _notmuch_message_crypto_t *msg_crypto; /* Context provided by the caller. */ _notmuch_crypto_t *crypto; @@ -48,12 +52,15 @@ _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; } +const _notmuch_message_crypto_t* +mime_node_get_message_crypto_status (mime_node_t *node) +{ + return node->ctx->msg_crypto; +} + notmuch_status_t mime_node_open (const void *ctx, notmuch_message_t *message, _notmuch_crypto_t *crypto, mime_node_t **root_out) @@ -62,6 +69,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 +88,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 +100,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 +114,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) {