]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Add mail_search_arg_one_deinit()
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Wed, 7 Jun 2017 16:36:19 +0000 (19:36 +0300)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Wed, 14 Jun 2017 08:30:26 +0000 (11:30 +0300)
src/lib-storage/mail-search.c
src/lib-storage/mail-search.h

index ac9ecb9d11ba4fe88c63bfc3d4240d40ebfe39c4..28b9fec539edddaf1fe58c1c342a3b2468be0a6e 100644 (file)
@@ -146,36 +146,38 @@ void mail_search_args_init(struct mail_search_args *args,
 
 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);
-                       break;
-               case SEARCH_MAILBOX_GLOB:
-                       if (arg->initialized.mailbox_glob == NULL)
-                               break;
+       for (; arg != NULL; arg = arg->next)
+               mail_search_arg_one_deinit(arg);
+}
 
-                       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);
+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;
-               default:
+               mailbox_keywords_unref(&arg->initialized.keywords);
+               break;
+       case SEARCH_MAILBOX_GLOB:
+               if (arg->initialized.mailbox_glob == NULL)
                        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;
        }
 }
 
index e22e2c8d2e6eabc060e6873a0e29d5c9c1336a0d..b3ad164346831596a4a9b574c394bf2d4ed11660 100644 (file)
@@ -168,8 +168,10 @@ void mail_search_arg_init(struct mail_search_args *args,
    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.