From: Timo Sirainen Date: Mon, 3 Apr 2023 21:43:04 +0000 (+0300) Subject: dsync: Refactor dsync_brain_mailbox_to_parts() into dsync_mailbox_name_to_parts() X-Git-Tag: 2.3.21~96 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e69f52d697de0a68a61d4c12563003d38ed6d5e0;p=thirdparty%2Fdovecot%2Fcore.git dsync: Refactor dsync_brain_mailbox_to_parts() into dsync_mailbox_name_to_parts() --- diff --git a/src/doveadm/dsync/dsync-brain-mailbox-tree.c b/src/doveadm/dsync/dsync-brain-mailbox-tree.c index 44b76bf47c..b66cf3edfe 100644 --- a/src/doveadm/dsync/dsync-brain-mailbox-tree.c +++ b/src/doveadm/dsync/dsync-brain-mailbox-tree.c @@ -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; diff --git a/src/doveadm/dsync/dsync-mailbox-tree.c b/src/doveadm/dsync/dsync-mailbox-tree.c index e34f335e47..941ddbb221 100644 --- a/src/doveadm/dsync/dsync-mailbox-tree.c +++ b/src/doveadm/dsync/dsync-mailbox-tree.c @@ -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; +} diff --git a/src/doveadm/dsync/dsync-mailbox-tree.h b/src/doveadm/dsync/dsync-mailbox-tree.h index 69698132ab..526be182af 100644 --- a/src/doveadm/dsync/dsync-mailbox-tree.h +++ b/src/doveadm/dsync/dsync-mailbox-tree.h @@ -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,