From: Ondrej Zajicek Date: Wed, 15 Sep 2010 00:01:23 +0000 (+0200) Subject: Fixes a bug in pair sets. X-Git-Tag: v1.3.0~47 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2dec1e3471385ea191862c8fe85d76a8e47410de;p=thirdparty%2Fbird.git Fixes a bug in pair sets. --- diff --git a/filter/filter.c b/filter/filter.c index 971d23030..81a431172 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: