dovecot-2.2: lib-storage: Cleanup - separate search arg values t...

dovecot at dovecot.org dovecot at dovecot.org
Mon May 18 10:24:10 UTC 2015


details:   http://hg.dovecot.org/dovecot-2.2/rev/e6513dd519d5
changeset: 18722:e6513dd519d5
user:      Timo Sirainen <tss at iki.fi>
date:      Mon May 18 06:21:50 2015 -0400
description:
lib-storage: Cleanup - separate search arg values that are set by mail_search_init()

diffstat:

 src/lib-storage/index/index-search.c    |  14 +++++++-------
 src/lib-storage/mail-search-args-imap.c |   2 +-
 src/lib-storage/mail-search.c           |  28 ++++++++++++++--------------
 src/lib-storage/mail-search.h           |  11 +++++++----
 4 files changed, 29 insertions(+), 26 deletions(-)

diffs (165 lines):

diff -r 9809f68aaa36 -r e6513dd519d5 src/lib-storage/index/index-search.c
--- 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)
diff -r 9809f68aaa36 -r e6513dd519d5 src/lib-storage/mail-search-args-imap.c
--- 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;
diff -r 9809f68aaa36 -r e6513dd519d5 src/lib-storage/mail-search.c
--- 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;
diff -r 9809f68aaa36 -r e6513dd519d5 src/lib-storage/mail-search.h
--- 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_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_keywords *keywords;
-		struct mail_search_modseq *modseq;
-		struct mail_search_args *search_args;
-		struct mail_search_result *search_result;
 		struct imap_match_glob *mailbox_glob;
-	} value;
+	} initialized;
 
         void *context;
 	const char *hdr_field_name; /* for SEARCH_HEADER* */


More information about the dovecot-cvs mailing list