changeset 13593:37c078f1745c

mailbox list indexes: Handle name="" mailboxes.
author Timo Sirainen <tss@iki.fi>
date Sun, 02 Oct 2011 18:49:09 +0300
parents d9b0cd5b77b5
children 65696275eaa6
files src/lib-storage/list/mailbox-list-index-sync.c src/lib-storage/list/mailbox-list-index.c
diffstat 2 files changed, 7 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- 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++) {
--- 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)