]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
optimize: wrap code to build concatenation in helper function
authorPablo Neira Ayuso <pablo@netfilter.org>
Thu, 2 Feb 2023 17:15:22 +0000 (18:15 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Thu, 2 Nov 2023 10:56:19 +0000 (11:56 +0100)
commit 9dbbf397b2f3d9fa40454648cb98c13c7c5515b7 upstream.

Move code to build concatenations into helper function, this routine
includes support for expansion of implicit sets containing singleton
values. This is preparation work to reuse existing code in a follow up
patch.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/optimize.c

index d592aee02e14e7590ebe97f86b1e1cc2886b3d5d..c4f5b00854c0ef9989a7c6e9208fab97d6fd2c4b 100644 (file)
@@ -550,20 +550,19 @@ static void merge_stmts(const struct optimize_ctx *ctx,
        }
 }
 
-static void __merge_concat_stmts(const struct optimize_ctx *ctx, uint32_t i,
-                                const struct merge *merge, struct expr *set)
+static void __merge_concat(const struct optimize_ctx *ctx, uint32_t i,
+                          const struct merge *merge, struct list_head *concat_list)
 {
-       struct expr *concat, *next, *expr, *concat_clone, *clone, *elem;
+       struct expr *concat, *next, *expr, *concat_clone, *clone;
        LIST_HEAD(pending_list);
-       LIST_HEAD(concat_list);
        struct stmt *stmt_a;
        uint32_t k;
 
        concat = concat_expr_alloc(&internal_location);
-       list_add(&concat->list, &concat_list);
+       list_add(&concat->list, concat_list);
 
        for (k = 0; k < merge->num_stmts; k++) {
-               list_for_each_entry_safe(concat, next, &concat_list, list) {
+               list_for_each_entry_safe(concat, next, concat_list, list) {
                        stmt_a = ctx->stmt_matrix[i][merge->stmt[k]];
                        switch (stmt_a->expr->right->etype) {
                        case EXPR_SET:
@@ -588,8 +587,17 @@ static void __merge_concat_stmts(const struct optimize_ctx *ctx, uint32_t i,
                                break;
                        }
                }
-               list_splice_init(&pending_list, &concat_list);
+               list_splice_init(&pending_list, concat_list);
        }
+}
+
+static void __merge_concat_stmts(const struct optimize_ctx *ctx, uint32_t i,
+                                const struct merge *merge, struct expr *set)
+{
+       struct expr *concat, *next, *elem;
+       LIST_HEAD(concat_list);
+
+       __merge_concat(ctx, i, merge, &concat_list);
 
        list_for_each_entry_safe(concat, next, &concat_list, list) {
                list_del(&concat->list);