From: Timo Sirainen Date: Wed, 28 Aug 2024 01:39:28 +0000 (+0300) Subject: lib-storage: Splitt off mailbox_settings_get_vname() X-Git-Tag: 2.4.1~642 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0c6da61412c849f36058cbf12f0d97117f8657ce;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Splitt off mailbox_settings_get_vname() --- diff --git a/src/lib-storage/list/mailbox-list-iter.c b/src/lib-storage/list/mailbox-list-iter.c index eea9115aef..b472cd81e8 100644 --- a/src/lib-storage/list/mailbox-list-iter.c +++ b/src/lib-storage/list/mailbox-list-iter.c @@ -84,20 +84,15 @@ static const struct mailbox_settings * mailbox_settings_add_ns_prefix(pool_t pool, struct mail_namespace *ns, const struct mailbox_settings *in_set) { - struct mailbox_settings *out_set; + const char *vname; - if (ns->prefix_len == 0 || strcasecmp(in_set->name, "INBOX") == 0) + vname = mailbox_settings_get_vname(pool, ns, in_set); + if (vname == in_set->name) return in_set; - out_set = p_new(pool, struct mailbox_settings, 1); - *out_set = *in_set; - if (*in_set->name == '\0') { - /* namespace prefix itself */ - out_set->name = p_strndup(pool, ns->prefix, ns->prefix_len-1); - } else { - out_set->name = - p_strconcat(pool, ns->prefix, in_set->name, NULL); - } + struct mailbox_settings *out_set = + p_memdup(pool, in_set, sizeof(*in_set)); + out_set->name = vname; return out_set; } diff --git a/src/lib-storage/mail-storage-settings.c b/src/lib-storage/mail-storage-settings.c index 8733ba5d6d..94ce15ce0f 100644 --- a/src/lib-storage/mail-storage-settings.c +++ b/src/lib-storage/mail-storage-settings.c @@ -1070,3 +1070,18 @@ void mail_storage_2nd_settings_reset(struct settings_instance *instance, } } T_END; } + +const char * +mailbox_settings_get_vname(pool_t pool, const struct mail_namespace *ns, + const struct mailbox_settings *set) +{ + if (ns->prefix_len == 0 || strcasecmp(set->name, "INBOX") == 0) + return set->name; + + if (*set->name == '\0') { + /* namespace prefix itself */ + return p_strndup(pool, ns->prefix, ns->prefix_len-1); + } else { + return p_strconcat(pool, ns->prefix, set->name, NULL); + } +} diff --git a/src/lib-storage/mail-storage-settings.h b/src/lib-storage/mail-storage-settings.h index c4dd5b79a0..f4a1ba20c7 100644 --- a/src/lib-storage/mail-storage-settings.h +++ b/src/lib-storage/mail-storage-settings.h @@ -209,6 +209,11 @@ bool mail_user_set_get_postmaster_smtp(const struct mail_user_settings *set, void mail_storage_2nd_settings_reset(struct settings_instance *instance, const char *key_prefix); +/* Return mailbox_settings->name as vname (with namespace prefix). */ +const char * +mailbox_settings_get_vname(pool_t pool, const struct mail_namespace *ns, + const struct mailbox_settings *set); + bool mail_user_settings_update_special_use(struct mail_user *user, const struct mail_storage_settings *set, const char **error_r);