changeset 22198:5eee5c1e815e

lib-storage: Add mail_search_arg_one_deinit()
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Wed, 07 Jun 2017 19:36:19 +0300
parents 962ed90f12a9
children 83955bbf1b3a
files src/lib-storage/mail-search.c src/lib-storage/mail-search.h
diffstat 2 files changed, 33 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/mail-search.c	Wed Jun 14 02:15:34 2017 +0300
+++ b/src/lib-storage/mail-search.c	Wed Jun 07 19:36:19 2017 +0300
@@ -146,36 +146,38 @@
 
 void mail_search_arg_deinit(struct mail_search_arg *arg)
 {
-	for (; arg != NULL; arg = arg->next) {
-		switch (arg->type) {
-		case SEARCH_MODSEQ:
-		case SEARCH_KEYWORDS:
-			if (arg->initialized.keywords == NULL)
-				break;
-			mailbox_keywords_unref(&arg->initialized.keywords);
+	for (; arg != NULL; arg = arg->next)
+		mail_search_arg_one_deinit(arg);
+}
+
+void mail_search_arg_one_deinit(struct mail_search_arg *arg)
+{
+	switch (arg->type) {
+	case SEARCH_MODSEQ:
+	case SEARCH_KEYWORDS:
+		if (arg->initialized.keywords == NULL)
 			break;
-		case SEARCH_MAILBOX_GLOB:
-			if (arg->initialized.mailbox_glob == NULL)
-				break;
-
-			imap_match_deinit(&arg->initialized.mailbox_glob);
+		mailbox_keywords_unref(&arg->initialized.keywords);
+		break;
+	case SEARCH_MAILBOX_GLOB:
+		if (arg->initialized.mailbox_glob == NULL)
 			break;
-		case SEARCH_INTHREAD:
-			i_assert(arg->initialized.search_args->refcount > 0);
-			if (arg->value.search_result != NULL) {
-				mailbox_search_result_free(
-					&arg->value.search_result);
-			}
-			arg->initialized.search_args->refcount--;
-			arg->initialized.search_args->box = NULL;
-			/* fall through */
-		case SEARCH_SUB:
-		case SEARCH_OR:
-			mail_search_arg_deinit(arg->value.subargs);
-			break;
-		default:
-			break;
-		}
+
+		imap_match_deinit(&arg->initialized.mailbox_glob);
+		break;
+	case SEARCH_INTHREAD:
+		i_assert(arg->initialized.search_args->refcount > 0);
+		if (arg->value.search_result != NULL)
+			mailbox_search_result_free(&arg->value.search_result);
+		arg->initialized.search_args->refcount--;
+		arg->initialized.search_args->box = NULL;
+		/* fall through */
+	case SEARCH_SUB:
+	case SEARCH_OR:
+		mail_search_arg_deinit(arg->value.subargs);
+		break;
+	default:
+		break;
 	}
 }
 
--- a/src/lib-storage/mail-search.h	Wed Jun 14 02:15:34 2017 +0300
+++ b/src/lib-storage/mail-search.h	Wed Jun 07 19:36:19 2017 +0300
@@ -168,8 +168,10 @@
    afterwards again if needed. The args can be reused for other queries after
    calling this. */
 void mail_search_args_deinit(struct mail_search_args *args);
-/* Free arg and its children. */
+/* Free arg and its siblings and children. */
 void mail_search_arg_deinit(struct mail_search_arg *arg);
+/* Free arg and its children, but not its siblings. */
+void mail_search_arg_one_deinit(struct mail_search_arg *arg);
 /* Convert sequence sets in args to UIDs. */
 void mail_search_args_seq2uid(struct mail_search_args *args);
 /* Returns TRUE if the two search arguments are fully compatible.