From: Timo Sirainen Date: Wed, 3 May 2023 09:57:33 +0000 (+0300) Subject: config: Move global filter parsers duplication code X-Git-Tag: 2.4.0~2097 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6b6a277155ca5b50b166c684fd97b4ea24a6cbae;p=thirdparty%2Fdovecot%2Fcore.git config: Move global filter parsers duplication code --- diff --git a/src/config/config-filter.c b/src/config/config-filter.c index b161ac258d..c3e95f3b89 100644 --- a/src/config/config-filter.c +++ b/src/config/config-filter.c @@ -189,22 +189,10 @@ config_filter_find_subset(struct config_filter_context *ctx) return array_front(&matches); } -struct config_module_parser * -config_filter_parsers_dup(struct config_filter_context *ctx, pool_t pool) +struct config_filter_parser * +config_filter_parser_get_global_filter(struct config_filter_context *ctx) { - const struct config_filter_parser *global_filter; - struct config_module_parser *dest; - unsigned int i, count; - - global_filter = ctx->parsers[0]; - for (count = 0; global_filter->parsers[count].root != NULL; count++) ; - dest = p_new(pool, struct config_module_parser, count + 1); - for (i = 0; i < count; i++) { - dest[i] = global_filter->parsers[i]; - dest[i].parser = - settings_parser_dup(global_filter->parsers[i].parser, pool); - } - return dest; + return ctx->parsers[0]; } void config_filter_add_error(struct config_filter_context *ctx, diff --git a/src/config/config-filter.h b/src/config/config-filter.h index 94f91b43fd..79e036066c 100644 --- a/src/config/config-filter.h +++ b/src/config/config-filter.h @@ -37,9 +37,8 @@ void config_filter_add_error(struct config_filter_context *ctx, const ARRAY_TYPE(const_string) * config_filter_get_errors(struct config_filter_context *ctx); -/* Duplicate current parsers. */ -struct config_module_parser * -config_filter_parsers_dup(struct config_filter_context *ctx, pool_t pool); +struct config_filter_parser * +config_filter_parser_get_global_filter(struct config_filter_context *ctx); /* Return a list of filters that are a subset of the given filter. */ struct config_filter_parser *const * diff --git a/src/config/config-request.c b/src/config/config-request.c index 08cfc1dde3..49e6fd5dd5 100644 --- a/src/config/config-request.c +++ b/src/config/config-request.c @@ -397,10 +397,29 @@ config_export_init(enum config_dump_scope scope, return ctx; } +static struct config_module_parser * +config_filter_parsers_dup(pool_t pool, struct config_filter_parser *global_filter) +{ + struct config_module_parser *dest; + unsigned int i, count; + + for (count = 0; global_filter->parsers[count].root != NULL; count++) ; + dest = p_new(pool, struct config_module_parser, count + 1); + for (i = 0; i < count; i++) { + dest[i] = global_filter->parsers[i]; + dest[i].parser = + settings_parser_dup(global_filter->parsers[i].parser, pool); + } + return dest; +} + void config_export_dup_parsers(struct config_export_context *ctx, struct config_filter_context *config_filter) { - ctx->dup_parsers = config_filter_parsers_dup(config_filter, ctx->pool); + struct config_filter_parser *global_filter = + config_filter_parser_get_global_filter(config_filter); + + ctx->dup_parsers = config_filter_parsers_dup(ctx->pool, global_filter); ctx->parsers = ctx->dup_parsers; }