dovecot-2.1: Maildir++: Return nonexistent subscribed mailbox wi...

dovecot at dovecot.org dovecot at dovecot.org
Wed Apr 4 10:07:47 EEST 2012


details:   http://hg.dovecot.org/dovecot-2.1/rev/f03e81b702a8
changeset: 14392:f03e81b702a8
user:      Timo Sirainen <tss at iki.fi>
date:      Wed Apr 04 10:07:41 2012 +0300
description:
Maildir++: Return nonexistent subscribed mailbox with nonexistent flag.
e.g. LIST (SUBSCRIBED) "" *

diffstat:

 src/lib-storage/list/mailbox-list-maildir-iter.c  |  6 +++++-
 src/lib-storage/list/mailbox-list-subscriptions.c |  7 +++++--
 src/lib-storage/list/mailbox-list-subscriptions.h |  3 ++-
 3 files changed, 12 insertions(+), 4 deletions(-)

diffs (60 lines):

diff -r 7a414d055b3c -r f03e81b702a8 src/lib-storage/list/mailbox-list-maildir-iter.c
--- a/src/lib-storage/list/mailbox-list-maildir-iter.c	Wed Apr 04 09:48:46 2012 +0300
+++ b/src/lib-storage/list/mailbox-list-maildir-iter.c	Wed Apr 04 10:07:41 2012 +0300
@@ -440,7 +440,11 @@
 	if ((flags & MAILBOX_LIST_ITER_SELECT_SUBSCRIBED) != 0) {
 		/* Listing only subscribed mailboxes.
 		   Flags are set later if needed. */
-		mailbox_list_subscriptions_fill(&ctx->ctx, ctx->tree_ctx);
+		bool default_nonexistent =
+			(flags & MAILBOX_LIST_ITER_RETURN_NO_FLAGS) == 0;
+
+		mailbox_list_subscriptions_fill(&ctx->ctx, ctx->tree_ctx,
+						default_nonexistent);
 	}
 
 	if ((flags & MAILBOX_LIST_ITER_SELECT_SUBSCRIBED) == 0 ||
diff -r 7a414d055b3c -r f03e81b702a8 src/lib-storage/list/mailbox-list-subscriptions.c
--- a/src/lib-storage/list/mailbox-list-subscriptions.c	Wed Apr 04 09:48:46 2012 +0300
+++ b/src/lib-storage/list/mailbox-list-subscriptions.c	Wed Apr 04 10:07:41 2012 +0300
@@ -185,7 +185,8 @@
 }
 
 void mailbox_list_subscriptions_fill(struct mailbox_list_iterate_context *ctx,
-				     struct mailbox_tree_context *tree)
+				     struct mailbox_tree_context *tree,
+				     bool default_nonexistent)
 {
 	struct mailbox_list_iter_update_context update_ctx;
 	struct mailbox_tree_iterate_context *iter;
@@ -197,6 +198,8 @@
 	update_ctx.tree_ctx = tree;
 	update_ctx.glob = ctx->glob;
 	update_ctx.leaf_flags = MAILBOX_SUBSCRIBED;
+	if (default_nonexistent)
+		update_ctx.leaf_flags |= MAILBOX_NONEXISTENT;
 	update_ctx.parent_flags = MAILBOX_CHILD_SUBSCRIBED;
 	update_ctx.match_parents =
 		(ctx->flags & MAILBOX_LIST_ITER_SELECT_RECURSIVEMATCH) != 0;
@@ -226,7 +229,7 @@
 	array_create(&ctx->ctx.module_contexts, pool, sizeof(void *), 5);
 
 	ctx->tree = mailbox_tree_init(sep);
-	mailbox_list_subscriptions_fill(&ctx->ctx, ctx->tree);
+	mailbox_list_subscriptions_fill(&ctx->ctx, ctx->tree, FALSE);
 
 	ctx->info.ns = list->ns;
 	/* the tree usually has only those entries we want to iterate through,
diff -r 7a414d055b3c -r f03e81b702a8 src/lib-storage/list/mailbox-list-subscriptions.h
--- a/src/lib-storage/list/mailbox-list-subscriptions.h	Wed Apr 04 09:48:46 2012 +0300
+++ b/src/lib-storage/list/mailbox-list-subscriptions.h	Wed Apr 04 10:07:41 2012 +0300
@@ -17,7 +17,8 @@
 
 /* Add subscriptions matching the iteration to the given tree */
 void mailbox_list_subscriptions_fill(struct mailbox_list_iterate_context *ctx,
-				     struct mailbox_tree_context *tree);
+				     struct mailbox_tree_context *tree,
+				     bool default_nonexistent);
 
 /* Iterate through subscriptions, call mailbox_list.get_mailbox_flags()
    if necessary for mailboxes to get their flags. */


More information about the dovecot-cvs mailing list