]> git.notmuchmail.org Git - notmuch/blobdiff - notmuch-reply.c
cli: export function for illegal tag checking
[notmuch] / notmuch-reply.c
index 22c58ff36776f87ade88dcf8ead0b5d2a97076a9..79cdc83397d3adf26678e6fcccd6e4a3883c49d1 100644 (file)
  */
 
 #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, NULL);
-    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, &notmuch))
-       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, &params, reply_all, sp) != 0)
-       return 1;
+    if (reply_format_func (config, config, query, &params, reply_all, sp) != 0)
+       return EXIT_FAILURE;
 
     notmuch_crypto_cleanup (&params.crypto);
     notmuch_query_destroy (query);
     notmuch_database_destroy (notmuch);
 
-    return ret;
+    return EXIT_SUCCESS;
 }