]> git.ipfire.org Git - thirdparty/iptables.git/commitdiff
iprange: roll address parsing into a loop
authorJan Engelhardt <jengelh@medozas.de>
Fri, 18 Sep 2009 11:07:09 +0000 (13:07 +0200)
committerHarald Welte <laforge@gnumonks.org>
Sun, 25 Oct 2009 10:08:56 +0000 (11:08 +0100)
extensions/libxt_iprange.c

index c58576698636ec932ce8d0b6df196c723fa9fbdd..9e544ea0139cfe9f6f0694e88a40b228b12e2dae 100644 (file)
@@ -34,33 +34,29 @@ static void
 iprange_parse_spec(const char *from, const char *to, union nf_inet_addr *range,
                   uint8_t family, const char *optname)
 {
+       const char *spec[2] = {from, to};
        struct in6_addr *ia6;
        struct in_addr *ia4;
+       unsigned int i;
 
        memset(range, 0, sizeof(union nf_inet_addr) * 2);
 
        if (family == NFPROTO_IPV6) {
-               ia6 = xtables_numeric_to_ip6addr(from);
-               if (ia6 == NULL)
-                       xtables_param_act(XTF_BAD_VALUE, "iprange",
-                               optname, from);
-               range[0].in6 = *ia6;
-               ia6 = xtables_numeric_to_ip6addr(to);
-               if (ia6 == NULL)
-                       xtables_param_act(XTF_BAD_VALUE, "iprange",
-                               optname, to);
-               range[1].in6 = *ia6;
+               for (i = 0; i < ARRAY_SIZE(spec); ++i) {
+                       ia6 = xtables_numeric_to_ip6addr(spec[i]);
+                       if (ia6 == NULL)
+                               xtables_param_act(XTF_BAD_VALUE, "iprange",
+                                       optname, spec[i]);
+                       range[i].in6 = *ia6;
+               }
        } else {
-               ia4 = xtables_numeric_to_ipaddr(from);
-               if (ia4 == NULL)
-                       xtables_param_act(XTF_BAD_VALUE, "iprange",
-                               optname, from);
-               range[0].in = *ia4;
-               ia4 = xtables_numeric_to_ipaddr(to);
-               if (ia4 == NULL)
-                       xtables_param_act(XTF_BAD_VALUE, "iprange",
-                               optname, to);
-               range[1].in = *ia4;
+               for (i = 0; i < ARRAY_SIZE(spec); ++i) {
+                       ia4 = xtables_numeric_to_ipaddr(spec[i]);
+                       if (ia4 == NULL)
+                               xtables_param_act(XTF_BAD_VALUE, "iprange",
+                                       optname, spec[i]);
+                       range[i].in = *ia4;
+               }
        }
 }