Mercurial > dovecot > core-2.2
changeset 13619:92dd30cf0d22
imapc: Fixed handling keywords.
The status->keywords must point to mail_index's keywords.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 07 Oct 2011 21:15:52 +0300 |
parents | aaa0463aa66f |
children | 7e0bdfa76f12 |
files | src/lib-storage/index/imapc/imapc-mailbox.c src/lib-storage/index/imapc/imapc-storage.c src/lib-storage/index/imapc/imapc-storage.h |
diffstat | 3 files changed, 4 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- 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,
--- 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; }
--- 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;