]> git.notmuchmail.org Git - notmuch/commitdiff
cli: clean up exit status code returned by the cli commands
authorJani Nikula <jani@nikula.org>
Fri, 10 Jan 2014 21:28:53 +0000 (23:28 +0200)
committerDavid Bremner <david@tethera.net>
Sat, 18 Jan 2014 18:45:26 +0000 (14:45 -0400)
Apart from the status codes for format mismatches, the non-zero exit
status codes have been arbitrary. Make the cli consistently return
either EXIT_SUCCESS or EXIT_FAILURE.

13 files changed:
notmuch-compact.c
notmuch-config.c
notmuch-count.c
notmuch-dump.c
notmuch-insert.c
notmuch-new.c
notmuch-reply.c
notmuch-restore.c
notmuch-search.c
notmuch-setup.c
notmuch-show.c
notmuch-tag.c
notmuch.c

index 6c5909386da8e49ea9fd5dfe56c947fcbadafdc1..2fc012a982d7f3b879fc6fe795d01b194b240c31 100644 (file)
@@ -42,7 +42,7 @@ notmuch_compact_command (notmuch_config_t *config, int argc, char *argv[])
 
     opt_index = parse_arguments (argc, argv, options, 1);
     if (opt_index < 0)
-       return 1;
+       return EXIT_FAILURE;
 
     if (! quiet)
        printf ("Compacting database...\n");
@@ -50,7 +50,7 @@ notmuch_compact_command (notmuch_config_t *config, int argc, char *argv[])
                                    quiet ? NULL : status_update_cb, NULL);
     if (ret) {
        fprintf (stderr, "Compaction failed: %s\n", notmuch_status_to_string (ret));
-       return 1;
+       return EXIT_FAILURE;
     }
 
     if (! quiet) {
@@ -60,5 +60,5 @@ notmuch_compact_command (notmuch_config_t *config, int argc, char *argv[])
        printf ("Done.\n");
     }
 
-    return 0;
+    return EXIT_SUCCESS;
 }
index 6845e3c3db5d3af6f5a9d25f39d4eb8060a1e41a..e06142b528bced29a0cda16cfeed1ffecde90020 100644 (file)
@@ -839,34 +839,39 @@ notmuch_config_command_list (notmuch_config_t *config)
 int
 notmuch_config_command (notmuch_config_t *config, int argc, char *argv[])
 {
+    int ret;
+
     argc--; argv++; /* skip subcommand argument */
 
     if (argc < 1) {
        fprintf (stderr, "Error: notmuch config requires at least one argument.\n");
-       return 1;
+       return EXIT_FAILURE;
     }
 
     if (strcmp (argv[0], "get") == 0) {
        if (argc != 2) {
            fprintf (stderr, "Error: notmuch config get requires exactly "
                     "one argument.\n");
-           return 1;
+           return EXIT_FAILURE;
        }
-       return notmuch_config_command_get (config, argv[1]);
+       ret = notmuch_config_command_get (config, argv[1]);
     } else if (strcmp (argv[0], "set") == 0) {
        if (argc < 2) {
            fprintf (stderr, "Error: notmuch config set requires at least "
                     "one argument.\n");
-           return 1;
+           return EXIT_FAILURE;
        }
-       return notmuch_config_command_set (config, argv[1], argc - 2, argv + 2);
+       ret = notmuch_config_command_set (config, argv[1], argc - 2, argv + 2);
     } else if (strcmp (argv[0], "list") == 0) {
-       return notmuch_config_command_list (config);
+       ret = notmuch_config_command_list (config);
+    } else {
+       fprintf (stderr, "Unrecognized argument for notmuch config: %s\n",
+                argv[0]);
+       return EXIT_FAILURE;
     }
 
-    fprintf (stderr, "Unrecognized argument for notmuch config: %s\n",
-            argv[0]);
-    return 1;
+    return ret ? EXIT_FAILURE : EXIT_SUCCESS;
+
 }
 
 notmuch_bool_t
index 01e4e3012b8a07c799418c1c256107bb4e1cffa4..6058f7c9510d6bdbc15a22c4f24a630eadc50666 100644 (file)
@@ -150,10 +150,8 @@ notmuch_count_command (notmuch_config_t *config, int argc, char *argv[])
     };
 
     opt_index = parse_arguments (argc, argv, options, 1);
-
-    if (opt_index < 0) {
-       return 1;
-    }
+    if (opt_index < 0)
+       return EXIT_FAILURE;
 
     if (input_file_name) {
        batch = TRUE;
@@ -161,23 +159,23 @@ notmuch_count_command (notmuch_config_t *config, int argc, char *argv[])
        if (input == NULL) {
            fprintf (stderr, "Error opening %s for reading: %s\n",
                     input_file_name, strerror (errno));
-           return 1;
+           return EXIT_FAILURE;
        }
     }
 
     if (batch && opt_index != argc) {
        fprintf (stderr, "--batch and query string are not compatible\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_str = query_string_from_args (config, argc-opt_index, argv+opt_index);
     if (query_str == NULL) {
        fprintf (stderr, "Out of memory.\n");
-       return 1;
+       return EXIT_FAILURE;
     }
 
     if (exclude == EXCLUDE_TRUE) {
@@ -197,5 +195,5 @@ notmuch_count_command (notmuch_config_t *config, int argc, char *argv[])
     if (input != stdin)
        fclose (input);
 
-    return ret;
+    return ret ? EXIT_FAILURE : EXIT_SUCCESS;
 }
index 2024e30391d541921656285c5f2c1cd02965974c..f8edda76ca011b928e948300e522f7815dc1dbf3 100644 (file)
@@ -35,7 +35,7 @@ notmuch_dump_command (notmuch_config_t *config, int argc, char *argv[])
 
     if (notmuch_database_open (notmuch_config_get_database_path (config),
                               NOTMUCH_DATABASE_MODE_READ_ONLY, &notmuch))
-       return 1;
+       return EXIT_FAILURE;
 
     char *output_file_name = NULL;
     int opt_index;
@@ -52,18 +52,15 @@ notmuch_dump_command (notmuch_config_t *config, 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 (output_file_name) {
        output = fopen (output_file_name, "w");
        if (output == NULL) {
            fprintf (stderr, "Error opening %s for writing: %s\n",
                     output_file_name, strerror (errno));
-           return 1;
+           return EXIT_FAILURE;
        }
     }
 
@@ -72,14 +69,14 @@ notmuch_dump_command (notmuch_config_t *config, int argc, char *argv[])
        query_str = query_string_from_args (notmuch, argc - opt_index, argv + opt_index);
        if (query_str == NULL) {
            fprintf (stderr, "Out of memory.\n");
-           return 1;
+           return EXIT_FAILURE;
        }
     }
 
     query = notmuch_query_create (notmuch, query_str);
     if (query == NULL) {
        fprintf (stderr, "Out of memory\n");
-       return 1;
+       return EXIT_FAILURE;
     }
     /* Don't ask xapian to sort by Message-ID. Xapian optimizes returning the
      * first results quickly at the expense of total time.
@@ -131,7 +128,7 @@ notmuch_dump_command (notmuch_config_t *config, int argc, char *argv[])
                                &buffer, &buffer_size) != HEX_SUCCESS) {
                    fprintf (stderr, "Error: failed to hex-encode tag %s\n",
                             tag_str);
-                   return 1;
+                   return EXIT_FAILURE;
                }
                fprintf (output, "+%s", buffer);
            }
@@ -144,7 +141,7 @@ notmuch_dump_command (notmuch_config_t *config, int argc, char *argv[])
                                   &buffer, &buffer_size)) {
                    fprintf (stderr, "Error quoting message id %s: %s\n",
                             message_id, strerror (errno));
-                   return 1;
+                   return EXIT_FAILURE;
            }
            fprintf (output, " -- %s\n", buffer);
        }
@@ -158,5 +155,5 @@ notmuch_dump_command (notmuch_config_t *config, int argc, char *argv[])
     notmuch_query_destroy (query);
     notmuch_database_destroy (notmuch);
 
-    return 0;
+    return EXIT_SUCCESS;
 }
index 55384e33da391e4af2fc53a0cbe80a54b40c20bd..cd6de88f6891d230bd22048cfa9eee2d94018057 100644 (file)
@@ -418,11 +418,8 @@ notmuch_insert_command (notmuch_config_t *config, 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;
 
     db_path = notmuch_config_get_database_path (config);
     new_tags = notmuch_config_get_new_tags (config, &new_tags_length);
@@ -431,20 +428,20 @@ notmuch_insert_command (notmuch_config_t *config, int argc, char *argv[])
     tag_ops = tag_op_list_create (config);
     if (tag_ops == NULL) {
        fprintf (stderr, "Out of memory.\n");
-       return 1;
+       return EXIT_FAILURE;
     }
     for (i = 0; i < new_tags_length; i++) {
        if (tag_op_list_append (tag_ops, new_tags[i], FALSE))
-           return 1;
+           return EXIT_FAILURE;
     }
 
     if (parse_tag_command_line (config, argc - opt_index, argv + opt_index,
                                &query_string, tag_ops))
-       return 1;
+       return EXIT_FAILURE;
 
     if (*query_string != '\0') {
        fprintf (stderr, "Error: unexpected query string: %s\n", query_string);
-       return 1;
+       return EXIT_FAILURE;
     }
 
     if (folder == NULL) {
@@ -452,17 +449,17 @@ notmuch_insert_command (notmuch_config_t *config, int argc, char *argv[])
     } else {
        if (! check_folder_name (folder)) {
            fprintf (stderr, "Error: bad folder name: %s\n", folder);
-           return 1;
+           return EXIT_FAILURE;
        }
        maildir = talloc_asprintf (config, "%s/%s", db_path, folder);
        if (! maildir) {
            fprintf (stderr, "Out of memory\n");
-           return 1;
+           return EXIT_FAILURE;
        }
        if (create_folder && ! maildir_create_folder (config, maildir)) {
            fprintf (stderr, "Error: creating maildir %s: %s\n",
                     maildir, strerror (errno));
-           return 1;
+           return EXIT_FAILURE;
        }
     }
 
@@ -476,12 +473,12 @@ notmuch_insert_command (notmuch_config_t *config, int argc, char *argv[])
 
     if (notmuch_database_open (notmuch_config_get_database_path (config),
                               NOTMUCH_DATABASE_MODE_READ_WRITE, &notmuch))
-       return 1;
+       return EXIT_FAILURE;
 
     ret = insert_message (config, notmuch, STDIN_FILENO, maildir, tag_ops,
                          synchronize_flags);
 
     notmuch_database_destroy (notmuch);
 
-    return (ret) ? 0 : 1;
+    return ret ? EXIT_SUCCESS : EXIT_FAILURE;
 }
index ba05cb41e10f2d124681acc7399a9428a2de4a5c..6a8b1b22bf067305f7c05c2eac4f1a232424db38 100644 (file)
@@ -898,10 +898,8 @@ notmuch_new_command (notmuch_config_t *config, 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;
 
     add_files_state.new_tags = notmuch_config_get_new_tags (config, &add_files_state.new_tags_length);
     add_files_state.new_ignore = notmuch_config_get_new_ignore (config, &add_files_state.new_ignore_length);
@@ -911,7 +909,7 @@ notmuch_new_command (notmuch_config_t *config, int argc, char *argv[])
     if (!no_hooks) {
        ret = notmuch_run_hook (db_path, "pre-new");
        if (ret)
-           return ret;
+           return EXIT_FAILURE;
     }
 
     dot_notmuch_path = talloc_asprintf (config, "%s/%s", db_path, ".notmuch");
@@ -922,16 +920,16 @@ notmuch_new_command (notmuch_config_t *config, int argc, char *argv[])
        count = 0;
        count_files (db_path, &count, &add_files_state);
        if (interrupted)
-           return 1;
+           return EXIT_FAILURE;
 
        printf ("Found %d total files (that's not much mail).\n", count);
        if (notmuch_database_create (db_path, &notmuch))
-           return 1;
+           return EXIT_FAILURE;
        add_files_state.total_files = count;
     } else {
        if (notmuch_database_open (db_path, NOTMUCH_DATABASE_MODE_READ_WRITE,
                                   &notmuch))
-           return 1;
+           return EXIT_FAILURE;
 
        if (notmuch_database_needs_upgrade (notmuch)) {
            printf ("Welcome to a new version of notmuch! Your database will now be upgraded.\n");
@@ -946,7 +944,7 @@ notmuch_new_command (notmuch_config_t *config, int argc, char *argv[])
     }
 
     if (notmuch == NULL)
-       return 1;
+       return EXIT_FAILURE;
 
     /* Setup our handler for SIGINT. We do this after having
      * potentially done a database upgrade we this interrupt handler
@@ -1072,5 +1070,5 @@ notmuch_new_command (notmuch_config_t *config, int argc, char *argv[])
     if (!no_hooks && !ret && !interrupted)
        ret = notmuch_run_hook (db_path, "post-new");
 
-    return ret || interrupted;
+    return ret || interrupted ? EXIT_FAILURE : EXIT_SUCCESS;
 }
index 9d6f843652e080234a0c07a7df7012526c1a138f..79cdc83397d3adf26678e6fcccd6e4a3883c49d1 100644 (file)
@@ -704,7 +704,7 @@ notmuch_reply_command (notmuch_config_t *config, int argc, char *argv[])
     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,
@@ -739,10 +739,8 @@ notmuch_reply_command (notmuch_config_t *config, 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;
@@ -761,30 +759,30 @@ notmuch_reply_command (notmuch_config_t *config, int argc, char *argv[])
     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 (config, config, query, &params, reply_all, sp) != 0)
-       return 1;
+       return EXIT_FAILURE;
 
     notmuch_crypto_cleanup (&params.crypto);
     notmuch_query_destroy (query);
     notmuch_database_destroy (notmuch);
 
-    return ret;
+    return EXIT_SUCCESS;
 }
index 1419621cf7045af9b61616c3dc4832136e770199..f23ab983a93da0a84020ee460300f4f631225743 100644 (file)
@@ -140,7 +140,7 @@ notmuch_restore_command (notmuch_config_t *config, int argc, char *argv[])
 
     if (notmuch_database_open (notmuch_config_get_database_path (config),
                               NOTMUCH_DATABASE_MODE_READ_WRITE, &notmuch))
-       return 1;
+       return EXIT_FAILURE;
 
     if (notmuch_config_get_maildir_synchronize_flags (config))
        flags |= TAG_FLAG_MAILDIR_SYNC;
@@ -157,11 +157,8 @@ notmuch_restore_command (notmuch_config_t *config, 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 (! accumulate)
        flags |= TAG_FLAG_REMOVE_ALL;
@@ -171,21 +168,19 @@ notmuch_restore_command (notmuch_config_t *config, int argc, char *argv[])
        if (input == NULL) {
            fprintf (stderr, "Error opening %s for reading: %s\n",
                     input_file_name, strerror (errno));
-           return 1;
+           return EXIT_FAILURE;
        }
     }
 
     if (opt_index < argc) {
-       fprintf (stderr,
-                "Unused positional parameter: %s\n",
-                argv[opt_index]);
-       return 1;
+       fprintf (stderr, "Unused positional parameter: %s\n", argv[opt_index]);
+       return EXIT_FAILURE;
     }
 
     tag_ops = tag_op_list_create (config);
     if (tag_ops == NULL) {
        fprintf (stderr, "Out of memory.\n");
-       return 1;
+       return EXIT_FAILURE;
     }
 
     do {
@@ -193,7 +188,7 @@ notmuch_restore_command (notmuch_config_t *config, int argc, char *argv[])
 
        /* empty input file not considered an error */
        if (line_len < 0)
-           return 0;
+           return EXIT_SUCCESS;
 
     } while ((line_len == 0) ||
             (line[0] == '#') ||
@@ -275,5 +270,5 @@ notmuch_restore_command (notmuch_config_t *config, int argc, char *argv[])
     if (input != stdin)
        fclose (input);
 
-    return ret;
+    return ret ? EXIT_FAILURE : EXIT_SUCCESS;
 }
index 7c973b3d6666ac46eca508b1364b4a9b4eb04304..91b5d10596dc987cd8b3bafb18dadb17f57a7384 100644 (file)
@@ -401,10 +401,8 @@ notmuch_search_command (notmuch_config_t *config, int argc, char *argv[])
     };
 
     opt_index = parse_arguments (argc, argv, options, 1);
-
-    if (opt_index < 0) {
-       return 1;
-    }
+    if (opt_index < 0)
+       return EXIT_FAILURE;
 
     switch (format_sel) {
     case NOTMUCH_FORMAT_TEXT:
@@ -413,7 +411,7 @@ notmuch_search_command (notmuch_config_t *config, int argc, char *argv[])
     case NOTMUCH_FORMAT_TEXT0:
        if (output == OUTPUT_SUMMARY) {
            fprintf (stderr, "Error: --format=text0 is not compatible with --output=summary.\n");
-           return 1;
+           return EXIT_FAILURE;
        }
        format = sprinter_text0_create (config, stdout);
        break;
@@ -432,22 +430,22 @@ notmuch_search_command (notmuch_config_t *config, int argc, char *argv[])
 
     if (notmuch_database_open (notmuch_config_get_database_path (config),
                               NOTMUCH_DATABASE_MODE_READ_ONLY, &notmuch))
-       return 1;
+       return EXIT_FAILURE;
 
     query_str = query_string_from_args (notmuch, argc-opt_index, argv+opt_index);
     if (query_str == NULL) {
        fprintf (stderr, "Out of memory.\n");
-       return 1;
+       return EXIT_FAILURE;
     }
     if (*query_str == '\0') {
        fprintf (stderr, "Error: notmuch search requires at least one search term.\n");
-       return 1;
+       return EXIT_FAILURE;
     }
 
     query = notmuch_query_create (notmuch, query_str);
     if (query == NULL) {
        fprintf (stderr, "Out of memory\n");
-       return 1;
+       return EXIT_FAILURE;
     }
 
     notmuch_query_set_sort (query, sort);
@@ -491,5 +489,5 @@ notmuch_search_command (notmuch_config_t *config, int argc, char *argv[])
 
     talloc_free (format);
 
-    return ret;
+    return ret ? EXIT_FAILURE : EXIT_SUCCESS;
 }
index 475248b1f9735b2e10f00f013deffa0baac85e7a..36a6171a695b2bde194eab0dab3a577c91e265fe 100644 (file)
@@ -140,7 +140,7 @@ notmuch_setup_command (notmuch_config_t *config,
        fflush (stdout);                                        \
        if (getline (&response, &response_size, stdin) < 0) {   \
            printf ("Exiting.\n");                              \
-           exit (1);                                           \
+           exit (EXIT_FAILURE);                                \
        }                                                       \
        chomp_newline (response);                               \
     } while (0)
@@ -223,12 +223,11 @@ notmuch_setup_command (notmuch_config_t *config,
        g_ptr_array_free (tags, TRUE);
     }
 
+    if (notmuch_config_save (config))
+       return EXIT_FAILURE;
 
-    if (! notmuch_config_save (config)) {
-       if (notmuch_config_is_new (config))
-         welcome_message_post_setup ();
-       return 0;
-    } else {
-       return 1;
-    }
+    if (notmuch_config_is_new (config))
+       welcome_message_post_setup ();
+
+    return EXIT_SUCCESS;
 }
index c07f8871aefe4eab1313ea795d7476cb854d7e04..528694be91932aa5b83c77933bfe48ffa8aebde4 100644 (file)
@@ -1113,10 +1113,8 @@ notmuch_show_command (notmuch_config_t *config, 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;
 
     /* decryption implies verification */
     if (params.crypto.decrypt)
@@ -1143,7 +1141,7 @@ notmuch_show_command (notmuch_config_t *config, int argc, char *argv[])
     case NOTMUCH_FORMAT_MBOX:
        if (params.part > 0) {
            fprintf (stderr, "Error: specifying parts is incompatible with mbox output format.\n");
-           return 1;
+           return EXIT_FAILURE;
        }
 
        format = &format_mbox;
@@ -1193,22 +1191,22 @@ notmuch_show_command (notmuch_config_t *config, int argc, char *argv[])
     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 show 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;
     }
 
     /* Create structure printer. */
@@ -1242,5 +1240,5 @@ notmuch_show_command (notmuch_config_t *config, int argc, char *argv[])
     notmuch_query_destroy (query);
     notmuch_database_destroy (notmuch);
 
-    return ret;
+    return ret ? EXIT_FAILURE : EXIT_SUCCESS;
 }
index 3b09df995ec58005b37db4269b428e9c996e03d1..5b2f1e48d6a7ce7d19bae37f9838ad040cbf2642 100644 (file)
@@ -193,7 +193,7 @@ notmuch_tag_command (notmuch_config_t *config, int argc, char *argv[])
     FILE *input = stdin;
     char *input_file_name = NULL;
     int opt_index;
-    int ret = 0;
+    int ret;
 
     /* Setup our handler for SIGINT */
     memset (&action, 0, sizeof (struct sigaction));
@@ -211,7 +211,7 @@ notmuch_tag_command (notmuch_config_t *config, int argc, char *argv[])
 
     opt_index = parse_arguments (argc, argv, options, 1);
     if (opt_index < 0)
-       return 1;
+       return EXIT_FAILURE;
 
     if (input_file_name) {
        batch = TRUE;
@@ -219,44 +219,44 @@ notmuch_tag_command (notmuch_config_t *config, int argc, char *argv[])
        if (input == NULL) {
            fprintf (stderr, "Error opening %s for reading: %s\n",
                     input_file_name, strerror (errno));
-           return 1;
+           return EXIT_FAILURE;
        }
     }
 
     if (batch) {
        if (opt_index != argc) {
            fprintf (stderr, "Can't specify both cmdline and stdin!\n");
-           return 1;
+           return EXIT_FAILURE;
        }
        if (remove_all) {
            fprintf (stderr, "Can't specify both --remove-all and --batch\n");
-           return 1;
+           return EXIT_FAILURE;
        }
     } else {
        tag_ops = tag_op_list_create (config);
        if (tag_ops == NULL) {
            fprintf (stderr, "Out of memory.\n");
-           return 1;
+           return EXIT_FAILURE;
        }
 
        if (parse_tag_command_line (config, argc - opt_index, argv + opt_index,
                                    &query_string, tag_ops))
-           return 1;
+           return EXIT_FAILURE;
 
        if (tag_op_list_size (tag_ops) == 0 && ! remove_all) {
            fprintf (stderr, "Error: 'notmuch tag' requires at least one tag to add or remove.\n");
-           return 1;
+           return EXIT_FAILURE;
        }
 
        if (*query_string == '\0') {
            fprintf (stderr, "Error: notmuch tag 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_WRITE, &notmuch))
-       return 1;
+       return EXIT_FAILURE;
 
     if (notmuch_config_get_maildir_synchronize_flags (config))
        tag_flags |= TAG_FLAG_MAILDIR_SYNC;
@@ -274,5 +274,5 @@ notmuch_tag_command (notmuch_config_t *config, int argc, char *argv[])
     if (input != stdin)
        fclose (input);
 
-    return ret || interrupted;
+    return ret || interrupted ? EXIT_FAILURE : EXIT_SUCCESS;
 }
index 54f46c6828cc13a72d6dec17cc264e50b4e9c231..2d7f33d3d8d69c0c9418f57c428bd78c0b7f27ec 100644 (file)
--- a/notmuch.c
+++ b/notmuch.c
 
 #include "notmuch-client.h"
 
+/*
+ * Notmuch subcommand hook.
+ *
+ * The return value will be used as notmuch exit status code,
+ * preferrably EXIT_SUCCESS or EXIT_FAILURE.
+ */
 typedef int (*command_function_t) (notmuch_config_t *config, int argc, char *argv[]);
 
 typedef struct command {
@@ -156,7 +162,7 @@ notmuch_help_command (notmuch_config_t *config, int argc, char *argv[])
     if (argc == 0) {
        printf ("The notmuch mail system.\n\n");
        usage (stdout);
-       return 0;
+       return EXIT_SUCCESS;
     }
 
     if (strcmp (argv[0], "help") == 0) {
@@ -165,7 +171,7 @@ notmuch_help_command (notmuch_config_t *config, int argc, char *argv[])
                "\tof difficulties check that MANPATH includes the pages\n"
                "\tinstalled by notmuch.\n\n"
                "\tTry \"notmuch help\" for a list of topics.\n");
-       return 0;
+       return EXIT_SUCCESS;
     }
 
     command = find_command (argv[0]);
@@ -183,7 +189,7 @@ notmuch_help_command (notmuch_config_t *config, int argc, char *argv[])
     fprintf (stderr,
             "\nSorry, %s is not a known command. There's not much I can do to help.\n\n",
             argv[0]);
-    return 1;
+    return EXIT_FAILURE;
 }
 
 /* Handle the case of "notmuch" being invoked with no command
@@ -211,7 +217,7 @@ notmuch_command (notmuch_config_t *config,
        if (errno != ENOENT) {
            fprintf (stderr, "Error looking for notmuch database at %s: %s\n",
                     db_path, strerror (errno));
-           return 1;
+           return EXIT_FAILURE;
        }
        printf ("Notmuch is configured, but there's not yet a database at\n\n\t%s\n\n",
                db_path);
@@ -219,7 +225,7 @@ notmuch_command (notmuch_config_t *config,
                "Note that the first run of \"notmuch new\" can take a very long time\n"
                "and that the resulting database will use roughly the same amount of\n"
                "storage space as the email being indexed.\n\n");
-       return 0;
+       return EXIT_SUCCESS;
     }
 
     printf ("Notmuch is configured and appears to have a database. Excellent!\n\n"
@@ -239,7 +245,7 @@ notmuch_command (notmuch_config_t *config,
            notmuch_config_get_user_name (config),
            notmuch_config_get_user_primary_email (config));
 
-    return 0;
+    return EXIT_SUCCESS;
 }
 
 int
@@ -253,7 +259,7 @@ main (int argc, char *argv[])
     notmuch_config_t *config;
     notmuch_bool_t print_help=FALSE, print_version=FALSE;
     int opt_index;
-    int ret = 0;
+    int ret;
 
     notmuch_opt_desc_t options[] = {
        { NOTMUCH_OPT_BOOLEAN, &print_help, "help", 'h', 0 },
@@ -276,16 +282,19 @@ main (int argc, char *argv[])
 
     opt_index = parse_arguments (argc, argv, options, 1);
     if (opt_index < 0) {
-       /* diagnostics already printed */
-       return 1;
+       ret = EXIT_FAILURE;
+       goto DONE;
     }
 
-    if (print_help)
-       return notmuch_help_command (NULL, argc - 1, &argv[1]);
+    if (print_help) {
+       ret = notmuch_help_command (NULL, argc - 1, &argv[1]);
+       goto DONE;
+    }
 
     if (print_version) {
        printf ("notmuch " STRINGIFY(NOTMUCH_VERSION) "\n");
-       return 0;
+       ret = EXIT_SUCCESS;
+       goto DONE;
     }
 
     if (opt_index < argc)
@@ -295,12 +304,15 @@ main (int argc, char *argv[])
     if (!command) {
        fprintf (stderr, "Error: Unknown command '%s' (see \"notmuch help\")\n",
                 command_name);
-       return 1;
+       ret = EXIT_FAILURE;
+       goto DONE;
     }
 
     config = notmuch_config_open (local, config_file_name, command->create_config);
-    if (!config)
-       return 1;
+    if (!config) {
+       ret = EXIT_FAILURE;
+       goto DONE;
+    }
 
     ret = (command->function)(config, argc - opt_index, argv + opt_index);
 
@@ -322,6 +334,7 @@ main (int argc, char *argv[])
        }
     }
 
+  DONE:
     talloc_free (local);
 
     return ret;