]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Add and use mailbox_list_layout_settings
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 6 Mar 2025 17:51:08 +0000 (19:51 +0200)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Mar 2025 13:01:57 +0000 (13:01 +0000)
It only has mailbox_list_layout setting. This is much efficient to lookup
than the full large mail_storage_settings.

src/lib-storage/mail-storage-settings.c
src/lib-storage/mail-storage-settings.h
src/lib-storage/mail-storage.c

index 10bee08e3742bc4620444fc3f655662035ff31ac..3de157bacb4508e959625aabc91b96ea53b9b03b 100644 (file)
@@ -247,6 +247,29 @@ const struct setting_parser_info mail_driver_setting_parser_info = {
        .pool_offset1 = 1 + offsetof(struct mail_driver_settings, pool),
 };
 
+#undef DEF
+#define DEF(type, name) \
+       SETTING_DEFINE_STRUCT_##type(#name, name, struct mailbox_list_layout_settings)
+
+static const struct setting_define mailbox_list_layout_setting_defines[] = {
+       DEF(STR, mailbox_list_layout),
+       SETTING_DEFINE_LIST_END
+};
+
+const struct mailbox_list_layout_settings mailbox_list_layout_default_settings = {
+       .mailbox_list_layout = "fs",
+};
+
+const struct setting_parser_info mailbox_list_layout_setting_parser_info = {
+       .name = "mailbox_list_layout",
+
+       .defines = mailbox_list_layout_setting_defines,
+       .defaults = &mailbox_list_layout_default_settings,
+
+       .struct_size = sizeof(struct mailbox_list_layout_settings),
+       .pool_offset1 = 1 + offsetof(struct mailbox_list_layout_settings, pool),
+};
+
 #undef DEF
 #define DEF(type, name) \
        SETTING_DEFINE_STRUCT_##type("mailbox_"#name, name, struct mailbox_settings)
index 0f3019997e5832a549043940bcfa4564985ebfc2..f7eda27a655a23c437b7f43b6f1011dee9e7a8a3 100644 (file)
@@ -21,6 +21,11 @@ struct mail_driver_settings {
        const char *mail_driver;
 };
 
+struct mailbox_list_layout_settings {
+       pool_t pool;
+       const char *mailbox_list_layout;
+};
+
 struct mail_storage_settings {
        pool_t pool;
        const char *mail_driver;
@@ -193,6 +198,7 @@ struct mail_user_settings {
 extern const struct setting_parser_info mail_user_setting_parser_info;
 extern const struct setting_parser_info mail_namespace_setting_parser_info;
 extern const struct setting_parser_info mail_driver_setting_parser_info;
+extern const struct setting_parser_info mailbox_list_layout_setting_parser_info;
 extern const struct setting_parser_info mail_storage_setting_parser_info;
 extern const struct setting_parser_info mailbox_setting_parser_info;
 extern const struct mail_namespace_settings mail_namespace_default_settings;
index 8127c627433a4a2368a509aef65e502293e80516..65f3a40b7721a3bfc78e96fdb757ca3635707e94 100644 (file)
@@ -357,9 +357,9 @@ mail_storage_create_list(struct mail_namespace *ns,
                                  SETTINGS_OVERRIDE_TYPE_CODE);
        }
 
-       const struct mail_storage_settings *mail_set;
-       if (settings_get(set_event, &mail_storage_setting_parser_info, 0,
-                        &mail_set, error_r) < 0) {
+       const struct mailbox_list_layout_settings *layout_set;
+       if (settings_get(set_event, &mailbox_list_layout_setting_parser_info, 0,
+                        &layout_set, error_r) < 0) {
                event_unref(&set_event);
                return -1;
        }
@@ -369,8 +369,8 @@ mail_storage_create_list(struct mail_namespace *ns,
        event_unref(&set_event);
        set_event = set_event2;
        settings_event_add_filter_name(set_event, t_strdup_printf("layout_%s",
-               t_str_lcase(mail_set->mailbox_list_layout)));
-       settings_free(mail_set);
+               t_str_lcase(layout_set->mailbox_list_layout)));
+       settings_free(layout_set);
 
        if (root_path_override != NULL) {
                mail_storage_create_ns_instance(ns, set_event);
@@ -385,6 +385,7 @@ mail_storage_create_list(struct mail_namespace *ns,
                                  SETTINGS_OVERRIDE_TYPE_CODE);
        }
 
+       const struct mail_storage_settings *mail_set;
        if (settings_get(set_event, &mail_storage_setting_parser_info, 0,
                         &mail_set, error_r) < 0) {
                event_unref(&set_event);