]> 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)
committerGitLab <gitlab@git.dovecot.net>
Thu, 8 Jun 2017 12:55:23 +0000 (15:55 +0300)
src/lib-storage/mail-search.c
src/lib-storage/mail-search.h

index 53a9ad927f0f4729077ca217e471861c760c146e..1362bf89b07806e47930036471d41f744bf66adf 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 83d4dc9e51499941d5aefd773bca7a1d862ec2e8..8222c6d38ada3821c4b302da97838f609939fb9e 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.