]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
imapc: Fixed handling keywords.
authorTimo Sirainen <tss@iki.fi>
Fri, 7 Oct 2011 18:15:52 +0000 (21:15 +0300)
committerTimo Sirainen <tss@iki.fi>
Fri, 7 Oct 2011 18:15:52 +0000 (21:15 +0300)
The status->keywords must point to mail_index's keywords.

src/lib-storage/index/imapc/imapc-mailbox.c
src/lib-storage/index/imapc/imapc-storage.c
src/lib-storage/index/imapc/imapc-storage.h

index 0e8d62bacedda83d1771d4434260121bbb561125..0ceb09ed106afcafcd148a6d8c5ebd206aabee8f 100644 (file)
@@ -443,6 +443,7 @@ imapc_resp_text_permanentflags(const struct imapc_untagged_reply *reply,
 {
        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 @@ imapc_resp_text_permanentflags(const struct imapc_untagged_reply *reply,
                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 @@ imapc_resp_text_permanentflags(const struct imapc_untagged_reply *reply,
                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,
index 3162fed32b2dcbe0d013fbcdf193b9ec397e9dc6..2bfd43dfb0013e43023ca5d26eb9ad727741213e 100644 (file)
@@ -325,7 +325,6 @@ imapc_mailbox_alloc(struct mail_storage *storage, struct mailbox_list *list,
        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 @@ static void imapc_mailbox_get_selected_status(struct imapc_mailbox *mbox,
                                              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;
 }
index 1d229b781140b3340ac1367f75a680345dc4c060..98922e29ebfe52dbfcacb075b612c7bf2d69efdc 100644 (file)
@@ -64,7 +64,6 @@ struct imapc_mailbox {
        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;