Mercurial > dovecot > core-2.2
changeset 18722:e6513dd519d5
lib-storage: Cleanup - separate search arg values that are set by mail_search_init()
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 18 May 2015 06:21:50 -0400 |
parents | 9809f68aaa36 |
children | eafbf9a13bbd |
files | src/lib-storage/index/index-search.c src/lib-storage/mail-search-args-imap.c src/lib-storage/mail-search.c src/lib-storage/mail-search.h |
diffstat | 4 files changed, 28 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/index-search.c Sun May 17 00:51:50 2015 +0300 +++ b/src/lib-storage/index/index-search.c Mon May 18 06:21:50 2015 -0400 @@ -127,7 +127,7 @@ struct mail_search_arg *arg) { ARRAY_TYPE(keyword_indexes) keyword_indexes_arr; - const struct mail_keywords *search_kws = arg->value.keywords; + const struct mail_keywords *search_kws = arg->initialized.keywords; const unsigned int *keyword_indexes; unsigned int i, j, count; @@ -202,9 +202,9 @@ if (arg->value.flags != 0) { modseq = mail_index_modseq_lookup_flags(ctx->view, arg->value.flags, ctx->mail_ctx.seq); - } else if (arg->value.keywords != NULL) { + } else if (arg->initialized.keywords != NULL) { modseq = mail_index_modseq_lookup_keywords(ctx->view, - arg->value.keywords, ctx->mail_ctx.seq); + arg->initialized.keywords, ctx->mail_ctx.seq); } else { modseq = mail_index_modseq_lookup(ctx->view, ctx->mail_ctx.seq); @@ -260,12 +260,12 @@ return strcasecmp(arg->value.str, "INBOX") == 0; return strcmp(str, arg->value.str) == 0; case SEARCH_MAILBOX_GLOB: - if (imap_match(arg->value.mailbox_glob, box->vname) == IMAP_MATCH_YES) + if (imap_match(arg->initialized.mailbox_glob, box->vname) == IMAP_MATCH_YES) return 1; if (mail_get_special(ctx->cur_mail, MAIL_FETCH_MAILBOX_NAME, &str) < 0) return -1; - return imap_match(arg->value.mailbox_glob, str) == IMAP_MATCH_YES; + return imap_match(arg->initialized.mailbox_glob, str) == IMAP_MATCH_YES; default: return -1; } @@ -1073,11 +1073,11 @@ int ret = 0; /* mail_search_args_init() must have been called by now */ - i_assert(arg->value.search_args != NULL); + i_assert(arg->initialized.search_args != NULL); p_array_init(&arg->value.seqset, ctx->mail_ctx.args->pool, 64); if (mailbox_search_result_build(ctx->mail_ctx.transaction, - arg->value.search_args, + arg->initialized.search_args, MAILBOX_SEARCH_RESULT_FLAG_UPDATE | MAILBOX_SEARCH_RESULT_FLAG_QUEUE_SYNC, &arg->value.search_result) < 0)
--- a/src/lib-storage/mail-search-args-imap.c Sun May 17 00:51:50 2015 +0300 +++ b/src/lib-storage/mail-search-args-imap.c Mon May 18 06:21:50 2015 -0400 @@ -98,7 +98,7 @@ str_append_c(dest, ')'); break; case SEARCH_KEYWORDS: { - const struct mail_keywords *kw = arg->value.keywords; + const struct mail_keywords *kw = arg->initialized.keywords; const ARRAY_TYPE(keywords) *names_arr; const char *const *namep; unsigned int i;
--- a/src/lib-storage/mail-search.c Sun May 17 00:51:50 2015 +0300 +++ b/src/lib-storage/mail-search.c Mon May 18 06:21:50 2015 -0400 @@ -85,8 +85,8 @@ keywords[0] = arg->value.str; keywords[1] = NULL; - i_assert(arg->value.keywords == NULL); - arg->value.keywords = + i_assert(arg->initialized.keywords == NULL); + arg->initialized.keywords = mailbox_keywords_create_valid(args->box, keywords); break; @@ -95,15 +95,15 @@ struct mail_namespace *ns = mailbox_get_namespace(args->box); - arg->value.mailbox_glob = + arg->initialized.mailbox_glob = imap_match_init(default_pool, arg->value.str, TRUE, mail_namespace_get_sep(ns)); break; } case SEARCH_INTHREAD: - thread_args = arg->value.search_args; + thread_args = arg->initialized.search_args; if (thread_args == NULL) { - arg->value.search_args = thread_args = + arg->initialized.search_args = thread_args = p_new(args->pool, struct mail_search_args, 1); thread_args->pool = args->pool; @@ -153,25 +153,25 @@ switch (arg->type) { case SEARCH_MODSEQ: case SEARCH_KEYWORDS: - if (arg->value.keywords == NULL) + if (arg->initialized.keywords == NULL) break; - mailbox_keywords_unref(&arg->value.keywords); + mailbox_keywords_unref(&arg->initialized.keywords); break; case SEARCH_MAILBOX_GLOB: - if (arg->value.mailbox_glob == NULL) + if (arg->initialized.mailbox_glob == NULL) break; - imap_match_deinit(&arg->value.mailbox_glob); + imap_match_deinit(&arg->initialized.mailbox_glob); break; case SEARCH_INTHREAD: - i_assert(arg->value.search_args->refcount > 0); + i_assert(arg->initialized.search_args->refcount > 0); if (args->refcount == 0 && arg->value.search_result != NULL) { mailbox_search_result_free( &arg->value.search_result); } - arg->value.search_args->refcount--; - arg->value.search_args->box = NULL; + arg->initialized.search_args->refcount--; + arg->initialized.search_args->box = NULL; /* fall through */ case SEARCH_SUB: case SEARCH_OR: @@ -650,8 +650,8 @@ m1->type == m2->type; } case SEARCH_INTHREAD: - return mail_search_args_equal(arg1->value.search_args, - arg2->value.search_args); + return mail_search_args_equal(arg1->initialized.search_args, + arg2->initialized.search_args); } i_unreached(); return FALSE;
--- a/src/lib-storage/mail-search.h Sun May 17 00:51:50 2015 +0300 +++ b/src/lib-storage/mail-search.h Mon May 18 06:21:50 2015 -0400 @@ -83,12 +83,15 @@ enum mail_search_arg_flag search_flags; enum mail_search_date_type date_type; enum mail_thread_type thread_type; - struct mail_keywords *keywords; struct mail_search_modseq *modseq; + struct mail_search_result *search_result; + } value; + /* set by mail_search_args_init(): */ + struct { struct mail_search_args *search_args; - struct mail_search_result *search_result; + struct mail_keywords *keywords; struct imap_match_glob *mailbox_glob; - } value; + } initialized; void *context; const char *hdr_field_name; /* for SEARCH_HEADER* */