From: Timo Sirainen Date: Thu, 14 Jan 2021 10:47:55 +0000 (+0200) Subject: lib-storage: Split off mailbox_list_storage_name_prepare() X-Git-Tag: 2.3.14.rc1~48 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=af18e441c931e7118b693b40aa2935f36092ec75;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Split off mailbox_list_storage_name_prepare() --- diff --git a/src/lib-storage/mailbox-list.c b/src/lib-storage/mailbox-list.c index f40a148686..dd684c3e05 100644 --- a/src/lib-storage/mailbox-list.c +++ b/src/lib-storage/mailbox-list.c @@ -723,38 +723,52 @@ mailbox_list_escape_broken_name(struct mailbox_list *list, } } -const char *mailbox_list_default_get_vname(struct mailbox_list *list, - const char *storage_name) +static bool +mailbox_list_storage_name_prepare(struct mailbox_list *list, + const char **_storage_name) { - size_t i, prefix_len, name_len; - const char *vname = storage_name; - char list_sep, ns_sep, *ret; + const char *name = *_storage_name; if ((list->ns->flags & NAMESPACE_FLAG_INBOX_USER) != 0 && - strcmp(vname, "INBOX") == 0 && + strcmp(name, "INBOX") == 0 && list->ns->user == list->ns->owner) { /* user's INBOX - use as-is. NOTE: don't do case-insensitive comparison, otherwise we can't differentiate between INBOX and /inBox. */ - return vname; + return TRUE; } - if (strcmp(vname, "INBOX") == 0 && + if (strcmp(name, "INBOX") == 0 && list->ns->type == MAIL_NAMESPACE_TYPE_SHARED && (list->ns->flags & NAMESPACE_FLAG_INBOX_ANY) != 0 && !list->mail_set->mail_shared_explicit_inbox) { /* convert to shared/$user, we don't really care about the INBOX suffix here. */ - vname = ""; + name = ""; } - if (*vname == '\0') { + if (name[0] == '\0') { /* return namespace prefix without the separator */ if (list->ns->prefix_len == 0) - return list->ns->prefix; + *_storage_name = list->ns->prefix; else { - return t_strndup(list->ns->prefix, - list->ns->prefix_len - 1); + *_storage_name = + t_strndup(list->ns->prefix, + list->ns->prefix_len - 1); } - } else if (!list->set.utf8) { + return TRUE; + } + return FALSE; +} + +const char *mailbox_list_default_get_vname(struct mailbox_list *list, + const char *storage_name) +{ + size_t i, prefix_len, name_len; + const char *vname = storage_name; + char list_sep, ns_sep, *ret; + + if (mailbox_list_storage_name_prepare(list, &storage_name)) + return storage_name; + if (!list->set.utf8) { /* mUTF-7 -> UTF-8 conversion */ string_t *str = t_str_new(strlen(vname)); if (imap_utf7_to_utf8(vname, str) == 0) {