static void dsync_brain_check_namespaces(struct dsync_brain *brain)
{
struct mail_namespace *ns, *first_ns = NULL;
- char sep;
+ char sep, escape_char;
i_assert(brain->hierarchy_sep == '\0');
+ i_assert(brain->escape_char == '\0');
for (ns = brain->user->namespaces; ns != NULL; ns = ns->next) {
if (!dsync_brain_want_namespace(brain, ns))
continue;
sep = mail_namespace_get_sep(ns);
+ escape_char = mailbox_list_get_settings(ns->list)->vname_escape_char;
if (first_ns == NULL) {
brain->hierarchy_sep = sep;
+ brain->escape_char = escape_char;
first_ns = ns;
} else if (brain->hierarchy_sep != sep) {
i_fatal("Synced namespaces have conflicting separators "
"('%c' for prefix=\"%s\", '%c' for prefix=\"%s\")",
brain->hierarchy_sep, first_ns->prefix,
sep, ns->prefix);
+ } else if (brain->escape_char != escape_char) {
+ i_fatal("Synced namespaces have conflicting escape chars "
+ "('%c' for prefix=\"%s\", '%c' for prefix=\"%s\")",
+ brain->escape_char, first_ns->prefix,
+ escape_char, ns->prefix);
}
}
if (brain->hierarchy_sep != '\0')
dsync_brain_check_namespaces(brain);
brain->local_mailbox_tree =
- dsync_mailbox_tree_init(brain->hierarchy_sep, brain->alt_char);
+ dsync_mailbox_tree_init(brain->hierarchy_sep,
+ brain->escape_char, brain->alt_char);
/* we'll convert remote mailbox names to use our own separator */
brain->remote_mailbox_tree =
- dsync_mailbox_tree_init(brain->hierarchy_sep, brain->alt_char);
+ dsync_mailbox_tree_init(brain->hierarchy_sep,
+ brain->escape_char, brain->alt_char);
/* fill the local mailbox tree */
for (ns = brain->user->namespaces; ns != NULL; ns = ns->next) {
deletes = dsync_mailbox_tree_get_deletes(brain->local_mailbox_tree,
&count);
dsync_ibc_send_mailbox_deletes(brain->ibc, deletes, count,
- brain->hierarchy_sep);
+ brain->hierarchy_sep,
+ brain->escape_char);
brain->state = DSYNC_STATE_RECV_MAILBOX_TREE;
}
const char *status;
const struct dsync_mailbox_delete *deletes;
unsigned int i, count;
- char sep;
+ char sep, escape_char;
if (dsync_ibc_recv_mailbox_deletes(brain->ibc, &deletes, &count,
- &sep) == 0)
+ &sep, &escape_char) == 0)
return FALSE;
/* apply remote's mailbox deletions based on our local tree */
- dsync_mailbox_tree_set_remote_sep(brain->local_mailbox_tree, sep);
+ dsync_mailbox_tree_set_remote_chars(brain->local_mailbox_tree, sep,
+ escape_char);
for (i = 0; i < count; i++) {
dsync_brain_mailbox_tree_add_delete(brain->local_mailbox_tree,
brain->remote_mailbox_tree,
/* apply local mailbox deletions based on remote tree */
deletes = dsync_mailbox_tree_get_deletes(brain->local_mailbox_tree,
&count);
- dsync_mailbox_tree_set_remote_sep(brain->remote_mailbox_tree,
- brain->hierarchy_sep);
+ dsync_mailbox_tree_set_remote_chars(brain->remote_mailbox_tree,
+ brain->hierarchy_sep,
+ brain->escape_char);
for (i = 0; i < count; i++) {
dsync_brain_mailbox_tree_add_delete(brain->remote_mailbox_tree,
brain->local_mailbox_tree,
struct dsync_mailbox_tree *tree;
unsigned int counter = 0;
- tree = dsync_mailbox_tree_init('/', '_');
+ tree = dsync_mailbox_tree_init('/', '\0', '_');
create_random_nodes(tree, "", 0, &counter);
return tree;
}
unsigned int counter = 0;
test_begin("dsync mailbox tree sync creates");
- tree1 = dsync_mailbox_tree_init('/', '_');
+ tree1 = dsync_mailbox_tree_init('/', '\0', '_');
nodes_create(tree1, &counter, common_nodes);
tree2 = dsync_mailbox_tree_dup(tree1);
nodes_create(tree1, &counter, create1_nodes);
unsigned int counter = 0;
test_begin("dsync mailbox tree sync deletes");
- tree1 = dsync_mailbox_tree_init('/', '_');
+ tree1 = dsync_mailbox_tree_init('/', '\0', '_');
nodes_create(tree1, &counter, common_nodes);
tree2 = dsync_mailbox_tree_dup(tree1);
nodes_delete(tree1, &counter, delete1_nodes);
unsigned int counter = 0;
test_begin("dsync mailbox tree sync renames 1");
- tree1 = dsync_mailbox_tree_init('/', '_');
+ tree1 = dsync_mailbox_tree_init('/', '\0', '_');
nodes_create(tree1, &counter, common_nodes);
tree2 = dsync_mailbox_tree_dup(tree1);
struct dsync_mailbox_tree *tree1, *tree2;
test_begin("dsync mailbox tree sync renames 2");
- tree1 = dsync_mailbox_tree_init('/', '_');
- tree2 = dsync_mailbox_tree_init('/', '_');
+ tree1 = dsync_mailbox_tree_init('/', '\0', '_');
+ tree2 = dsync_mailbox_tree_init('/', '\0', '_');
node_create(tree1, 1, "0/1", 1);
node_create(tree1, 2, "0/1/2", 3);
struct dsync_mailbox_tree *tree1, *tree2;
test_begin("dsync mailbox tree sync renames 3");
- tree1 = dsync_mailbox_tree_init('/', '_');
- tree2 = dsync_mailbox_tree_init('/', '_');
+ tree1 = dsync_mailbox_tree_init('/', '\0', '_');
+ tree2 = dsync_mailbox_tree_init('/', '\0', '_');
node_create(tree1, 1, "0/2", 1);
node_create(tree1, 2, "0/3", 1);
struct dsync_mailbox_tree *tree1, *tree2;
test_begin("dsync mailbox tree sync renames 4");
- tree1 = dsync_mailbox_tree_init('/', '_');
- tree2 = dsync_mailbox_tree_init('/', '_');
+ tree1 = dsync_mailbox_tree_init('/', '\0', '_');
+ tree2 = dsync_mailbox_tree_init('/', '\0', '_');
node_create(tree1, 1, "0/b", 0);
node_create(tree1, 2, "c", 2);
struct dsync_mailbox_tree *tree1, *tree2;
test_begin("dsync mailbox tree sync renames 5");
- tree1 = dsync_mailbox_tree_init('/', '_');
- tree2 = dsync_mailbox_tree_init('/', '_');
+ tree1 = dsync_mailbox_tree_init('/', '\0', '_');
+ tree2 = dsync_mailbox_tree_init('/', '\0', '_');
node_create(tree1, 1, "b", 0);
node_create(tree1, 2, "c", 2);
struct dsync_mailbox_tree *tree1, *tree2;
test_begin("dsync mailbox tree sync renames 6");
- tree1 = dsync_mailbox_tree_init('/', '_');
- tree2 = dsync_mailbox_tree_init('/', '_');
+ tree1 = dsync_mailbox_tree_init('/', '\0', '_');
+ tree2 = dsync_mailbox_tree_init('/', '\0', '_');
node_create(tree1, 1, "0/1", 0);
node_create(tree1, 2, "0/2", 1);
struct dsync_mailbox_tree *tree1, *tree2;
test_begin("dsync mailbox tree sync renames 7");
- tree1 = dsync_mailbox_tree_init('/', '_');
- tree2 = dsync_mailbox_tree_init('/', '_');
+ tree1 = dsync_mailbox_tree_init('/', '\0', '_');
+ tree2 = dsync_mailbox_tree_init('/', '\0', '_');
node_create(tree1, 1, "0/2", 0);
node_create(tree2, 1, "1/2", 0);
struct dsync_mailbox_tree *tree1, *tree2;
test_begin("dsync mailbox tree sync renames 8");
- tree1 = dsync_mailbox_tree_init('/', '_');
- tree2 = dsync_mailbox_tree_init('/', '_');
+ tree1 = dsync_mailbox_tree_init('/', '\0', '_');
+ tree2 = dsync_mailbox_tree_init('/', '\0', '_');
node_create(tree1, 1, "0/1", 0);
node_create(tree1, 2, "0/2", 1);
struct dsync_mailbox_tree *tree1, *tree2;
test_begin("dsync mailbox tree sync renames 9");
- tree1 = dsync_mailbox_tree_init('/', '_');
- tree2 = dsync_mailbox_tree_init('/', '_');
+ tree1 = dsync_mailbox_tree_init('/', '\0', '_');
+ tree2 = dsync_mailbox_tree_init('/', '\0', '_');
node_create(tree1, 1, "0/1/2", 0);
node_create(tree1, 2, "0/3", 1);
struct dsync_mailbox_tree *tree1, *tree2;
test_begin("dsync mailbox tree sync renames 10");
- tree1 = dsync_mailbox_tree_init('/', '_');
- tree2 = dsync_mailbox_tree_init('/', '_');
+ tree1 = dsync_mailbox_tree_init('/', '\0', '_');
+ tree2 = dsync_mailbox_tree_init('/', '\0', '_');
node_create(tree1, 1, "0/1", 0);
node_create(tree1, 3, "0/2/3", 0);
struct dsync_mailbox_tree *tree1, *tree2;
test_begin("dsync mailbox tree sync renames 11");
- tree1 = dsync_mailbox_tree_init('/', '_');
- tree2 = dsync_mailbox_tree_init('/', '_');
+ tree1 = dsync_mailbox_tree_init('/', '\0', '_');
+ tree2 = dsync_mailbox_tree_init('/', '\0', '_');
node_create(tree1, 1, "0/1", 2);
node_create(tree1, 0, "0/1/2", 0);
struct dsync_mailbox_tree *tree1, *tree2;
test_begin("dsync mailbox tree sync renames 12");
- tree1 = dsync_mailbox_tree_init('/', '_');
- tree2 = dsync_mailbox_tree_init('/', '_');
+ tree1 = dsync_mailbox_tree_init('/', '\0', '_');
+ tree2 = dsync_mailbox_tree_init('/', '\0', '_');
node_create(tree1, 1, "0/2", 0);
node_create(tree1, 2, "1", 0);
struct dsync_mailbox_tree *tree1, *tree2;
test_begin("dsync mailbox tree sync renames 13");
- tree1 = dsync_mailbox_tree_init('/', '_');
- tree2 = dsync_mailbox_tree_init('/', '_');
+ tree1 = dsync_mailbox_tree_init('/', '\0', '_');
+ tree2 = dsync_mailbox_tree_init('/', '\0', '_');
node_create(tree1, 4, "0.0/1.0/2.1", 0);
node_create(tree1, 5, "0.1", 2);
struct dsync_mailbox_tree *tree1, *tree2;
test_begin("dsync mailbox tree sync renames 14");
- tree1 = dsync_mailbox_tree_init('/', '_');
- tree2 = dsync_mailbox_tree_init('/', '_');
+ tree1 = dsync_mailbox_tree_init('/', '\0', '_');
+ tree2 = dsync_mailbox_tree_init('/', '\0', '_');
node_create(tree1, 1, "1", 0);
node_create(tree1, 2, "1/2", 0);
struct dsync_mailbox_tree *tree1, *tree2;
test_begin("dsync mailbox tree sync renames 15");
- tree1 = dsync_mailbox_tree_init('/', '_');
- tree2 = dsync_mailbox_tree_init('/', '_');
+ tree1 = dsync_mailbox_tree_init('/', '\0', '_');
+ tree2 = dsync_mailbox_tree_init('/', '\0', '_');
node_create(tree1, 1, "1", 0);
node_create(tree2, 2, "1", 1);
struct dsync_mailbox_tree *tree1, *tree2;
test_begin("dsync mailbox tree sync renames 16");
- tree1 = dsync_mailbox_tree_init('/', '_');
- tree2 = dsync_mailbox_tree_init('/', '_');
+ tree1 = dsync_mailbox_tree_init('/', '\0', '_');
+ tree2 = dsync_mailbox_tree_init('/', '\0', '_');
node_create(tree1, 1, "1/2", 4);
node_create(tree1, 2, "1", 2);
struct dsync_mailbox_tree *tree1, *tree2;
test_begin("dsync mailbox tree sync renames 17");
- tree1 = dsync_mailbox_tree_init('/', '_');
- tree2 = dsync_mailbox_tree_init('/', '_');
+ tree1 = dsync_mailbox_tree_init('/', '\0', '_');
+ tree2 = dsync_mailbox_tree_init('/', '\0', '_');
node_create(tree1, 1, "1", 1);
struct dsync_mailbox_tree *tree1, *tree2;
test_begin("dsync mailbox tree sync renames 18");
- tree1 = dsync_mailbox_tree_init('/', '_');
- tree2 = dsync_mailbox_tree_init('/', '_');
+ tree1 = dsync_mailbox_tree_init('/', '\0', '_');
+ tree2 = dsync_mailbox_tree_init('/', '\0', '_');
node_create(tree1, 2, "a", 5);
node_create(tree1, 4, "a/c", 2);
struct dsync_mailbox_tree *tree1, *tree2;
test_begin("dsync mailbox tree sync renames 19");
- tree1 = dsync_mailbox_tree_init('/', '_');
- tree2 = dsync_mailbox_tree_init('/', '_');
+ tree1 = dsync_mailbox_tree_init('/', '\0', '_');
+ tree2 = dsync_mailbox_tree_init('/', '\0', '_');
node_create(tree1, 1, "0/2/1", 1);
node_create(tree1, 2, "0/4", 3);
struct dsync_mailbox_tree *tree1, *tree2;
test_begin("dsync mailbox tree sync renames 20");
- tree1 = dsync_mailbox_tree_init('/', '_');
- tree2 = dsync_mailbox_tree_init('/', '_');
+ tree1 = dsync_mailbox_tree_init('/', '\0', '_');
+ tree2 = dsync_mailbox_tree_init('/', '\0', '_');
node_create(tree1, 1, "1", 0);
node_create(tree1, 2, "0", 0);
struct dsync_mailbox_tree *tree1, *tree2;
test_begin("dsync mailbox tree sync renames 21");
- tree1 = dsync_mailbox_tree_init('/', '_');
- tree2 = dsync_mailbox_tree_init('/', '_');
+ tree1 = dsync_mailbox_tree_init('/', '\0', '_');
+ tree2 = dsync_mailbox_tree_init('/', '\0', '_');
node_create(tree1, 1, "INBOX", 0);
node_create(tree1, 2, "foo", 0);
struct dsync_mailbox_tree *tree1, *tree2;
test_begin("dsync mailbox tree sync renames 22");
- tree1 = dsync_mailbox_tree_init('/', '_');
- tree2 = dsync_mailbox_tree_init('/', '_');
+ tree1 = dsync_mailbox_tree_init('/', '\0', '_');
+ tree2 = dsync_mailbox_tree_init('/', '\0', '_');
node_create(tree1, 3, "p/a", 0);
node_create(tree1, 0, "p/2", 0);