]> 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)
committerMarkus Valentin <markus.valentin@open-xchange.com>
Thu, 6 Apr 2023 10:54:54 +0000 (12:54 +0200)
src/doveadm/dsync/dsync-brain-mailbox-tree.c
src/doveadm/dsync/dsync-mailbox-tree.c
src/doveadm/dsync/dsync-mailbox-tree.h

index 44b76bf47ce34ef863202173dd399ca71a57fc7c..b66cf3edfe9f685b4765e01c786452dc2765c48d 100644 (file)
@@ -84,18 +84,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;
@@ -124,7 +112,8 @@ void dsync_brain_send_mailbox_tree(struct dsync_brain *brain)
                                        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 69698132ab9630286bc2bee75cdda126749b16b7..526be182af6654f75cf628c8529acf7d76bc43e5 100644 (file)
@@ -144,6 +144,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,