]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
evaluate: use recursive call for SET_REF handling
authorFlorian Westphal <fw@strlen.de>
Mon, 2 Apr 2018 19:26:07 +0000 (21:26 +0200)
committerFlorian Westphal <fw@strlen.de>
Tue, 3 Apr 2018 13:15:17 +0000 (15:15 +0200)
We can now call the helper again, with set->init as new RHS expression.

Signed-off-by: Florian Westphal <fw@strlen.de>
src/evaluate.c

index d03bfb067a3be79a57e7fa2d3063fcd6fb03cbc7..efdbb5e516eea2f98a8566dcfe296eaf4e3c5997 100644 (file)
@@ -1552,35 +1552,7 @@ static int __binop_transfer(struct eval_ctx *ctx,
                }
                break;
        case EXPR_SET_REF:
-               list_for_each_entry(i, &(*right)->set->init->expressions, list) {
-                       switch (i->key->ops->type) {
-                       case EXPR_VALUE:
-                       case EXPR_RANGE:
-                       case EXPR_SET_ELEM:
-                               err = binop_can_transfer(ctx, left, i->key);
-                               if (err <= 0)
-                                       return err;
-                               break;
-                       default:
-                               break;
-                       }
-               }
-               list_for_each_entry_safe(i, next, &(*right)->set->init->expressions,
-                                        list) {
-                       list_del(&i->list);
-                       switch (i->key->ops->type) {
-                       case EXPR_VALUE:
-                       case EXPR_RANGE:
-                       case EXPR_SET_ELEM:
-                               if (binop_transfer_one(ctx, left, &i->key) < 0)
-                                       return -1;
-                               break;
-                       default:
-                               break;
-                       }
-                       list_add_tail(&i->list, &next->list);
-               }
-               break;
+               return __binop_transfer(ctx, left, &(*right)->set->init);
        default:
                return 0;
        }