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,
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 *
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;
}