From: Timo Sirainen Date: Thu, 6 Mar 2025 17:51:08 +0000 (+0200) Subject: lib-storage: Add and use mailbox_list_layout_settings X-Git-Tag: 2.4.1~33 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c52b322531bfdca5423d330ab253158367cd0a6b;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Add and use mailbox_list_layout_settings It only has mailbox_list_layout setting. This is much efficient to lookup than the full large mail_storage_settings. --- diff --git a/src/lib-storage/mail-storage-settings.c b/src/lib-storage/mail-storage-settings.c index 10bee08e37..3de157bacb 100644 --- a/src/lib-storage/mail-storage-settings.c +++ b/src/lib-storage/mail-storage-settings.c @@ -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) diff --git a/src/lib-storage/mail-storage-settings.h b/src/lib-storage/mail-storage-settings.h index 0f3019997e..f7eda27a65 100644 --- a/src/lib-storage/mail-storage-settings.h +++ b/src/lib-storage/mail-storage-settings.h @@ -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; diff --git a/src/lib-storage/mail-storage.c b/src/lib-storage/mail-storage.c index 8127c62743..65f3a40b77 100644 --- a/src/lib-storage/mail-storage.c +++ b/src/lib-storage/mail-storage.c @@ -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);