]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-settings: Add settings_defaults_dup()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 10 Sep 2024 14:23:37 +0000 (17:23 +0300)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Feb 2025 10:34:13 +0000 (12:34 +0200)
src/lib-settings/settings-parser.c
src/lib-settings/settings-parser.h

index e0c004391ee18c1b6f289e074f0c4ef26014b022..b59f69b4eb062cc8505569b48ec063ebad828cb4 100644 (file)
@@ -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) \
index 7a7555a0bbb8824e67cd58c5728dfbc945477cff..3c131701ce2c6c25c768a31b1f35df779a7eba41 100644 (file)
@@ -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);