diff options
author | Ondrej Zajicek <santiago@crfreenet.org> | 2010-09-15 02:01:23 +0200 |
---|---|---|
committer | Ondrej Zajicek <santiago@crfreenet.org> | 2010-09-15 02:01:23 +0200 |
commit | 2dec1e3471385ea191862c8fe85d76a8e47410de (patch) | |
tree | bc7b1122ca1806ac0368ea5139819a428117f05b | |
parent | a58022a64ee8aa2fc46816020723dfbf4bfd08d9 (diff) | |
download | bird-2dec1e3471385ea191862c8fe85d76a8e47410de.tar bird-2dec1e3471385ea191862c8fe85d76a8e47410de.zip |
Fixes a bug in pair sets.
-rw-r--r-- | filter/filter.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/filter/filter.c b/filter/filter.c index 971d230..81a4311 100644 --- a/filter/filter.c +++ b/filter/filter.c @@ -119,6 +119,13 @@ static inline int int_cmp(int i1, int i2) else return 1; } +static inline int uint_cmp(unsigned int i1, unsigned int i2) +{ + if (i1 == i2) return 0; + if (i1 < i2) return -1; + else return 1; +} + /** * val_compare - compare two values * @v1: first value @@ -144,9 +151,9 @@ val_compare(struct f_val v1, struct f_val v2) #ifndef IPV6 /* IP->Quad implicit conversion */ if ((v1.type == T_QUAD) && (v2.type == T_IP)) - return int_cmp(v1.val.i, ipa_to_u32(v2.val.px.ip)); + return uint_cmp(v1.val.i, ipa_to_u32(v2.val.px.ip)); if ((v1.type == T_IP) && (v2.type == T_QUAD)) - return int_cmp(ipa_to_u32(v1.val.px.ip), v2.val.i); + return uint_cmp(ipa_to_u32(v1.val.px.ip), v2.val.i); #endif debug( "Types do not match in val_compare\n" ); @@ -156,9 +163,10 @@ val_compare(struct f_val v1, struct f_val v2) case T_ENUM: case T_INT: case T_BOOL: + return int_cmp(v1.val.i, v2.val.i); case T_PAIR: case T_QUAD: - return int_cmp(v1.val.i, v2.val.i); + return uint_cmp(v1.val.i, v2.val.i); case T_IP: return ipa_compare(v1.val.px.ip, v2.val.px.ip); case T_PREFIX: |