]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Split off mailbox_list_storage_name_prepare()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 14 Jan 2021 10:47:55 +0000 (12:47 +0200)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Wed, 3 Feb 2021 09:04:22 +0000 (09:04 +0000)
src/lib-storage/mailbox-list.c

index f40a1486867f0859d00a497203da868758186f20..dd684c3e055a4d7cf66e07e859b731f34b0965e3 100644 (file)
@@ -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 <ns prefix>/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) {