dovecot-2.1: mailbox list indexes: Handle name="" mailboxes.

dovecot at dovecot.org dovecot at dovecot.org
Sun Oct 2 18:40:47 EEST 2011


details:   http://hg.dovecot.org/dovecot-2.1/rev/37c078f1745c
changeset: 13593:37c078f1745c
user:      Timo Sirainen <tss at iki.fi>
date:      Sun Oct 02 18:49:09 2011 +0300
description:
mailbox list indexes: Handle name="" mailboxes.

diffstat:

 src/lib-storage/list/mailbox-list-index-sync.c |  5 +++--
 src/lib-storage/list/mailbox-list-index.c      |  6 ++++--
 2 files changed, 7 insertions(+), 4 deletions(-)

diffs (41 lines):

diff -r d9b0cd5b77b5 -r 37c078f1745c src/lib-storage/list/mailbox-list-index-sync.c
--- a/src/lib-storage/list/mailbox-list-index-sync.c	Sun Oct 02 18:39:49 2011 +0300
+++ b/src/lib-storage/list/mailbox-list-index-sync.c	Sun Oct 02 18:49:09 2011 +0300
@@ -76,12 +76,13 @@
 			     const char *name,
 			     enum mailbox_list_index_flags flags)
 {
-	const char *const *path;
+	const char *const *path, *empty_path[] = { "", NULL };
 	struct mailbox_list_index_node *node, *parent;
 	unsigned int i;
 	uint32_t seq = 0;
 
-	path = t_strsplit(name, ctx->sep);
+	path = *name == '\0' ? empty_path :
+		t_strsplit(name, ctx->sep);
 	/* find the last node that exists in the path */
 	node = ctx->ilist->mailbox_tree; parent = NULL;
 	for (i = 0; path[i] != NULL; i++) {
diff -r d9b0cd5b77b5 -r 37c078f1745c src/lib-storage/list/mailbox-list-index.c
--- a/src/lib-storage/list/mailbox-list-index.c	Sun Oct 02 18:39:49 2011 +0300
+++ b/src/lib-storage/list/mailbox-list-index.c	Sun Oct 02 18:49:09 2011 +0300
@@ -46,14 +46,16 @@
 mailbox_list_index_lookup_real(struct mailbox_list *list, const char *name)
 {
 	struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(list);
-	struct mailbox_list_index_node *node;
+	struct mailbox_list_index_node *node = ilist->mailbox_tree;
 	const char *const *path;
 	unsigned int i;
 	char sep[2];
 
+	if (*name == '\0')
+		return mailbox_list_index_node_find_sibling(node, "");
+
 	sep[0] = mailbox_list_get_hierarchy_sep(list); sep[1] = '\0';
 	path = t_strsplit(name, sep);
-	node = ilist->mailbox_tree;
 	for (i = 0;; i++) {
 		node = mailbox_list_index_node_find_sibling(node, path[i]);
 		if (node == NULL || path[i+1] == NULL)


More information about the dovecot-cvs mailing list