* to call it if the query is about to be destroyed).
*
* If a Xapian exception occurs this function will return NULL.
+ * For better error reporting, use the _st variant.
*/
notmuch_threads_t *
notmuch_query_search_threads (notmuch_query_t *query);
+/**
+ * Like notmuch_query_search_threads, but with a status return.
+ */
+notmuch_status_t
+notmuch_query_search_threads_st (notmuch_query_t *query,
+ notmuch_threads_t **out);
+
/**
* Execute a query for messages, returning a notmuch_messages_t object
* which can be used to iterate over the results. The returned
* reason to call it if the query is about to be destroyed).
*
* If a Xapian exception occurs this function will return NULL.
+ * For better error reporting, use the _st variant.
*/
notmuch_messages_t *
notmuch_query_search_messages (notmuch_query_t *query);
+/**
+ * Like notmuch_query_search_messages, but with a status return.
+ */
+notmuch_status_t
+notmuch_query_search_messages_st (notmuch_query_t *query,
+ notmuch_messages_t **out);
+
/**
* Destroy a notmuch_query_t along with any associated resources.
*
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;
messages = talloc (query, notmuch_mset_messages_t);
if (unlikely (messages == NULL))
- return NULL;
+ return NOTMUCH_STATUS_OUT_OF_MEMORY;
try {
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",
fprintf (stderr, "Query string was: %s\n", query->query_string);
notmuch->exception_reported = TRUE;
talloc_free (messages);
- return NULL;
+ return NOTMUCH_STATUS_XAPIAN_EXCEPTION;
}
}
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));
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