From 51d659450c1aecdd881c521ab290439d44125156 Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Sun, 28 Jun 2015 21:02:32 +0200 Subject: src: add table declaration to cache Add declared table objects to the cache, thus we can refer to objects that come in this batch but that are not yet available in the kernel. This happens from the evaluation step. Get rid of code that is doing this from the later do_command_*() stage. Signed-off-by: Pablo Neira Ayuso --- src/evaluate.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'src/evaluate.c') diff --git a/src/evaluate.c b/src/evaluate.c index d18b8f63..8b54dbc0 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -1885,6 +1885,19 @@ static int table_evaluate(struct eval_ctx *ctx, struct table *table) struct chain *chain; struct set *set; + if (table_lookup(&ctx->cmd->handle) == NULL) { + if (table == NULL) { + table = table_alloc(); + handle_merge(&table->handle, &ctx->cmd->handle); + table_add_hash(table); + } else { + table_add_hash(table_get(table)); + } + } + + if (ctx->cmd->table == NULL) + return 0; + ctx->table = table; list_for_each_entry(set, &table->sets, list) { handle_merge(&set->handle, &table->handle); @@ -1916,8 +1929,6 @@ static int cmd_evaluate_add(struct eval_ctx *ctx, struct cmd *cmd) return 0; return chain_evaluate(ctx, cmd->chain); case CMD_OBJ_TABLE: - if (cmd->data == NULL) - return 0; return table_evaluate(ctx, cmd->table); default: BUG("invalid command object type %u\n", cmd->obj); -- cgit v1.2.3