Another field to parse_ctx will be added, that should be initialized. As initializing the parse_ctx struct gets more involved, move the duplicated code to a separate function. Having a dedicated function, also makes it easier to grep of all the places where a parse context gets set up. Signed-off-by: Thomas Haller <thaller@xxxxxxxxxx> --- src/evaluate.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/evaluate.c b/src/evaluate.c index 1ae2ef0de10c..fdd2433b4780 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -40,6 +40,20 @@ #include <utils.h> #include <xt.h> +static struct parse_ctx *parse_ctx_init(struct parse_ctx *parse_ctx, const struct eval_ctx *ctx) +{ + struct parse_ctx tmp = { + .tbl = &ctx->nft->output.tbl, + .input = &ctx->nft->input, + }; + + /* "tmp" only exists, so we can search for "/struct parse_ctx .*=/" and find the location + * where the parse context gets initialized. */ + + *parse_ctx = tmp; + return parse_ctx; +} + struct proto_ctx *eval_proto_ctx(struct eval_ctx *ctx) { uint8_t idx = ctx->inner_desc ? 1 : 0; @@ -278,15 +292,14 @@ static int flowtable_not_found(struct eval_ctx *ctx, const struct location *loc, */ static int expr_evaluate_symbol(struct eval_ctx *ctx, struct expr **expr) { - struct parse_ctx parse_ctx = { - .tbl = &ctx->nft->output.tbl, - .input = &ctx->nft->input, - }; + struct parse_ctx parse_ctx; struct error_record *erec; struct table *table; struct set *set; struct expr *new; + parse_ctx_init(&parse_ctx, ctx); + switch ((*expr)->symtype) { case SYMBOL_VALUE: datatype_set(*expr, ctx->ectx.dtype); @@ -3454,13 +3467,12 @@ static int stmt_evaluate_reject_default(struct eval_ctx *ctx, static int stmt_evaluate_reject_icmp(struct eval_ctx *ctx, struct stmt *stmt) { - struct parse_ctx parse_ctx = { - .tbl = &ctx->nft->output.tbl, - .input = &ctx->nft->input, - }; + struct parse_ctx parse_ctx; struct error_record *erec; struct expr *code; + parse_ctx_init(&parse_ctx, ctx); + erec = symbol_parse(&parse_ctx, stmt->reject.expr, &code); if (erec != NULL) { erec_queue(erec, ctx->msgs); -- 2.41.0