]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
imapc: Move settings initialization to imapc_storage_client_create()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 12 Jan 2023 23:10:10 +0000 (01:10 +0200)
committerTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 20 Nov 2023 12:20:16 +0000 (14:20 +0200)
src/lib-storage/index/imapc/imapc-list.c
src/lib-storage/index/imapc/imapc-list.h
src/lib-storage/index/imapc/imapc-storage.c
src/lib-storage/index/imapc/imapc-storage.h

index e184ee1e1f68a983627262a67d53d30626ec441b..1275f50368cf5b534baca135e3c9d0196d9a6ae8 100644 (file)
@@ -95,12 +95,11 @@ static int imapc_list_init(struct mailbox_list *_list, const char **error_r)
 {
        struct imapc_mailbox_list *list = (struct imapc_mailbox_list *)_list;
 
-       list->set = settings_parser_get_root_set(_list->ns->user->set_parser,
-                                                imapc_get_setting_parser_info());
-       if (imapc_storage_client_create(_list->ns, list->set,
+       if (imapc_storage_client_create(_list->ns,
                                        &list->client, error_r) < 0)
                return -1;
        list->client->_list = list;
+       list->set = list->client->set;
 
        imapc_storage_client_register_untagged(list->client, "LIST",
                                               imapc_untagged_list);
index 11df6b08b3e6f7b93e804f24f1f498b257c65c2e..b268fcb72bf5df9ce3e956d557fc73c2e5b21bb2 100644 (file)
@@ -9,7 +9,7 @@ struct imap_arg;
 
 struct imapc_mailbox_list {
        struct mailbox_list list;
-       const struct imapc_settings *set;
+       const struct imapc_settings *set; /* points to client->set */
        struct imapc_storage_client *client;
        struct mailbox_list *index_list;
 
index d25103c8abcdc77914ab134928067194901fe2c6..c5573ccf3204a32169600b0828af9e3bd26b4f64 100644 (file)
@@ -307,14 +307,17 @@ static void imapc_storage_client_login(struct imapc_storage_client *client,
 }
 
 int imapc_storage_client_create(struct mail_namespace *ns,
-                               const struct imapc_settings *imapc_set,
                                struct imapc_storage_client **client_r,
                                const char **error_r)
 {
+       const struct imapc_settings *imapc_set;
        struct imapc_storage_client *client;
        struct imapc_client_settings set;
        string_t *str;
 
+       imapc_set = settings_parser_get_root_set(ns->user->set_parser,
+               imapc_get_setting_parser_info());
+
        i_zero(&set);
        set.host = imapc_set->imapc_host;
        if (*set.host == '\0') {
@@ -371,6 +374,7 @@ int imapc_storage_client_create(struct mail_namespace *ns,
 
        client = i_new(struct imapc_storage_client, 1);
        client->refcount = 1;
+       client->set = imapc_set;
        i_array_init(&client->untagged_callbacks, 16);
        /* FIXME: storage->event would be better, but we first get here when
           creating mailbox_list, and storage doesn't even exist yet. */
@@ -416,8 +420,21 @@ imapc_storage_create(struct mail_storage *_storage,
        struct imapc_storage *storage = IMAPC_STORAGE(_storage);
        struct imapc_mailbox_list *imapc_list = NULL;
 
-       storage->set = settings_parser_get_root_set(_storage->user->set_parser,
-               imapc_get_setting_parser_info());
+       if (strcmp(ns->list->name, MAILBOX_LIST_NAME_IMAPC) == 0) {
+               imapc_list = (struct imapc_mailbox_list *)ns->list;
+               storage->client = imapc_list->client;
+               storage->client->refcount++;
+       } else {
+               if (imapc_storage_client_create(ns, &storage->client, error_r) < 0)
+                       return -1;
+       }
+       storage->client->_storage = storage;
+       storage->set = storage->client->set;
+       p_array_init(&storage->remote_namespaces, _storage->pool, 4);
+       if (!IMAPC_HAS_FEATURE(storage, IMAPC_FEATURE_NO_FETCH_BODYSTRUCTURE)) {
+               _storage->nonbody_access_fields |=
+                       MAIL_FETCH_IMAP_BODY | MAIL_FETCH_IMAP_BODYSTRUCTURE;
+       }
 
        /* serialize all the settings */
        _storage->unique_root_dir = p_strdup_printf(_storage->pool,
@@ -441,22 +458,6 @@ imapc_storage_create(struct mail_storage *_storage,
                                                    storage->set->pop3_deleted_flag,
                                                    ns->list->set.root_dir);
 
-       if (strcmp(ns->list->name, MAILBOX_LIST_NAME_IMAPC) == 0) {
-               imapc_list = (struct imapc_mailbox_list *)ns->list;
-               storage->client = imapc_list->client;
-               storage->client->refcount++;
-       } else {
-               if (imapc_storage_client_create(ns, storage->set,
-                                               &storage->client, error_r) < 0)
-                       return -1;
-       }
-       storage->client->_storage = storage;
-       p_array_init(&storage->remote_namespaces, _storage->pool, 4);
-       if (!IMAPC_HAS_FEATURE(storage, IMAPC_FEATURE_NO_FETCH_BODYSTRUCTURE)) {
-               _storage->nonbody_access_fields |=
-                       MAIL_FETCH_IMAP_BODY | MAIL_FETCH_IMAP_BODYSTRUCTURE;
-       }
-
        imapc_storage_client_register_untagged(storage->client, "STATUS",
                                               imapc_untagged_status);
        imapc_storage_client_register_untagged(storage->client, "NAMESPACE",
index a37fdc26536b35c15dc1648f6336a9077de029b7..c6f6c2b24c0c5e9b73e9263b1a0a48eedfcfe921 100644 (file)
@@ -59,6 +59,7 @@ struct imapc_storage_client {
        struct imapc_mailbox_list *_list;
 
        struct imapc_client *client;
+       const struct imapc_settings *set;
 
        ARRAY(struct imapc_storage_event_callback) untagged_callbacks;
 
@@ -74,7 +75,7 @@ struct imapc_storage_client {
 
 struct imapc_storage {
        struct mail_storage storage;
-       const struct imapc_settings *set;
+       const struct imapc_settings *set; /* points to client->set */
 
        struct ioloop *root_ioloop;
        struct imapc_storage_client *client;
@@ -199,7 +200,6 @@ struct imapc_simple_context {
 #define IMAPC_MAILBOX(s)       container_of(s, struct imapc_mailbox, box)
 
 int imapc_storage_client_create(struct mail_namespace *ns,
-                               const struct imapc_settings *imapc_set,
                                struct imapc_storage_client **client_r,
                                const char **error_r);
 void imapc_storage_client_unref(struct imapc_storage_client **client);