#include <xapian.h>
-const char *NOTMUCH_QUERY_ALL = "";
-
struct _notmuch_query {
notmuch_database_t *notmuch;
const char *query_string;
query->notmuch = notmuch;
- /* Special-case NOTMUCH_QUERY_ALL so we see it and not a copy. */
- if (query_string == NOTMUCH_QUERY_ALL)
- query->query_string = query_string;
- else
- query->query_string = talloc_strdup (query, query_string);
+ query->query_string = talloc_strdup (query, query_string);
query->sort = NOTMUCH_SORT_DATE_OLDEST_FIRST;
query->sort = sort;
}
+/* We end up having to call the destructors explicitly because we had
+ * to use "placement new" in order to initialize C++ objects within a
+ * block that we allocated with talloc. So C++ is making talloc
+ * slightly less simple to use, (we wouldn't need
+ * talloc_set_destructor at all otherwise).
+ */
static int
-_notmuch_results_destroy (notmuch_results_t *results)
+_notmuch_results_destructor (notmuch_results_t *results)
{
results->iterator.~PostingIterator ();
results->iterator_end.~PostingIterator ();
return NULL;
try {
- if (query->query_string != NOTMUCH_QUERY_ALL) {
+ if (strlen (query->query_string)) {
fprintf (stderr, "Error: Arbitrary search strings are not supported yet. Come back soon!\n");
exit (1);
}
new (&results->iterator) Xapian::PostingIterator ();
new (&results->iterator_end) Xapian::PostingIterator ();
- talloc_set_destructor (results, _notmuch_results_destroy);
+ talloc_set_destructor (results, _notmuch_results_destructor);
results->iterator = query->notmuch->xapian_db->postlist_begin ("");
results->iterator_end = query->notmuch->xapian_db->postlist_end ("");
{
results->iterator++;
}
+
+void
+notmuch_results_destroy (notmuch_results_t *results)
+{
+ talloc_free (results);
+}