Mercurial > dovecot > core-2.2
changeset 18723:eafbf9a13bbd
lib-storage: Added mail_search_init/deinit_arg()
For forcibly initializing/deinitializing search args.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 18 May 2015 06:36:56 -0400 |
parents | e6513dd519d5 |
children | 3d2bd49e6b4a |
files | src/lib-storage/mail-search.c src/lib-storage/mail-search.h |
diffstat | 2 files changed, 21 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/mail-search.c Mon May 18 06:21:50 2015 -0400 +++ b/src/lib-storage/mail-search.c Mon May 18 06:36:56 2015 -0400 @@ -60,8 +60,7 @@ } } -static void -mail_search_args_init_sub(struct mail_search_args *args, +void mail_search_arg_init(struct mail_search_args *args, struct mail_search_arg *arg, bool change_uidsets, const ARRAY_TYPE(seq_range) *search_saved_uidset) @@ -118,9 +117,9 @@ /* fall through */ case SEARCH_SUB: case SEARCH_OR: - mail_search_args_init_sub(args, arg->value.subargs, - change_uidsets, - search_saved_uidset); + mail_search_arg_init(args, arg->value.subargs, + change_uidsets, + search_saved_uidset); break; default: break; @@ -142,12 +141,11 @@ args->box = box; if (!args->simplified) mail_search_args_simplify(args); - mail_search_args_init_sub(args, args->args, change_uidsets, - search_saved_uidset); + mail_search_arg_init(args, args->args, change_uidsets, + search_saved_uidset); } -static void mail_search_args_deinit_sub(struct mail_search_args *args, - struct mail_search_arg *arg) +void mail_search_arg_deinit(struct mail_search_arg *arg) { for (; arg != NULL; arg = arg->next) { switch (arg->type) { @@ -165,8 +163,7 @@ break; case SEARCH_INTHREAD: i_assert(arg->initialized.search_args->refcount > 0); - if (args->refcount == 0 && - arg->value.search_result != NULL) { + if (arg->value.search_result != NULL) { mailbox_search_result_free( &arg->value.search_result); } @@ -175,7 +172,7 @@ /* fall through */ case SEARCH_SUB: case SEARCH_OR: - mail_search_args_deinit_sub(args, arg->value.subargs); + mail_search_arg_deinit(arg->value.subargs); break; default: break; @@ -188,7 +185,7 @@ if (--args->init_refcount > 0) return; - mail_search_args_deinit_sub(args, args->args); + mail_search_arg_deinit(args->args); args->box = NULL; }
--- a/src/lib-storage/mail-search.h Mon May 18 06:21:50 2015 -0400 +++ b/src/lib-storage/mail-search.h Mon May 18 06:36:56 2015 -0400 @@ -132,9 +132,18 @@ struct mailbox *box, bool change_uidsets, const ARRAY_TYPE(seq_range) *search_saved_uidset) ATTR_NULL(4); -/* Free keywords. The args can initialized afterwards again if needed. - The args can be reused for other queries after calling this. */ +/* Initialize arg and its children. args is used for getting mailbox and + pool. */ +void mail_search_arg_init(struct mail_search_args *args, + struct mail_search_arg *arg, + bool change_uidsets, + const ARRAY_TYPE(seq_range) *search_saved_uidset); +/* Free memory allocated by mail_search_args_init(). The args can initialized + 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. */ +void mail_search_arg_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.