changeset 12537:16929d83a00c

lib-storage: Simplified mailbox_keyword*() APIs. They are no longer struct mailbox methods, because they're always implemented as being wrappers to lib-index APIs anyway. Also mailbox_keywords_ref/unref() no longer take mailbox parameter.
author Timo Sirainen <tss@iki.fi>
date Mon, 06 Dec 2010 02:16:22 +0000
parents 9d947390a875
children 57d7ea7fa5f6
files src/dsync/dsync-worker-local.c src/imap/cmd-append.c src/imap/cmd-store.c src/lib-lda/mail-deliver.c src/lib-storage/Makefile.am src/lib-storage/index/cydir/cydir-storage.c src/lib-storage/index/dbox-multi/mdbox-storage.c src/lib-storage/index/dbox-single/sdbox-storage.c src/lib-storage/index/index-storage.c src/lib-storage/index/index-storage.h src/lib-storage/index/maildir/maildir-storage.c src/lib-storage/index/mbox/mbox-storage.c src/lib-storage/index/raw/raw-storage.c src/lib-storage/mail-copy.c src/lib-storage/mail-search.c src/lib-storage/mail-storage-private.h src/lib-storage/mail-storage.c src/lib-storage/mail-storage.h src/lib-storage/test-mailbox.c src/plugins/acl/acl-mailbox.c src/plugins/virtual/virtual-save.c src/plugins/virtual/virtual-storage.c src/plugins/virtual/virtual-sync.c
diffstat 23 files changed, 19 insertions(+), 304 deletions(-) [+]
line wrap: on
line diff
--- a/src/dsync/dsync-worker-local.c	Mon Dec 06 01:47:50 2010 +0000
+++ b/src/dsync/dsync-worker-local.c	Mon Dec 06 02:16:22 2010 +0000
@@ -1523,7 +1523,7 @@
 		keywords = mailbox_keywords_create_valid(worker->mail->box,
 							 msg->keywords);
 		mail_update_keywords(worker->mail, MODIFY_REPLACE, keywords);
-		mailbox_keywords_unref(worker->mail->box, &keywords);
+		mailbox_keywords_unref(&keywords);
 		mail_update_modseq(worker->mail, msg->modseq);
 	}
 }
@@ -1574,7 +1574,7 @@
 		mailbox_keywords_create_valid(box, msg->keywords);
 	mailbox_save_set_flags(save_ctx, msg->flags, keywords);
 	if (keywords != NULL)
-		mailbox_keywords_unref(box, &keywords);
+		mailbox_keywords_unref(&keywords);
 	mailbox_save_set_uid(save_ctx, msg->uid);
 	mailbox_save_set_save_date(save_ctx, msg->save_date);
 	mailbox_save_set_min_modseq(save_ctx, msg->modseq);
--- a/src/imap/cmd-append.c	Mon Dec 06 01:47:50 2010 +0000
+++ b/src/imap/cmd-append.c	Mon Dec 06 02:16:22 2010 +0000
@@ -351,7 +351,7 @@
 	ret = mailbox_save_begin(&ctx->save_ctx, ctx->input);
 
 	if (keywords != NULL)
-		mailbox_keywords_unref(ctx->box, &keywords);
+		mailbox_keywords_unref(&keywords);
 
 	if (ret < 0) {
 		/* save initialization failed */
--- a/src/imap/cmd-store.c	Mon Dec 06 01:47:50 2010 +0000
+++ b/src/imap/cmd-store.c	Mon Dec 06 02:16:22 2010 +0000
@@ -201,7 +201,7 @@
 	mail_free(&mail);
 
 	if (ctx.keywords != NULL)
-		mailbox_keywords_unref(client->mailbox, &ctx.keywords);
+		mailbox_keywords_unref(&ctx.keywords);
 
 	ret = mailbox_search_deinit(&search_ctx);
 	if (ret < 0)
--- a/src/lib-lda/mail-deliver.c	Mon Dec 06 01:47:50 2010 +0000
+++ b/src/lib-lda/mail-deliver.c	Mon Dec 06 02:16:22 2010 +0000
@@ -253,7 +253,7 @@
 	else
 		mail_deliver_log_cache_var_expand_table(ctx);
 	if (kw != NULL)
-		mailbox_keywords_unref(box, &kw);
+		mailbox_keywords_unref(&kw);
 	mail_free(&ctx->dest_mail);
 
 	if (ret < 0)
--- a/src/lib-storage/Makefile.am	Mon Dec 06 01:47:50 2010 +0000
+++ b/src/lib-storage/Makefile.am	Mon Dec 06 02:16:22 2010 +0000
@@ -33,6 +33,7 @@
 	mail-storage-settings.c \
 	mail-thread.c \
 	mail-user.c \
+	mailbox-keywords.c \
 	mailbox-list.c \
 	mailbox-search-result.c \
 	mailbox-tree.c \
--- a/src/lib-storage/index/cydir/cydir-storage.c	Mon Dec 06 01:47:50 2010 +0000
+++ b/src/lib-storage/index/cydir/cydir-storage.c	Mon Dec 06 02:16:22 2010 +0000
@@ -156,11 +156,6 @@
 		index_transaction_commit,
 		index_transaction_rollback,
 		index_transaction_set_max_modseq,
-		index_keywords_create,
-		index_keywords_create_from_indexes,
-		index_keywords_ref,
-		index_keywords_unref,
-		index_keyword_is_valid,
 		index_storage_get_seq_range,
 		index_storage_get_uid_range,
 		index_storage_get_expunges,
--- a/src/lib-storage/index/dbox-multi/mdbox-storage.c	Mon Dec 06 01:47:50 2010 +0000
+++ b/src/lib-storage/index/dbox-multi/mdbox-storage.c	Mon Dec 06 02:16:22 2010 +0000
@@ -415,11 +415,6 @@
 		index_transaction_commit,
 		index_transaction_rollback,
 		index_transaction_set_max_modseq,
-		index_keywords_create,
-		index_keywords_create_from_indexes,
-		index_keywords_ref,
-		index_keywords_unref,
-		index_keyword_is_valid,
 		index_storage_get_seq_range,
 		index_storage_get_uid_range,
 		index_storage_get_expunges,
--- a/src/lib-storage/index/dbox-single/sdbox-storage.c	Mon Dec 06 01:47:50 2010 +0000
+++ b/src/lib-storage/index/dbox-single/sdbox-storage.c	Mon Dec 06 02:16:22 2010 +0000
@@ -382,11 +382,6 @@
 		index_transaction_commit,
 		index_transaction_rollback,
 		index_transaction_set_max_modseq,
-		index_keywords_create,
-		index_keywords_create_from_indexes,
-		index_keywords_ref,
-		index_keywords_unref,
-		index_keyword_is_valid,
 		index_storage_get_seq_range,
 		index_storage_get_uid_range,
 		index_storage_get_expunges,
--- a/src/lib-storage/index/index-storage.c	Mon Dec 06 01:47:50 2010 +0000
+++ b/src/lib-storage/index/index-storage.c	Mon Dec 06 02:16:22 2010 +0000
@@ -5,7 +5,6 @@
 #include "istream.h"
 #include "ioloop.h"
 #include "str.h"
-#include "imap-parser.h"
 #include "mkdir-parents.h"
 #include "mail-index-alloc-cache.h"
 #include "mail-index-private.h"
@@ -490,105 +489,6 @@
 	return mail_index_view_is_inconsistent(box->view);
 }
 
-bool index_keyword_is_valid(struct mailbox *box, const char *keyword,
-			    const char **error_r)
-{
-	unsigned int i, idx;
-
-	i_assert(box->opened);
-
-	/* if it already exists, skip validity checks */
-	if (mail_index_keyword_lookup(box->index, keyword, &idx))
-		return TRUE;
-
-	if (*keyword == '\0') {
-		*error_r = "Empty keywords not allowed";
-		return FALSE;
-	}
-
-	/* these are IMAP-specific restrictions, but for now IMAP is all we
-	   care about */
-	for (i = 0; keyword[i] != '\0'; i++) {
-		if (IS_ATOM_SPECIAL((unsigned char)keyword[i])) {
-			*error_r = "Invalid characters in keyword";
-			return FALSE;
-		}
-		if ((unsigned char)keyword[i] >= 0x80) {
-			*error_r = "8bit characters in keyword";
-			return FALSE;
-		}
-	}
-	if (i > box->storage->set->mail_max_keyword_length) {
-		*error_r = "Keyword length too long";
-		return FALSE;
-	}
-	return TRUE;
-}
-
-static struct mail_keywords *
-index_keywords_create_skip(struct mailbox *box,
-			   const char *const keywords[])
-{
-	ARRAY_DEFINE(valid_keywords, const char *);
-	const char *error;
-
-	t_array_init(&valid_keywords, 32);
-	for (; *keywords != NULL; keywords++) {
-		if (mailbox_keyword_is_valid(box, *keywords, &error))
-			array_append(&valid_keywords, keywords, 1);
-	}
-	(void)array_append_space(&valid_keywords); /* NULL-terminate */
-	return mail_index_keywords_create(box->index, keywords);
-}
-
-int index_keywords_create(struct mailbox *box, const char *const keywords[],
-			  struct mail_keywords **keywords_r, bool skip_invalid)
-{
-	const char *error;
-	unsigned int i;
-
-	i_assert(box->opened);
-
-	for (i = 0; keywords[i] != NULL; i++) {
-		if (mailbox_keyword_is_valid(box, keywords[i], &error))
-			continue;
-
-		if (!skip_invalid) {
-			mail_storage_set_error(box->storage,
-					       MAIL_ERROR_PARAMS, error);
-			return -1;
-		}
-
-		/* found invalid keywords, do this the slow way */
-		T_BEGIN {
-			*keywords_r = index_keywords_create_skip(box, keywords);
-		} T_END;
-		return 0;
-	}
-
-	*keywords_r = mail_index_keywords_create(box->index, keywords);
-	return 0;
-}
-
-struct mail_keywords *
-index_keywords_create_from_indexes(struct mailbox *box,
-				   const ARRAY_TYPE(keyword_indexes) *idx)
-{
-	i_assert(box->opened);
-
-	return mail_index_keywords_create_from_indexes(box->index, idx);
-}
-
-void index_keywords_ref(struct mail_keywords *keywords)
-{
-	mail_index_keywords_ref(keywords);
-}
-
-void index_keywords_unref(struct mail_keywords *keywords)
-{
-	mail_index_keywords_unref(&keywords);
-}
-
 void index_save_context_free(struct mail_save_context *ctx)
 {
 	i_free_and_null(ctx->from_envelope);
--- a/src/lib-storage/index/index-storage.h	Mon Dec 06 01:47:50 2010 +0000
+++ b/src/lib-storage/index/index-storage.h	Mon Dec 06 02:16:22 2010 +0000
@@ -81,16 +81,6 @@
 bool index_storage_allow_new_keywords(struct mailbox *box);
 bool index_storage_is_inconsistent(struct mailbox *box);
 
-int index_keywords_create(struct mailbox *box, const char *const keywords[],
-			  struct mail_keywords **keywords_r, bool skip_invalid);
-struct mail_keywords *
-index_keywords_create_from_indexes(struct mailbox *box,
-				   const ARRAY_TYPE(keyword_indexes) *idx);
-void index_keywords_ref(struct mail_keywords *keywords);
-void index_keywords_unref(struct mail_keywords *keywords);
-bool index_keyword_is_valid(struct mailbox *box, const char *keyword,
-			    const char **error_r);
-
 void index_mailbox_set_recent_uid(struct mailbox *box, uint32_t uid);
 void index_mailbox_set_recent_seq(struct mailbox *box,
 				  struct mail_index_view *view,
--- a/src/lib-storage/index/maildir/maildir-storage.c	Mon Dec 06 01:47:50 2010 +0000
+++ b/src/lib-storage/index/maildir/maildir-storage.c	Mon Dec 06 02:16:22 2010 +0000
@@ -656,11 +656,6 @@
 		index_transaction_commit,
 		index_transaction_rollback,
 		index_transaction_set_max_modseq,
-		index_keywords_create,
-		index_keywords_create_from_indexes,
-		index_keywords_ref,
-		index_keywords_unref,
-		index_keyword_is_valid,
 		index_storage_get_seq_range,
 		index_storage_get_uid_range,
 		index_storage_get_expunges,
--- a/src/lib-storage/index/mbox/mbox-storage.c	Mon Dec 06 01:47:50 2010 +0000
+++ b/src/lib-storage/index/mbox/mbox-storage.c	Mon Dec 06 02:16:22 2010 +0000
@@ -760,11 +760,6 @@
 		mbox_transaction_commit,
 		mbox_transaction_rollback,
 		index_transaction_set_max_modseq,
-		index_keywords_create,
-		index_keywords_create_from_indexes,
-		index_keywords_ref,
-		index_keywords_unref,
-		index_keyword_is_valid,
 		index_storage_get_seq_range,
 		index_storage_get_uid_range,
 		index_storage_get_expunges,
--- a/src/lib-storage/index/raw/raw-storage.c	Mon Dec 06 01:47:50 2010 +0000
+++ b/src/lib-storage/index/raw/raw-storage.c	Mon Dec 06 02:16:22 2010 +0000
@@ -156,11 +156,6 @@
 		index_transaction_commit,
 		index_transaction_rollback,
 		index_transaction_set_max_modseq,
-		index_keywords_create,
-		index_keywords_create_from_indexes,
-		index_keywords_ref,
-		index_keywords_unref,
-		index_keyword_is_valid,
 		index_storage_get_seq_range,
 		index_storage_get_uid_range,
 		index_storage_get_expunges,
--- a/src/lib-storage/mail-copy.c	Mon Dec 06 01:47:50 2010 +0000
+++ b/src/lib-storage/mail-copy.c	Mon Dec 06 02:16:22 2010 +0000
@@ -64,7 +64,7 @@
 		/* keywords gets unreferenced twice: first in
 		   mailbox_save_cancel()/_finish() and second time in
 		   mailbox_copy(). */
-		mailbox_keywords_ref(ctx->transaction->box, ctx->keywords);
+		mailbox_keywords_ref(ctx->keywords);
 	}
 
 	if (mail_storage_try_copy(&ctx, mail) < 0) {
--- a/src/lib-storage/mail-search.c	Mon Dec 06 01:47:50 2010 +0000
+++ b/src/lib-storage/mail-search.c	Mon Dec 06 02:16:22 2010 +0000
@@ -158,7 +158,7 @@
 		case SEARCH_KEYWORDS:
 			if (arg->value.keywords == NULL)
 				break;
-			mailbox_keywords_unref(args->box, &arg->value.keywords);
+			mailbox_keywords_unref(&arg->value.keywords);
 			break;
 		case SEARCH_MAILBOX_GLOB:
 			if (arg->value.mailbox_glob == NULL)
@@ -619,8 +619,8 @@
 		new_kw = mailbox_keywords_create_from_indexes(box,
 							      &new_indexes);
 	} T_END;
-	mailbox_keywords_unref(box, _kw1);
-	mailbox_keywords_unref(box, _kw2);
+	mailbox_keywords_unref(_kw1);
+	mailbox_keywords_unref(_kw2);
 	return new_kw;
 }
 
--- a/src/lib-storage/mail-storage-private.h	Mon Dec 06 01:47:50 2010 +0000
+++ b/src/lib-storage/mail-storage-private.h	Mon Dec 06 02:16:22 2010 +0000
@@ -154,18 +154,6 @@
 					   uint64_t max_modseq,
 					   ARRAY_TYPE(seq_range) *seqs);
 
-	int (*keywords_create)(struct mailbox *box,
-			       const char *const keywords[],
-			       struct mail_keywords **keywords_r,
-			       bool skip_invalid);
-	struct mail_keywords *
-		(*keywords_create_from_indexes)(struct mailbox *box,
-						const ARRAY_TYPE(keyword_indexes) *idx);
-	void (*keywords_ref)(struct mail_keywords *keywords);
-	void (*keywords_unref)(struct mail_keywords *keywords);
-	bool (*keyword_is_valid)(struct mailbox *box, const char *keyword,
-				 const char **error_r);
-
 	void (*get_seq_range)(struct mailbox *box, uint32_t uid1, uint32_t uid2,
 			      uint32_t *seq1_r, uint32_t *seq2_r);
 	void (*get_uid_range)(struct mailbox *box,
--- a/src/lib-storage/mail-storage.c	Mon Dec 06 01:47:50 2010 +0000
+++ b/src/lib-storage/mail-storage.c	Mon Dec 06 02:16:22 2010 +0000
@@ -1013,57 +1013,6 @@
 	mailbox_notify_changes(box, 0, NULL, NULL);
 }
 
-int mailbox_keywords_create(struct mailbox *box, const char *const keywords[],
-			    struct mail_keywords **keywords_r)
-{
-	const char *empty_keyword_list = NULL;
-
-	if (keywords == NULL)
-		keywords = &empty_keyword_list;
-	return box->v.keywords_create(box, keywords, keywords_r, FALSE);
-}
-
-struct mail_keywords *
-mailbox_keywords_create_valid(struct mailbox *box,
-			      const char *const keywords[])
-{
-	const char *empty_keyword_list = NULL;
-	struct mail_keywords *kw;
-
-	if (keywords == NULL)
-		keywords = &empty_keyword_list;
-	if (box->v.keywords_create(box, keywords, &kw, TRUE) < 0)
-		i_unreached();
-	return kw;
-}
-
-struct mail_keywords *
-mailbox_keywords_create_from_indexes(struct mailbox *box,
-				     const ARRAY_TYPE(keyword_indexes) *idx)
-{
-	return box->v.keywords_create_from_indexes(box, idx);
-}
-
-void mailbox_keywords_ref(struct mailbox *box, struct mail_keywords *keywords)
-{
-	box->v.keywords_ref(keywords);
-}
-
-void mailbox_keywords_unref(struct mailbox *box,
-			    struct mail_keywords **_keywords)
-{
-	struct mail_keywords *keywords = *_keywords;
-
-	*_keywords = NULL;
-	box->v.keywords_unref(keywords);
-}
-
-bool mailbox_keyword_is_valid(struct mailbox *box, const char *keyword,
-			      const char **error_r)
-{
-	return box->v.keyword_is_valid(box, keyword, error_r);
-}
-
 void mailbox_get_seq_range(struct mailbox *box, uint32_t uid1, uint32_t uid2,
 			   uint32_t *seq1_r, uint32_t *seq2_r)
 {
@@ -1308,7 +1257,7 @@
 	ctx->flags = flags;
 	ctx->keywords = keywords;
 	if (keywords != NULL)
-		mailbox_keywords_ref(ctx->transaction->box, keywords);
+		mailbox_keywords_ref(keywords);
 }
 
 void mailbox_save_copy_flags(struct mail_save_context *ctx, struct mail *mail)
@@ -1416,20 +1365,19 @@
 	*_ctx = NULL;
 	ret = box->v.save_finish(ctx);
 	if (keywords != NULL)
-		mailbox_keywords_unref(box, &keywords);
+		mailbox_keywords_unref(&keywords);
 	return ret;
 }
 
 void mailbox_save_cancel(struct mail_save_context **_ctx)
 {
 	struct mail_save_context *ctx = *_ctx;
-	struct mailbox *box = ctx->transaction->box;
 	struct mail_keywords *keywords = ctx->keywords;
 
 	*_ctx = NULL;
 	ctx->transaction->box->v.save_cancel(ctx);
 	if (keywords != NULL)
-		mailbox_keywords_unref(box, &keywords);
+		mailbox_keywords_unref(&keywords);
 }
 
 int mailbox_copy(struct mail_save_context **_ctx, struct mail *mail)
@@ -1449,7 +1397,7 @@
 
 	ret = ctx->transaction->box->v.copy(ctx, mail);
 	if (keywords != NULL)
-		mailbox_keywords_unref(box, &keywords);
+		mailbox_keywords_unref(&keywords);
 	return ret;
 }
 
--- a/src/lib-storage/mail-storage.h	Mon Dec 06 01:47:50 2010 +0000
+++ b/src/lib-storage/mail-storage.h	Mon Dec 06 02:16:22 2010 +0000
@@ -535,9 +535,8 @@
 struct mail_keywords *
 mailbox_keywords_create_from_indexes(struct mailbox *box,
 				     const ARRAY_TYPE(keyword_indexes) *idx);
-void mailbox_keywords_ref(struct mailbox *box, struct mail_keywords *keywords);
-void mailbox_keywords_unref(struct mailbox *box,
-			    struct mail_keywords **keywords);
+void mailbox_keywords_ref(struct mail_keywords *keywords);
+void mailbox_keywords_unref(struct mail_keywords **keywords);
 /* Returns TRUE if keyword is valid, FALSE and error if not. */
 bool mailbox_keyword_is_valid(struct mailbox *box, const char *keyword,
 			      const char **error_r);
--- a/src/lib-storage/test-mailbox.c	Mon Dec 06 01:47:50 2010 +0000
+++ b/src/lib-storage/test-mailbox.c	Mon Dec 06 02:16:22 2010 +0000
@@ -145,47 +145,6 @@
 {
 }
 
-static int
-test_mailbox_keywords_create(struct mailbox *box ATTR_UNUSED,
-			     const char *const keywords[] ATTR_UNUSED,
-			     struct mail_keywords **keywords_r,
-			     bool skip_invalid ATTR_UNUSED)
-{
-	*keywords_r = i_new(struct mail_keywords, 1);
-	(*keywords_r)->refcount = 1;
-	return 0;
-}
-
-static struct mail_keywords *
-test_mailbox_keywords_create_from_indexes(struct mailbox *box ATTR_UNUSED,
-					  const ARRAY_TYPE(keyword_indexes) *idx ATTR_UNUSED)
-{
-	struct mail_keywords *keywords;
-
-	keywords = i_new(struct mail_keywords, 1);
-	keywords->refcount++;
-	return keywords;
-}
-
-static void test_mailbox_keywords_ref(struct mail_keywords *keywords)
-{
-	keywords->refcount++;
-}
-
-static void test_mailbox_keywords_unref(struct mail_keywords *keywords)
-{
-	if (--keywords->refcount == 0)
-		i_free(keywords);
-}
-
-static bool
-test_mailbox_keyword_is_valid(struct mailbox *box ATTR_UNUSED,
-			      const char *keyword ATTR_UNUSED,
-			      const char **error_r ATTR_UNUSED)
-{
-	return TRUE;
-}
-
 static void
 test_mailbox_get_seq_range(struct mailbox *box ATTR_UNUSED,
 			   uint32_t uid1, uint32_t uid2,
@@ -340,11 +299,6 @@
 		test_mailbox_transaction_commit,
 		test_mailbox_transaction_rollback,
 		test_mailbox_transaction_set_max_modseq,
-		test_mailbox_keywords_create,
-		test_mailbox_keywords_create_from_indexes,
-		test_mailbox_keywords_ref,
-		test_mailbox_keywords_unref,
-		test_mailbox_keyword_is_valid,
 		test_mailbox_get_seq_range,
 		test_mailbox_get_uid_range,
 		test_mailbox_get_expunged_uids,
--- a/src/plugins/acl/acl-mailbox.c	Mon Dec 06 01:47:50 2010 +0000
+++ b/src/plugins/acl/acl-mailbox.c	Mon Dec 06 02:16:22 2010 +0000
@@ -428,35 +428,6 @@
 	return abox->module_ctx.super.transaction_commit(ctx, changes_r);
 }
 
-static int
-acl_keywords_create(struct mailbox *box, const char *const keywords[],
-		    struct mail_keywords **keywords_r, bool skip_invalid)
-{
-	struct acl_mailbox *abox = ACL_CONTEXT(box);
-	int ret;
-
-	ret = acl_mailbox_right_lookup(box, ACL_STORAGE_RIGHT_WRITE);
-	if (ret < 0) {
-		if (!skip_invalid)
-			return -1;
-		/* we can't return failure. assume we don't have permissions. */
-		ret = 0;
-	}
-
-	if (ret == 0) {
-		/* no permission to update any flags. just return empty
-		   keywords list. */
-		const char *null = NULL;
-
-		return abox->module_ctx.super.keywords_create(box, &null,
-							      keywords_r,
-							      skip_invalid);
-	}
-
-	return abox->module_ctx.super.keywords_create(box, keywords,
-						      keywords_r, skip_invalid);
-}
-
 static int acl_mailbox_open_check_acl(struct mailbox *box)
 {
 	struct acl_mailbox *abox = ACL_CONTEXT(box);
@@ -529,7 +500,6 @@
 		v->delete = acl_mailbox_delete;
 		v->rename = acl_mailbox_rename;
 		v->save_begin = acl_save_begin;
-		v->keywords_create = acl_keywords_create;
 		v->copy = acl_copy;
 		v->transaction_commit = acl_transaction_commit;
 	}
--- a/src/plugins/virtual/virtual-save.c	Mon Dec 06 01:47:50 2010 +0000
+++ b/src/plugins/virtual/virtual-save.c	Mon Dec 06 02:16:22 2010 +0000
@@ -125,7 +125,7 @@
 	struct virtual_save_context *ctx = (struct virtual_save_context *)_ctx;
 
 	if (ctx->backend_keywords != NULL)
-		mailbox_keywords_unref(ctx->backend_box, &ctx->backend_keywords);
+		mailbox_keywords_unref(&ctx->backend_keywords);
 	if (ctx->backend_save_ctx != NULL)
 		mailbox_save_cancel(&ctx->backend_save_ctx);
 	i_free(ctx);
--- a/src/plugins/virtual/virtual-storage.c	Mon Dec 06 01:47:50 2010 +0000
+++ b/src/plugins/virtual/virtual-storage.c	Mon Dec 06 02:16:22 2010 +0000
@@ -527,11 +527,6 @@
 		virtual_transaction_commit,
 		virtual_transaction_rollback,
 		index_transaction_set_max_modseq,
-		index_keywords_create,
-		index_keywords_create_from_indexes,
-		index_keywords_ref,
-		index_keywords_unref,
-		index_keyword_is_valid,
 		index_storage_get_seq_range,
 		index_storage_get_uid_range,
 		index_storage_get_expunges,
--- a/src/plugins/virtual/virtual-sync.c	Mon Dec 06 01:47:50 2010 +0000
+++ b/src/plugins/virtual/virtual-sync.c	Mon Dec 06 02:16:22 2010 +0000
@@ -406,7 +406,7 @@
 				MODIFY_ADD : MODIFY_REMOVE;
 			mail_update_keywords(bbox->sync_mail,
 					     modify_type, keywords);
-			mailbox_keywords_unref(bbox->box, &keywords);
+			mailbox_keywords_unref(&keywords);
 			break;
 		case MAIL_INDEX_SYNC_TYPE_KEYWORD_RESET:
 			kw_names[0] = NULL;
@@ -414,7 +414,7 @@
 								 kw_names);
 			mail_update_keywords(bbox->sync_mail, MODIFY_REPLACE,
 					     keywords);
-			mailbox_keywords_unref(bbox->box, &keywords);
+			mailbox_keywords_unref(&keywords);
 			break;
 		case MAIL_INDEX_SYNC_TYPE_APPEND:
 			i_unreached();