notmuch search: Fix to handle failure of notmuch_query_search_threads.

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.
This commit is contained in:
Carl Worth 2010-10-22 17:57:02 -07:00
parent f6cb896bc4
commit 14a2227f77

View file

@ -122,7 +122,7 @@ format_thread_json (const void *ctx,
talloc_free (ctx_quote); talloc_free (ctx_quote);
} }
static void static int
do_search_threads (const void *ctx, do_search_threads (const void *ctx,
const search_format_t *format, const search_format_t *format,
notmuch_query_t *query, notmuch_query_t *query,
@ -136,7 +136,11 @@ do_search_threads (const void *ctx,
fputs (format->results_start, stdout); 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_valid (threads);
notmuch_threads_move_to_next (threads)) notmuch_threads_move_to_next (threads))
{ {
@ -183,6 +187,8 @@ do_search_threads (const void *ctx,
} }
fputs (format->results_end, stdout); fputs (format->results_end, stdout);
return 0;
} }
int int
@ -195,7 +201,7 @@ notmuch_search_command (void *ctx, int argc, char *argv[])
char *opt; char *opt;
notmuch_sort_t sort = NOTMUCH_SORT_NEWEST_FIRST; notmuch_sort_t sort = NOTMUCH_SORT_NEWEST_FIRST;
const search_format_t *format = &format_text; const search_format_t *format = &format_text;
int i; int i, ret;
for (i = 0; i < argc && argv[i][0] == '-'; i++) { for (i = 0; i < argc && argv[i][0] == '-'; i++) {
if (strcmp (argv[i], "--") == 0) { if (strcmp (argv[i], "--") == 0) {
@ -258,10 +264,10 @@ notmuch_search_command (void *ctx, int argc, char *argv[])
notmuch_query_set_sort (query, sort); 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_query_destroy (query);
notmuch_database_close (notmuch); notmuch_database_close (notmuch);
return 0; return ret;
} }