]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: mailbox_list_create() - Add mail_storage_settings parameter
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Fri, 27 Oct 2023 12:16:41 +0000 (15:16 +0300)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Feb 2025 10:34:10 +0000 (12:34 +0200)
src/lib-storage/index/imapc/imapc-list.c
src/lib-storage/mail-storage.c
src/lib-storage/mailbox-list.c
src/lib-storage/mailbox-list.h

index 878e6661a18cecaa4966206f2572e93d5cbb5363..9876c268d67fce081b52eaa4f7cf5f158e6e2445 100644 (file)
@@ -435,7 +435,8 @@ static struct mailbox_list *imapc_list_get_fs(struct imapc_mailbox_list *list)
 
                struct event *event = event_create(list->list.event);
                if (mailbox_list_create(list_set.layout, event, list->list.ns,
-                                       &list_set, MAILBOX_LIST_FLAG_SECONDARY,
+                                       &list_set, list->list.mail_set,
+                                       MAILBOX_LIST_FLAG_SECONDARY,
                                        &list->index_list, &error) < 0) {
                        e_error(list->list.event,
                                "imapc: Couldn't create %s mailbox list: %s",
index 1630de3b275195d999eb1b1e8bdbc71fe4bb8c97..be2ac155e434688c2617fa854f4025e94f4a6abc 100644 (file)
@@ -367,15 +367,23 @@ mail_storage_create_list(struct mail_namespace *ns,
        event_set_ptr(event, SETTINGS_EVENT_FILTER_NAME,
                      (void *)storage_class->name);
        event_add_str(event, "namespace", ns->set->name);
-       if (mailbox_list_create(list_set->layout, event, ns, list_set,
-                               list_flags, &list, error_r) < 0) {
-               *error_r = t_strdup_printf("Mailbox list driver %s: %s",
-                                          list_set->layout, *error_r);
+
+       const struct mail_storage_settings *mail_set;
+       if (settings_get(event, &mail_storage_setting_parser_info, 0,
+                        &mail_set, error_r) < 0) {
                event_unref(&event);
                return -1;
        }
+
+       int ret = mailbox_list_create(list_set->layout, event, ns, list_set,
+                                     mail_set, list_flags, &list, error_r);
+       if (ret < 0) {
+               *error_r = t_strdup_printf("Mailbox list driver %s: %s",
+                                          list_set->layout, *error_r);
+       }
+       settings_free(mail_set);
        event_unref(&event);
-       return 0;
+       return ret;
 }
 
 static int
index 054e248af2df4133daf6dd2bad3ab167692dfef9..72c0f737e071bba55e0ae3592c2b980756722b66 100644 (file)
@@ -106,11 +106,11 @@ mailbox_list_find_class(const char *driver)
 int mailbox_list_create(const char *driver, struct event *event,
                        struct mail_namespace *ns,
                        const struct mailbox_list_settings *set,
+                       const struct mail_storage_settings *mail_set,
                        enum mailbox_list_flags flags,
                        struct mailbox_list **list_r, const char **error_r)
 {
        const struct mailbox_list *class;
-       const struct mail_storage_settings *mail_set;
        struct mailbox_list *list;
 
        i_assert(ns->list == NULL ||
@@ -132,10 +132,6 @@ int mailbox_list_create(const char *driver, struct event *event,
                return -1;
        }
 
-       if (settings_get(event, &mail_storage_setting_parser_info, 0,
-                        &mail_set, error_r) < 0)
-               return -1;
-
        i_assert(set->root_dir == NULL || *set->root_dir != '\0' ||
                 (class->props & MAILBOX_LIST_PROP_NO_ROOT) != 0);
 
index 62ca8fcd44303847b0ae7e61194b0c8864371fb8..fecf633f28670e0a4cc25a3bc904a9f93e8666aa 100644 (file)
@@ -13,6 +13,7 @@ struct fs;
 struct mail_namespace;
 struct mail_storage;
 struct mailbox_list;
+struct mail_storage_settings;
 
 enum mailbox_list_properties {
        /* maildir_name must always be empty */
@@ -193,6 +194,7 @@ mailbox_list_find_class(const char *driver);
 int mailbox_list_create(const char *driver, struct event *event,
                        struct mail_namespace *ns,
                        const struct mailbox_list_settings *set,
+                       const struct mail_storage_settings *mail_set,
                        enum mailbox_list_flags flags,
                        struct mailbox_list **list_r, const char **error_r);
 void mailbox_list_destroy(struct mailbox_list **list);