From: Timo Sirainen Date: Wed, 7 Jun 2017 16:36:19 +0000 (+0300) Subject: lib-storage: Add mail_search_arg_one_deinit() X-Git-Tag: 2.2.31.rc1~61 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e97834675264e55f1b76d9e124fa93c7dda28cb4;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Add mail_search_arg_one_deinit() --- diff --git a/src/lib-storage/mail-search.c b/src/lib-storage/mail-search.c index ac9ecb9d11..28b9fec539 100644 --- a/src/lib-storage/mail-search.c +++ b/src/lib-storage/mail-search.c @@ -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; } } diff --git a/src/lib-storage/mail-search.h b/src/lib-storage/mail-search.h index e22e2c8d2e..b3ad164346 100644 --- a/src/lib-storage/mail-search.h +++ b/src/lib-storage/mail-search.h @@ -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.