56 lines
1.8 KiB
Diff
56 lines
1.8 KiB
Diff
|
From 119fbcbd8c37aac314d6ffa6225ab24ee4b0e31e Mon Sep 17 00:00:00 2001
|
||
|
From: Phil Sutter <psutter@redhat.com>
|
||
|
Date: Tue, 30 Jun 2020 16:20:23 +0200
|
||
|
Subject: [PATCH] segtree: Use expr_clone in get_set_interval_*()
|
||
|
|
||
|
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1832235
|
||
|
Upstream Status: nftables commit a2eedcc89d2ed
|
||
|
|
||
|
commit a2eedcc89d2ed40411c26d53579300c4f1ccb83d
|
||
|
Author: Phil Sutter <phil@nwl.cc>
|
||
|
Date: Thu Apr 30 13:45:40 2020 +0200
|
||
|
|
||
|
segtree: Use expr_clone in get_set_interval_*()
|
||
|
|
||
|
Both functions perform interval set lookups with either start and end or
|
||
|
only start values as input. Interestingly, in practice they either see
|
||
|
values which are not contained or which match an existing range exactly.
|
||
|
|
||
|
Make use of the above and just return a clone of the matching entry
|
||
|
instead of creating a new one based on input data.
|
||
|
|
||
|
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||
|
---
|
||
|
src/segtree.c | 8 ++------
|
||
|
1 file changed, 2 insertions(+), 6 deletions(-)
|
||
|
|
||
|
diff --git a/src/segtree.c b/src/segtree.c
|
||
|
index 1ba4363..dc4db6b 100644
|
||
|
--- a/src/segtree.c
|
||
|
+++ b/src/segtree.c
|
||
|
@@ -695,9 +695,7 @@ static struct expr *get_set_interval_find(const struct table *table,
|
||
|
range_expr_value_high(high, i);
|
||
|
if (mpz_cmp(left->key->value, low) >= 0 &&
|
||
|
mpz_cmp(right->key->value, high) <= 0) {
|
||
|
- range = range_expr_alloc(&internal_location,
|
||
|
- expr_clone(left->key),
|
||
|
- expr_clone(right->key));
|
||
|
+ range = expr_clone(i->key);
|
||
|
goto out;
|
||
|
}
|
||
|
break;
|
||
|
@@ -729,9 +727,7 @@ static struct expr *get_set_interval_end(const struct table *table,
|
||
|
case EXPR_RANGE:
|
||
|
range_expr_value_low(low, i);
|
||
|
if (mpz_cmp(low, left->key->value) == 0) {
|
||
|
- range = range_expr_alloc(&internal_location,
|
||
|
- expr_clone(left->key),
|
||
|
- expr_clone(i->key->right));
|
||
|
+ range = expr_clone(i->key);
|
||
|
goto out;
|
||
|
}
|
||
|
break;
|
||
|
--
|
||
|
1.8.3.1
|
||
|
|