From: Timo Sirainen Date: Tue, 10 Sep 2024 14:23:37 +0000 (+0300) Subject: lib-settings: Add settings_defaults_dup() X-Git-Tag: 2.4.1~713 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=780eb1cc5adac0c699193fb30488afcc6ae41408;p=thirdparty%2Fdovecot%2Fcore.git lib-settings: Add settings_defaults_dup() --- diff --git a/src/lib-settings/settings-parser.c b/src/lib-settings/settings-parser.c index e0c004391e..b59f69b4eb 100644 --- a/src/lib-settings/settings-parser.c +++ b/src/lib-settings/settings-parser.c @@ -1100,6 +1100,14 @@ bool settings_equal(const struct setting_parser_info *info, return TRUE; } +void *settings_defaults_dup(pool_t pool, const struct setting_parser_info *info) +{ + void *dup = p_malloc(pool, info->struct_size); + memcpy(dup, info->defaults, info->struct_size); + memcpy(PTR_OFFSET(dup, info->pool_offset1 - 1), &pool, sizeof(pool)); + return dup; +} + const char *settings_section_escape(const char *name) { #define CHAR_NEED_ESCAPE(c) \ diff --git a/src/lib-settings/settings-parser.h b/src/lib-settings/settings-parser.h index 7a7555a0bb..3c131701ce 100644 --- a/src/lib-settings/settings-parser.h +++ b/src/lib-settings/settings-parser.h @@ -290,6 +290,10 @@ bool settings_equal(const struct setting_parser_info *info, const void *set1, const void *set2, const char *const *except_fields); +/* Allocate a new instance of a settings struct filled with the default + settings. */ +void *settings_defaults_dup(pool_t pool, const struct setting_parser_info *info); + /* Return section name escaped */ const char *settings_section_escape(const char *name); const char *settings_section_unescape(const char *name);