dovecot-2.2: imapc: Fixed list iteration when namespace and back...
dovecot at dovecot.org
dovecot at dovecot.org
Thu Jun 13 05:29:24 EEST 2013
details: http://hg.dovecot.org/dovecot-2.2/rev/c012f8df87f9
changeset: 16507:c012f8df87f9
user: Timo Sirainen <tss at iki.fi>
date: Thu Jun 13 05:29:07 2013 +0300
description:
imapc: Fixed list iteration when namespace and backend separators differed.
diffstat:
src/lib-storage/index/imapc/imapc-list.c | 50 ++++++++-----------------------
1 files changed, 13 insertions(+), 37 deletions(-)
diffs (126 lines):
diff -r 949ef3625aa2 -r c012f8df87f9 src/lib-storage/index/imapc/imapc-list.c
--- a/src/lib-storage/index/imapc/imapc-list.c Thu Jun 13 05:27:30 2013 +0300
+++ b/src/lib-storage/index/imapc/imapc-list.c Thu Jun 13 05:29:07 2013 +0300
@@ -413,12 +413,6 @@
struct imapc_simple_context ctx;
struct mailbox_node *node;
const char *pattern;
- char sep;
-
- if (imapc_storage_try_get_root_sep(list->storage, &sep) < 0) {
- mailbox_list_set_internal_error(&list->list);
- return -1;
- }
if (list->refreshed_mailboxes)
return 0;
@@ -436,7 +430,7 @@
cmd = imapc_list_simple_context_init(&ctx, list);
imapc_command_sendf(cmd, "LIST \"\" %s", pattern);
mailbox_tree_deinit(&list->mailboxes);
- list->mailboxes = mailbox_tree_init(sep);
+ list->mailboxes = mailbox_tree_init(mail_namespace_get_sep(list->list.ns));
mailbox_tree_set_parents_nonexistent(list->mailboxes);
imapc_simple_run(&ctx);
@@ -495,7 +489,7 @@
struct imapc_mailbox_list_iterate_context *ctx;
pool_t pool;
const char *ns_root_name;
- char sep;
+ char ns_sep;
int ret = 0;
if ((flags & MAILBOX_LIST_ITER_SELECT_SUBSCRIBED) == 0 ||
@@ -514,22 +508,19 @@
return _ctx;
}
- if (imapc_storage_try_get_root_sep(list->storage, &sep) < 0) {
- mailbox_list_set_internal_error(_list);
- ret = -1;
- }
+ ns_sep = mail_namespace_get_sep(_list->ns);
pool = pool_alloconly_create("mailbox list imapc iter", 1024);
ctx = p_new(pool, struct imapc_mailbox_list_iterate_context, 1);
ctx->ctx.pool = pool;
ctx->ctx.list = _list;
ctx->ctx.flags = flags;
- ctx->ctx.glob = imap_match_init_multiple(pool, patterns, FALSE, sep);
+ ctx->ctx.glob = imap_match_init_multiple(pool, patterns, FALSE, ns_sep);
array_create(&ctx->ctx.module_contexts, pool, sizeof(void *), 5);
ctx->info.ns = _list->ns;
- ctx->tree = mailbox_tree_init(sep);
+ ctx->tree = mailbox_tree_init(ns_sep);
mailbox_tree_set_parents_nonexistent(ctx->tree);
imapc_list_build_match_tree(ctx);
@@ -635,44 +626,35 @@
struct imapc_simple_context ctx;
struct imapc_command *cmd;
const char *pattern;
- char src_sep, dest_sep;
+ char dest_sep = mail_namespace_get_sep(dest_list->ns);
i_assert(src_list->tmp_subscriptions == NULL);
if (src_list->refreshed_subscriptions) {
- if (dest_list->subscriptions == NULL) {
- dest_sep = mailbox_list_get_hierarchy_sep(dest_list);
- dest_list->subscriptions =
- mailbox_tree_init(dest_sep);
- }
+ if (dest_list->subscriptions == NULL)
+ dest_list->subscriptions = mailbox_tree_init(dest_sep);
return 0;
}
- if (imapc_storage_try_get_root_sep(src_list->storage, &src_sep) < 0) {
- mailbox_list_set_internal_error(dest_list);
- return -1;
- }
-
- src_list->tmp_subscriptions = mailbox_tree_init(src_sep);
+ src_list->tmp_subscriptions =
+ mailbox_tree_init(mail_namespace_get_sep(_src_list->ns));
cmd = imapc_list_simple_context_init(&ctx, src_list);
if (*src_list->storage->set->imapc_list_prefix == '\0')
pattern = "*";
else {
- pattern = t_strdup_printf("%s%c*",
- src_list->storage->set->imapc_list_prefix,
- src_sep);
+ pattern = t_strdup_printf("%s*",
+ src_list->storage->set->imapc_list_prefix);
}
imapc_command_sendf(cmd, "LSUB \"\" %s", pattern);
imapc_simple_run(&ctx);
/* replace subscriptions tree in destination */
- mailbox_tree_set_separator(src_list->tmp_subscriptions,
- mailbox_list_get_hierarchy_sep(dest_list));
if (dest_list->subscriptions != NULL)
mailbox_tree_deinit(&dest_list->subscriptions);
dest_list->subscriptions = src_list->tmp_subscriptions;
src_list->tmp_subscriptions = NULL;
+ mailbox_tree_set_separator(dest_list->subscriptions, dest_sep);
src_list->refreshed_subscriptions = TRUE;
return 0;
@@ -777,12 +759,6 @@
struct imapc_simple_context sctx;
struct mailbox_node *node;
const char *vname;
- char sep;
-
- if (imapc_storage_try_get_root_sep(list->storage, &sep) < 0) {
- mailbox_list_set_internal_error(_list);
- return -1;
- }
vname = mailbox_list_get_vname(_list, name);
if (!list->refreshed_mailboxes) {
More information about the dovecot-cvs
mailing list