changeset 9279:7615ccab3829 HEAD

listescape: Fixed problems with handling mailbox listing.
author Timo Sirainen <tss@iki.fi>
date Mon, 03 Aug 2009 00:18:30 -0400
parents f55e989de7ac
children 25c9df95fda6
files src/plugins/listescape/listescape-plugin.c
diffstat 1 files changed, 13 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/plugins/listescape/listescape-plugin.c	Mon Aug 03 00:16:58 2009 -0400
+++ b/src/plugins/listescape/listescape-plugin.c	Mon Aug 03 00:18:30 2009 -0400
@@ -54,9 +54,12 @@
 		str++;
 	}
 	for (; *str != '\0'; str++) {
-		if (*str == ns->sep && change_sep)
-			str_append_c(esc, ns->list->hierarchy_sep);
-		else if (*str == ns->list->hierarchy_sep ||
+		if (*str == ns->sep) {
+			if (change_sep)
+				str_append_c(esc, ns->list->hierarchy_sep);
+			else
+				str_append_c(esc, *str);
+		} else if (*str == ns->list->hierarchy_sep ||
 			 *str == escape_char || *str == '/')
 			str_printfa(esc, "%c%02x", escape_char, *str);
 		else
@@ -101,14 +104,18 @@
 	struct mailbox_list_iterate_context *ctx;
 	const char **escaped_patterns;
 	unsigned int i;
+	bool change_sep;
 
-	t_push();
-	if ((flags & MAILBOX_LIST_ITER_VIRTUAL_NAMES) != 0) {
+	/* this is kind of kludgy. In ACL code we want to convert patterns,
+	   in maildir renaming code we don't. so for now just use the _RAW_LIST
+	   flag.. */
+	if ((flags & MAILBOX_LIST_ITER_RAW_LIST) == 0) {
+		change_sep = (flags & MAILBOX_LIST_ITER_VIRTUAL_NAMES) == 0;
 		escaped_patterns = t_new(const char *,
 					 str_array_length(patterns) + 1);
 		for (i = 0; patterns[i] != NULL; i++) {
 			escaped_patterns[i] =
-				list_escape(list->ns, patterns[i], FALSE);
+				list_escape(list->ns, patterns[i], change_sep);
 		}
 		patterns = escaped_patterns;
 	}
@@ -120,7 +127,6 @@
 	list->ns->real_sep = list->hierarchy_sep;
 	ctx = mlist->module_ctx.super.iter_init(list, patterns, flags);
 	list->ns->real_sep = list->ns->sep;
-	t_pop();
 	return ctx;
 }