X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=notmuch-reply.c;h=79cdc83397d3adf26678e6fcccd6e4a3883c49d1;hp=9da42b933c10ccfb9ceba8750901a6749e8d5f47;hb=07dd9d53cb7d92dc42ef697edb65e4c491b65928;hpb=e76f6517de020783d828be59f461f1d4f465c4b4 diff --git a/notmuch-reply.c b/notmuch-reply.c index 9da42b93..79cdc833 100644 --- a/notmuch-reply.c +++ b/notmuch-reply.c @@ -21,24 +21,18 @@ */ #include "notmuch-client.h" -#include "gmime-filter-headers.h" #include "sprinter.h" static void show_reply_headers (GMimeMessage *message) { - GMimeStream *stream_stdout = NULL, *stream_filter = NULL; + GMimeStream *stream_stdout = NULL; stream_stdout = g_mime_stream_file_new (stdout); if (stream_stdout) { g_mime_stream_file_set_owner (GMIME_STREAM_FILE (stream_stdout), FALSE); - stream_filter = g_mime_stream_filter_new(stream_stdout); - if (stream_filter) { - g_mime_stream_filter_add(GMIME_STREAM_FILTER(stream_filter), - g_mime_filter_headers_new()); - g_mime_object_write_to_stream(GMIME_OBJECT(message), stream_filter); - g_object_unref(stream_filter); - } + /* Output RFC 2822 formatted (and RFC 2047 encoded) headers. */ + g_mime_object_write_to_stream (GMIME_OBJECT(message), stream_stdout); g_object_unref(stream_stdout); } } @@ -533,9 +527,12 @@ create_reply_message(void *ctx, "In-Reply-To", in_reply_to); orig_references = notmuch_message_get_header (message, "references"); + if (!orig_references) + /* Treat errors like missing References headers. */ + orig_references = ""; references = talloc_asprintf (ctx, "%s%s%s", - orig_references ? orig_references : "", - orig_references ? " " : "", + *orig_references ? orig_references : "", + *orig_references ? " " : "", in_reply_to); g_mime_object_set_header (GMIME_OBJECT (reply), "References", references); @@ -624,7 +621,7 @@ notmuch_reply_format_sprinter(void *ctx, /* Start the original */ sp->map_key (sp, "original"); - format_part_sprinter (ctx, sp, node, TRUE, TRUE); + format_part_sprinter (ctx, sp, node, TRUE, TRUE, FALSE); /* End */ sp->end (sp); @@ -702,13 +699,12 @@ enum { }; int -notmuch_reply_command (void *ctx, int argc, char *argv[]) +notmuch_reply_command (notmuch_config_t *config, int argc, char *argv[]) { - notmuch_config_t *config; notmuch_database_t *notmuch; notmuch_query_t *query; char *query_string; - int opt_index, ret = 0; + int opt_index; int (*reply_format_func) (void *ctx, notmuch_config_t *config, notmuch_query_t *query, @@ -743,56 +739,50 @@ notmuch_reply_command (void *ctx, int argc, char *argv[]) }; opt_index = parse_arguments (argc, argv, options, 1); - if (opt_index < 0) { - /* diagnostics already printed */ - return 1; - } + if (opt_index < 0) + return EXIT_FAILURE; if (format == FORMAT_HEADERS_ONLY) { reply_format_func = notmuch_reply_format_headers_only; } else if (format == FORMAT_JSON) { reply_format_func = notmuch_reply_format_sprinter; - sp = sprinter_json_create (ctx, stdout); + sp = sprinter_json_create (config, stdout); } else if (format == FORMAT_SEXP) { reply_format_func = notmuch_reply_format_sprinter; - sp = sprinter_sexp_create (ctx, stdout); + sp = sprinter_sexp_create (config, stdout); } else { reply_format_func = notmuch_reply_format_default; } notmuch_exit_if_unsupported_format (); - config = notmuch_config_open (ctx, NULL, FALSE); - if (config == NULL) - return 1; - - query_string = query_string_from_args (ctx, argc-opt_index, argv+opt_index); + query_string = query_string_from_args (config, argc-opt_index, argv+opt_index); if (query_string == NULL) { fprintf (stderr, "Out of memory\n"); - return 1; + return EXIT_FAILURE; } if (*query_string == '\0') { fprintf (stderr, "Error: notmuch reply requires at least one search term.\n"); - return 1; + return EXIT_FAILURE; } if (notmuch_database_open (notmuch_config_get_database_path (config), NOTMUCH_DATABASE_MODE_READ_ONLY, ¬much)) - return 1; + return EXIT_FAILURE; query = notmuch_query_create (notmuch, query_string); if (query == NULL) { fprintf (stderr, "Out of memory\n"); - return 1; + return EXIT_FAILURE; } - if (reply_format_func (ctx, config, query, ¶ms, reply_all, sp) != 0) - return 1; + if (reply_format_func (config, config, query, ¶ms, reply_all, sp) != 0) + return EXIT_FAILURE; notmuch_crypto_cleanup (¶ms.crypto); notmuch_query_destroy (query); notmuch_database_destroy (notmuch); - return ret; + return EXIT_SUCCESS; }