Mercurial > dovecot > core-2.2
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.