dovecot-2.1: imapc: Fixed handling keywords.

dovecot at dovecot.org dovecot at dovecot.org
Fri Oct 7 21:07:34 EEST 2011


details:   http://hg.dovecot.org/dovecot-2.1/rev/92dd30cf0d22
changeset: 13619:92dd30cf0d22
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Oct 07 21:15:52 2011 +0300
description:
imapc: Fixed handling keywords.
The status->keywords must point to mail_index's keywords.

diffstat:

 src/lib-storage/index/imapc/imapc-mailbox.c |  13 ++++---------
 src/lib-storage/index/imapc/imapc-storage.c |   3 ---
 src/lib-storage/index/imapc/imapc-storage.h |   1 -
 3 files changed, 4 insertions(+), 13 deletions(-)

diffs (70 lines):

diff -r aaa0463aa66f -r 92dd30cf0d22 src/lib-storage/index/imapc/imapc-mailbox.c
--- a/src/lib-storage/index/imapc/imapc-mailbox.c	Fri Oct 07 21:14:58 2011 +0300
+++ b/src/lib-storage/index/imapc/imapc-mailbox.c	Fri Oct 07 21:15:52 2011 +0300
@@ -443,6 +443,7 @@
 {
 	const struct imap_arg *flags_args, *arg;
 	const char *flag;
+	unsigned int idx;
 
 	i_assert(reply->args[0].type == IMAP_ARG_ATOM);
 
@@ -450,7 +451,6 @@
 		return;
 
 	mbox->permanent_flags = 0;
-	array_clear(&mbox->permanent_keywords);
 	mbox->box.disallow_new_keywords = TRUE;
 
 	for (arg = flags_args; arg->type != IMAP_ARG_EOL; arg++) {
@@ -462,16 +462,11 @@
 		else if (*flag == '\\')
 			mbox->permanent_flags |= imap_parse_system_flag(flag);
 		else {
-			/* this wastes some memory when called multiple times,
-			   but that should happen quite rarely */
-			flag = p_strdup(mbox->box.pool, flag);
-			array_append(&mbox->permanent_keywords, &flag, 1);
+			/* we'll simply make sure that it exists in the index */
+			mail_index_keyword_lookup_or_create(mbox->box.index,
+							    flag, &idx);
 		}
 	}
-	/* NULL-terminate it */
-	(void)array_append_space(&mbox->permanent_keywords);
-	array_delete(&mbox->permanent_keywords,
-		     array_count(&mbox->permanent_keywords)-1, 1);
 }
 
 void imapc_mailbox_register_untagged(struct imapc_mailbox *mbox,
diff -r aaa0463aa66f -r 92dd30cf0d22 src/lib-storage/index/imapc/imapc-storage.c
--- a/src/lib-storage/index/imapc/imapc-storage.c	Fri Oct 07 21:14:58 2011 +0300
+++ b/src/lib-storage/index/imapc/imapc-storage.c	Fri Oct 07 21:15:52 2011 +0300
@@ -325,7 +325,6 @@
 	p_array_init(&mbox->untagged_callbacks, pool, 16);
 	p_array_init(&mbox->resp_text_callbacks, pool, 16);
 	p_array_init(&mbox->fetch_mails, pool, 16);
-	p_array_init(&mbox->permanent_keywords, pool, 32);
 	p_array_init(&mbox->delayed_expunged_uids, pool, 16);
 	mbox->prev_mail_cache.fd = -1;
 	imapc_mailbox_register_callbacks(mbox);
@@ -539,8 +538,6 @@
 					      struct mailbox_status *status_r)
 {
 	index_storage_get_status(&mbox->box, items, status_r);
-	if ((items & STATUS_KEYWORDS) != 0)
-		status_r->keywords = &mbox->permanent_keywords;
 	if ((items & STATUS_PERMANENT_FLAGS) != 0)
 		status_r->permanent_flags = mbox->permanent_flags;
 }
diff -r aaa0463aa66f -r 92dd30cf0d22 src/lib-storage/index/imapc/imapc-storage.h
--- a/src/lib-storage/index/imapc/imapc-storage.h	Fri Oct 07 21:14:58 2011 +0300
+++ b/src/lib-storage/index/imapc/imapc-storage.h	Fri Oct 07 21:15:52 2011 +0300
@@ -64,7 +64,6 @@
 	ARRAY_DEFINE(resp_text_callbacks, struct imapc_mailbox_event_callback);
 
 	enum mail_flags permanent_flags;
-	ARRAY_TYPE(keywords) permanent_keywords;
 
 	ARRAY_TYPE(uint32_t) delayed_expunged_uids;
 	uint32_t sync_uid_validity;


More information about the dovecot-cvs mailing list