notmuch search: Fix to handle failure of notmuch_query_search_threads.
authorCarl Worth <cworth@cworth.org>
Sat, 23 Oct 2010 00:57:02 +0000 (17:57 -0700)
committerCarl Worth <cworth@cworth.org>
Sat, 23 Oct 2010 01:03:39 +0000 (18:03 -0700)
Now that notmuch_query_search_threads can return NULL, (for example,
due to a Xapian exception), we need to handle that case (rather than
just segfault). It's simple enough to just return a non-zero exit
code.

notmuch-search.c

index 8a1cdca3f1dcce5feea71a580c250e4bfabe9084..704aa43b654ec7fa10aab5ac795a4d079a19d48f 100644 (file)
@@ -122,7 +122,7 @@ format_thread_json (const void *ctx,
     talloc_free (ctx_quote);
 }
 
-static void
+static int
 do_search_threads (const void *ctx,
                   const search_format_t *format,
                   notmuch_query_t *query,
@@ -136,7 +136,11 @@ do_search_threads (const void *ctx,
 
     fputs (format->results_start, stdout);
 
-    for (threads = notmuch_query_search_threads (query);
+    threads = notmuch_query_search_threads (query);
+    if (threads == NULL)
+       return 1;
+
+    for (;
         notmuch_threads_valid (threads);
         notmuch_threads_move_to_next (threads))
     {
@@ -183,6 +187,8 @@ do_search_threads (const void *ctx,
     }
 
     fputs (format->results_end, stdout);
+
+    return 0;
 }
 
 int
@@ -195,7 +201,7 @@ notmuch_search_command (void *ctx, int argc, char *argv[])
     char *opt;
     notmuch_sort_t sort = NOTMUCH_SORT_NEWEST_FIRST;
     const search_format_t *format = &format_text;
-    int i;
+    int i, ret;
 
     for (i = 0; i < argc && argv[i][0] == '-'; i++) {
        if (strcmp (argv[i], "--") == 0) {
@@ -258,10 +264,10 @@ notmuch_search_command (void *ctx, int argc, char *argv[])
 
     notmuch_query_set_sort (query, sort);
 
-    do_search_threads (ctx, format, query, sort);
+    ret = do_search_threads (ctx, format, query, sort);
 
     notmuch_query_destroy (query);
     notmuch_database_close (notmuch);
 
-    return 0;
+    return ret;
 }