X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=lib%2Fquery.cc;h=9279915d21ccfbccb9ad9929a4089695a9f55928;hp=60ff8bd9a39e1707e12a4e96cff99890b00d669b;hb=7a0fc103678ea1b1da2df561d222c08db04c5af2;hpb=a9e0786f72bd01186b58b739986e7ac0680ff7c0 diff --git a/lib/query.cc b/lib/query.cc index 60ff8bd9..9279915d 100644 --- a/lib/query.cc +++ b/lib/query.cc @@ -173,6 +173,19 @@ _notmuch_exclude_tags (notmuch_query_t *query, Xapian::Query xquery) notmuch_messages_t * notmuch_query_search_messages (notmuch_query_t *query) +{ + notmuch_status_t status; + notmuch_messages_t *messages; + status = notmuch_query_search_messages_st (query, &messages); + if (status) + return NULL; + else + return messages; +} + +notmuch_status_t +notmuch_query_search_messages_st (notmuch_query_t *query, + notmuch_messages_t **out) { notmuch_database_t *notmuch = query->notmuch; const char *query_string = query->query_string; @@ -180,7 +193,7 @@ notmuch_query_search_messages (notmuch_query_t *query) messages = talloc (query, notmuch_mset_messages_t); if (unlikely (messages == NULL)) - return NULL; + return NOTMUCH_STATUS_OUT_OF_MEMORY; try { @@ -279,7 +292,8 @@ notmuch_query_search_messages (notmuch_query_t *query) messages->iterator = mset.begin (); messages->iterator_end = mset.end (); - return &messages->base; + *out = &messages->base; + return NOTMUCH_STATUS_SUCCESS; } catch (const Xapian::Error &error) { fprintf (stderr, "A Xapian exception occurred performing query: %s\n", @@ -287,7 +301,7 @@ notmuch_query_search_messages (notmuch_query_t *query) fprintf (stderr, "Query string was: %s\n", query->query_string); notmuch->exception_reported = TRUE; talloc_free (messages); - return NULL; + return NOTMUCH_STATUS_XAPIAN_EXCEPTION; } } @@ -412,24 +426,39 @@ _notmuch_threads_destructor (notmuch_threads_t *threads) return 0; } + notmuch_threads_t * notmuch_query_search_threads (notmuch_query_t *query) +{ + notmuch_status_t status; + notmuch_threads_t *threads; + status = notmuch_query_search_threads_st (query, &threads); + if (status) + return NULL; + else + return threads; +} + +notmuch_status_t +notmuch_query_search_threads_st (notmuch_query_t *query, + notmuch_threads_t **out) { notmuch_threads_t *threads; notmuch_messages_t *messages; + notmuch_status_t status; threads = talloc (query, notmuch_threads_t); if (threads == NULL) - return NULL; + return NOTMUCH_STATUS_OUT_OF_MEMORY; threads->doc_ids = NULL; talloc_set_destructor (threads, _notmuch_threads_destructor); threads->query = query; - messages = notmuch_query_search_messages (query); - if (messages == NULL) { - talloc_free (threads); - return NULL; + status = notmuch_query_search_messages_st (query, &messages); + if (status) { + talloc_free (threads); + return status; } threads->doc_ids = g_array_new (FALSE, FALSE, sizeof (unsigned int)); @@ -445,10 +474,11 @@ notmuch_query_search_threads (notmuch_query_t *query) if (! _notmuch_doc_id_set_init (threads, &threads->match_set, threads->doc_ids)) { talloc_free (threads); - return NULL; + return NOTMUCH_STATUS_OUT_OF_MEMORY; } - return threads; + *out = threads; + return NOTMUCH_STATUS_SUCCESS; } void