]> git.notmuchmail.org Git - notmuch/blobdiff - notmuch-count.c
cli/count: simplify and document return value of print_count
[notmuch] / notmuch-count.c
index 66f5e53fba79258064fb9e081fc5790056b8fd93..be3e2365a052ad5c770b7a898630f7e48bab8b85 100644 (file)
@@ -33,17 +33,19 @@ enum {
     EXCLUDE_FALSE,
 };
 
-static unsigned int
+/* Return the number of files matching the query, or -1 for an error */
+static int
 count_files (notmuch_query_t *query)
 {
     notmuch_messages_t *messages;
     notmuch_message_t *message;
     notmuch_filenames_t *filenames;
-    unsigned int count = 0;
+    notmuch_status_t status;
+    int count = 0;
 
-    messages = notmuch_query_search_messages (query);
-    if (messages == NULL)
-       return 0;
+    status = notmuch_query_search_messages_st (query, &messages);
+    if (print_status_query ("notmuch count", query, status))
+       return -1;
 
     for (;
         notmuch_messages_valid (messages);
@@ -65,12 +67,14 @@ count_files (notmuch_query_t *query)
     return count;
 }
 
+/* return 0 on success, -1 on failure */
 static int
 print_count (notmuch_database_t *notmuch, const char *query_str,
             const char **exclude_tags, size_t exclude_tags_length, int output, int print_lastmod)
 {
     notmuch_query_t *query;
     size_t i;
+    int count;
     unsigned long revision;
     const char *uuid;
     int ret = 0;
@@ -78,7 +82,7 @@ print_count (notmuch_database_t *notmuch, const char *query_str,
     query = notmuch_query_create (notmuch, query_str);
     if (query == NULL) {
        fprintf (stderr, "Out of memory\n");
-       return 1;
+       return -1;
     }
 
     for (i = 0; i < exclude_tags_length; i++)
@@ -92,7 +96,13 @@ print_count (notmuch_database_t *notmuch, const char *query_str,
        printf ("%u", notmuch_query_count_threads (query));
        break;
     case OUTPUT_FILES:
-       printf ("%u", count_files (query));
+       count = count_files (query);
+       if (count >= 0) {
+           printf ("%u", count);
+       } else {
+           ret = -1;
+           goto DONE;
+       }
        break;
     }
 
@@ -103,6 +113,7 @@ print_count (notmuch_database_t *notmuch, const char *query_str,
        fputs ("\n", stdout);
     }
 
+  DONE:
     notmuch_query_destroy (query);
 
     return ret;
@@ -117,7 +128,7 @@ count_file (notmuch_database_t *notmuch, FILE *input, const char **exclude_tags,
     size_t line_size;
     int ret = 0;
 
-    while (!ret && (line_len = getline (&line, &line_size, input)) != -1) {
+    while (! ret && (line_len = getline (&line, &line_size, input)) != -1) {
        chomp_newline (line);
        ret = print_count (notmuch, line, exclude_tags, exclude_tags_length,
                           output, print_lastmod);
@@ -189,7 +200,7 @@ notmuch_count_command (notmuch_config_t *config, int argc, char *argv[])
 
     notmuch_exit_if_unmatched_db_uuid (notmuch);
 
-    query_str = query_string_from_args (config, argc-opt_index, argv+opt_index);
+    query_str = query_string_from_args (config, argc - opt_index, argv + opt_index);
     if (query_str == NULL) {
        fprintf (stderr, "Out of memory.\n");
        return EXIT_FAILURE;