Fix signed comparison bug in lookup_subnet_ipv4().
[tinc] / src / subnet.c
index 537be11..cb9cbb7 100644 (file)
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id: subnet.c,v 1.1.2.22 2001/06/06 19:11:16 guus Exp $
+    $Id: subnet.c,v 1.1.2.24 2001/08/28 20:52:39 guus Exp $
 */
 
 #include "config.h"
 
 #include <stdio.h>
 #include <syslog.h>
+#include <string.h>
 
 #include "conf.h"
 #include "net.h"
@@ -60,9 +61,23 @@ cp
   /* We compare as if a subnet is a number that equals (address << 32 + netmask). */
    
   if(a->net.ipv4.address == b->net.ipv4.address)
-    return a->net.ipv4.mask - b->net.ipv4.mask;
+  {
+    if(a->net.ipv4.mask < b->net.ipv4.mask)
+      return -1;
+    else if(a->net.ipv4.mask > b->net.ipv4.mask)
+      return 1;
+    else
+      return 0;
+  }
   else
-    return a->net.ipv4.address - b->net.ipv4.address;
+  {
+    if(a->net.ipv4.address < b->net.ipv4.address)
+      return -1;
+    else if(a->net.ipv4.address > b->net.ipv4.address)
+      return 1;
+    else
+      return 0;
+  }
 }
 
 int subnet_compare_ipv6(subnet_t *a, subnet_t *b)