]> git.ipfire.org Git - thirdparty/iptables.git/commitdiff
libxtables: Simplify xtables_ipmask_to_cidr() a bit
authorPhil Sutter <phil@nwl.cc>
Tue, 2 Mar 2021 14:07:13 +0000 (15:07 +0100)
committerPhil Sutter <phil@nwl.cc>
Tue, 9 Mar 2021 08:27:40 +0000 (09:27 +0100)
Reduce the whole mask matching into a single for-loop. No need for a
shortcut, /32 masks will match in the first iteration.

Signed-off-by: Phil Sutter <phil@nwl.cc>
libxtables/xtables.c

index bc42ba8221f3a37f68f9a425e74a8390f0183215..fc3f622072adc93bf70e24e8025a0f6cbd65da84 100644 (file)
@@ -1430,16 +1430,11 @@ int xtables_ipmask_to_cidr(const struct in_addr *mask)
        int i;
 
        maskaddr = ntohl(mask->s_addr);
-       /* shortcut for /32 networks */
-       if (maskaddr == 0xFFFFFFFFL)
-               return 32;
-
-       i = 32;
-       bits = 0xFFFFFFFEL;
-       while (--i >= 0 && maskaddr != bits)
-               bits <<= 1;
-       if (i >= 0)
-               return i;
+
+       for (i = 32, bits = (uint32_t)-1; i >= 0; i--, bits <<= 1) {
+               if (bits == maskaddr)
+                       return i;
+       }
 
        /* this mask cannot be converted to CIDR notation */
        return -1;