changeset 13443:84e31a32293e

lib-storage: Fixed mailbox_list_mailbox() for backends without get_mailbox_flags().
author Timo Sirainen <tss@iki.fi>
date Mon, 12 Sep 2011 12:40:34 +0300
parents 7669862d95e7
children 59c7b30973cf
files src/lib-storage/mailbox-list.c
diffstat 1 files changed, 17 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/mailbox-list.c	Mon Sep 12 12:38:04 2011 +0300
+++ b/src/lib-storage/mailbox-list.c	Mon Sep 12 12:40:34 2011 +0300
@@ -1314,13 +1314,26 @@
 		return 1;
 	}
 
+	if (list->v.get_mailbox_flags == NULL) {
+		/* can't do this optimized. do it the slow way. */
+		struct mailbox_list_iterate_context *iter;
+		const struct mailbox_info *info;
+		const char *vname;
+
+		vname = mailbox_list_get_vname(list, name);
+		iter = mailbox_list_iter_init(list, vname, 0);
+		info = mailbox_list_iter_next(iter);
+		if (info == NULL)
+			*flags_r = MAILBOX_NONEXISTENT;
+		else
+			*flags_r = info->flags;
+		return mailbox_list_iter_deinit(&iter);
+	}
+
 	rootdir = mailbox_list_get_path(list, NULL,
 					MAILBOX_LIST_PATH_TYPE_MAILBOX);
+	i_assert(rootdir != NULL);
 	path = mailbox_list_get_path(list, name, MAILBOX_LIST_PATH_TYPE_DIR);
-	if (rootdir == NULL) {
-		/* shouldn't happen with anything except shared mailboxes */
-		return 0;
-	}
 
 	fname = strrchr(path, '/');
 	if (fname == NULL) {