# HG changeset patch # User Timo Sirainen # Date 1496853379 -10800 # Node ID 5eee5c1e815e70c1b56f65cce9b771d77210dbca # Parent 962ed90f12a9ddebbedded740d0f7790550a4a16 lib-storage: Add mail_search_arg_one_deinit() diff -r 962ed90f12a9 -r 5eee5c1e815e src/lib-storage/mail-search.c --- 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; } } diff -r 962ed90f12a9 -r 5eee5c1e815e src/lib-storage/mail-search.h --- 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.