]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
config: Replace config_module_parser_get_set_parser() with config_fill_set_parser()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Fri, 26 Jan 2024 14:58:38 +0000 (16:58 +0200)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Feb 2025 10:34:11 +0000 (12:34 +0200)
This new way allows calling config_fill_set_parser() multiple times for the
same settings parser. This simplifies the following commits.

src/config/config-parser.c
src/config/config-parser.h
src/config/test-config-parser.c

index cbc793cae04cc8683cdde39a75f4fa2be4ce2157..677b3718559d6574886d2ef9ce11ef7dc5826c03 100644 (file)
@@ -1090,12 +1090,9 @@ config_filter_add_new_filter(struct config_parser_context *ctx,
        return TRUE;
 }
 
-struct setting_parser_context *
-config_module_parser_get_set_parser(const struct config_module_parser *p,
-                                   pool_t pool)
+void config_fill_set_parser(struct setting_parser_context *parser,
+                           const struct config_module_parser *p)
 {
-       struct setting_parser_context *parser =
-               settings_parser_init(pool, p->info, settings_parser_flags);
        for (unsigned int i = 0; p->info->defines[i].key != NULL; i++) {
                if (p->change_counters[i] == 0)
                        continue;
@@ -1138,7 +1135,6 @@ config_module_parser_get_set_parser(const struct config_module_parser *p,
                }
                }
        }
-       return parser;
 }
 
 static void
@@ -1171,7 +1167,9 @@ config_filter_parser_check(struct config_parser_context *ctx,
                        continue;
                p_clear(tmp_pool);
                struct setting_parser_context *tmp_parser =
-                       config_module_parser_get_set_parser(p, tmp_pool);
+                       settings_parser_init(tmp_pool, p->info,
+                                            settings_parser_flags);
+               config_fill_set_parser(tmp_parser, p);
                T_BEGIN {
                        ok = settings_parser_check(tmp_parser, tmp_pool,
                                                   event, &error);
index e0e3d377a71400060d0b918e5d050feea0fb1690..3e954b8f9804cdcaa9a0efb1a009ce51c93cedf9 100644 (file)
@@ -13,6 +13,7 @@
 #define CONFIG_PARSER_CHANGE_EXPLICIT 3
 
 struct config_parsed;
+struct setting_parser_context;
 
 enum config_parse_flags {
        CONFIG_PARSE_FLAG_EXPAND_VALUES = BIT(0),
@@ -79,10 +80,9 @@ config_parsed_get_filter_parsers(struct config_parsed *config);
 /* Returns all module_parsers. The array is terminated with info=NULL. */
 const struct config_module_parser *
 config_parsed_get_module_parsers(struct config_parsed *config);
-/* Return a new setting parser context for the given module parser. */
-struct setting_parser_context *
-config_module_parser_get_set_parser(const struct config_module_parser *p,
-                                   pool_t pool);
+/* Fill settings parser with settings from the given module parser. */
+void config_fill_set_parser(struct setting_parser_context *parser,
+                           const struct config_module_parser *p);
 /* Returns the value for a specified setting. The setting must be found and it
    must be a string, or the function panics. */
 const char *
index 0e064c11541d75ea89bf27063a7b88b917a85d72..f52c883c9943d616902f9c4acd6a62a01debebe1 100644 (file)
@@ -126,9 +126,11 @@ static void test_config_parser(void)
 
        /* get the parsed output */
        pool_t pool = pool_alloconly_create("test settings", 128);
+       const struct config_module_parser *p =
+               config_parsed_get_module_parsers(config);
        struct setting_parser_context *set_parser =
-               config_module_parser_get_set_parser(config_parsed_get_module_parsers(config),
-                                                   pool);
+               settings_parser_init(pool, p->info, 0);
+       config_fill_set_parser(set_parser, p);
        const struct test_settings *set = settings_parser_get_set(set_parser);
        test_assert_strcmp(set->key, "value");
        test_assert_strcmp(set->key2, "\\$escape \\escape \\\"escape\\\"");
@@ -151,8 +153,9 @@ static void test_config_parser(void)
                                      &config, &error) == 1);
 
        p_clear(pool);
-       set_parser = config_module_parser_get_set_parser(
-                       config_parsed_get_module_parsers(config), pool);
+       p = config_parsed_get_module_parsers(config);
+       set_parser = settings_parser_init(pool, p->info, 0);
+       config_fill_set_parser(set_parser, p);
        set = settings_parser_get_set(set_parser);
 
        test_assert_strcmp(set->key, "value");