]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
dsync: Refactor dsync_brain_mailbox_to_parts() into dsync_mailbox_name_to_parts()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 3 Apr 2023 21:43:04 +0000 (00:43 +0300)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Wed, 5 Apr 2023 18:37:43 +0000 (18:37 +0000)
src/doveadm/dsync/dsync-brain-mailbox-tree.c
src/doveadm/dsync/dsync-mailbox-tree.c
src/doveadm/dsync/dsync-mailbox-tree.h

index b26afc263e9722438b34a2debb554ab133a233f3..a5044649f91b92c2f101575d3fd7e87b53aae128 100644 (file)
@@ -83,18 +83,6 @@ void dsync_brain_mailbox_trees_init(struct dsync_brain *brain)
                dsync_mailbox_tree_iter_init(brain->local_mailbox_tree);
 }
 
-static const char *const *
-dsync_brain_mailbox_to_parts(struct dsync_brain *brain, const char *name)
-{
-       char sep[] = { brain->hierarchy_sep, '\0' };
-       char **parts = p_strsplit(unsafe_data_stack_pool, name, sep);
-       for (unsigned int i = 0; parts[i] != NULL; i++) {
-               mailbox_list_name_unescape((const char **)&parts[i],
-                                          brain->escape_char);
-       }
-       return (const char *const *)parts;
-}
-
 void dsync_brain_send_mailbox_tree(struct dsync_brain *brain)
 {
        struct dsync_mailbox_node *node;
@@ -120,7 +108,8 @@ void dsync_brain_send_mailbox_tree(struct dsync_brain *brain)
                        e_debug(brain->event, "Local mailbox tree: %s %s",
                                full_name, dsync_mailbox_node_to_string(node));
 
-                       parts = dsync_brain_mailbox_to_parts(brain, full_name);
+                       parts = dsync_mailbox_name_to_parts(full_name, brain->hierarchy_sep,
+                                                           brain->escape_char);
                        ret = dsync_ibc_send_mailbox_tree_node(brain->ibc,
                                                               parts, node);
                } T_END;
index e34f335e472af57f70423c41bf1c2683df2a8657..941ddbb22179862a1fd1d37b1632bd23290f351b 100644 (file)
@@ -552,3 +552,18 @@ dsync_mailbox_delete_type_to_string(enum dsync_mailbox_delete_type type)
        }
        i_unreached();
 }
+
+const char *const *
+dsync_mailbox_name_to_parts(const char *name, char hierarchy_sep,
+                           char escape_char)
+{
+       const char sep[] = { hierarchy_sep, '\0' };
+       char **parts = p_strsplit(unsafe_data_stack_pool, name, sep);
+       if (escape_char != '\0') {
+               for (unsigned int i = 0; parts[i] != NULL; i++) {
+                       mailbox_list_name_unescape((const char **)&parts[i],
+                                                  escape_char);
+               }
+       }
+       return (const char *const *)parts;
+}
index 310c4864ce1dd1ef00df7f51606bbced91417c05..f3b4f66098bb87c2a76e85119a51c8f39870c2d7 100644 (file)
@@ -140,6 +140,11 @@ void dsync_mailbox_node_append_full_name(string_t *str,
 void dsync_mailbox_node_copy_data(struct dsync_mailbox_node *dest,
                                  const struct dsync_mailbox_node *src);
 
+/* Split mailbox name into its hierarchical parts. The mailbox name is
+   unescaped if the escape_char is not '\0'. */
+const char *const *
+dsync_mailbox_name_to_parts(const char *name, char hierarchy_sep,
+                           char escape_char);
 /* Add nodes to tree from the given namespace. If box_name or box_guid is
    non-NULL, add only that mailbox to the tree. */
 int dsync_mailbox_tree_fill(struct dsync_mailbox_tree *tree,