]> git.ipfire.org Git - thirdparty/iptables.git/commitdiff
src: move match option handling from do_command6 into its own functions
authorJan Engelhardt <jengelh@medozas.de>
Mon, 7 Feb 2011 02:42:47 +0000 (03:42 +0100)
committerJan Engelhardt <jengelh@medozas.de>
Mon, 7 Feb 2011 02:43:02 +0000 (03:43 +0100)
Signed-off-by: Jan Engelhardt <jengelh@medozas.de>
ip6tables.c
iptables.c

index eb28dc0ad60e393a817730242bd0112494cd2095..5a550bfb400afdb5bde2806db5ee4b9e834deb64 100644 (file)
@@ -1329,6 +1329,29 @@ static void command_jump(struct iptables_command_state *cs)
                xtables_error(OTHER_PROBLEM, "can't alloc memory!");
 }
 
+static void command_match(struct iptables_command_state *cs)
+{
+       struct xtables_match *m;
+       size_t size;
+
+       if (cs->invert)
+               xtables_error(PARAMETER_PROBLEM,
+                          "unexpected ! flag before --match");
+
+       m = xtables_find_match(optarg, XTF_LOAD_MUST_SUCCEED, &cs->matches);
+       size = IP6T_ALIGN(sizeof(struct ip6t_entry_match)) + m->size;
+       m->m = xtables_calloc(1, size);
+       m->m->u.match_size = size;
+       strcpy(m->m->u.user.name, m->name);
+       m->m->u.user.revision = m->revision;
+       if (m->init != NULL)
+               m->init(m->m);
+       if (m != m->next)
+               /* Merge options for non-cloned matches */
+               opts = xtables_merge_options(ip6tables_globals.orig_opts, opts,
+                                            m->extra_opts, &m->option_offset);
+}
+
 int do_command6(int argc, char *argv[], char **table, struct ip6tc_handle **handle)
 {
        struct iptables_command_state cs;
@@ -1617,28 +1640,9 @@ int do_command6(int argc, char *argv[], char **table, struct ip6tc_handle **hand
                        verbose++;
                        break;
 
-               case 'm': {
-                       size_t size;
-
-                       if (cs.invert)
-                               xtables_error(PARAMETER_PROBLEM,
-                                          "unexpected ! flag before --match");
-
-                       m = xtables_find_match(optarg, XTF_LOAD_MUST_SUCCEED,
-                           &cs.matches);
-                       size = IP6T_ALIGN(sizeof(struct ip6t_entry_match))
-                                        + m->size;
-                       m->m = xtables_calloc(1, size);
-                       m->m->u.match_size = size;
-                       strcpy(m->m->u.user.name, m->name);
-                       m->m->u.user.revision = m->revision;
-                       if (m->init != NULL)
-                               m->init(m->m);
-                       if (m != m->next)
-                               /* Merge options for non-cloned matches */
-                               opts = xtables_merge_options(ip6tables_globals.orig_opts, opts, m->extra_opts, &m->option_offset);
-               }
-               break;
+               case 'm':
+                       command_match(&cs);
+                       break;
 
                case 'n':
                        set_option(&cs.options, OPT_NUMERIC, &cs.fw6.ipv6.invflags,
index 354bc9cb066164124788c1a31f3771919159ff1c..6f5616ba9cee0197713cd5e81e4e7bdfddadccc2 100644 (file)
@@ -1356,6 +1356,32 @@ static void command_jump(struct iptables_command_state *cs)
                xtables_error(OTHER_PROBLEM, "can't alloc memory!");
 }
 
+static void command_match(struct iptables_command_state *cs)
+{
+       struct xtables_match *m;
+       size_t size;
+
+       if (cs->invert)
+               xtables_error(PARAMETER_PROBLEM,
+                          "unexpected ! flag before --match");
+
+       m = xtables_find_match(optarg, XTF_LOAD_MUST_SUCCEED, &cs->matches);
+       size = IPT_ALIGN(sizeof(struct ipt_entry_match)) + m->size;
+       m->m = xtables_calloc(1, size);
+       m->m->u.match_size = size;
+       strcpy(m->m->u.user.name, m->name);
+       m->m->u.user.revision = m->revision;
+       if (m->init != NULL)
+               m->init(m->m);
+       if (m != m->next) {
+               /* Merge options for non-cloned matches */
+               opts = xtables_merge_options(iptables_globals.orig_opts, opts,
+                                            m->extra_opts, &m->option_offset);
+               if (opts == NULL)
+                       xtables_error(OTHER_PROBLEM, "can't alloc memory!");
+       }
+}
+
 int do_command(int argc, char *argv[], char **table, struct iptc_handle **handle)
 {
        struct iptables_command_state cs;
@@ -1642,36 +1668,9 @@ int do_command(int argc, char *argv[], char **table, struct iptc_handle **handle
                        verbose++;
                        break;
 
-               case 'm': {
-                       size_t size;
-
-                       if (cs.invert)
-                               xtables_error(PARAMETER_PROBLEM,
-                                          "unexpected ! flag before --match");
-
-                       m = xtables_find_match(optarg, XTF_LOAD_MUST_SUCCEED,
-                           &cs.matches);
-                       size = IPT_ALIGN(sizeof(struct ipt_entry_match))
-                                        + m->size;
-                       m->m = xtables_calloc(1, size);
-                       m->m->u.match_size = size;
-                       strcpy(m->m->u.user.name, m->name);
-                       m->m->u.user.revision = m->revision;
-                       if (m->init != NULL)
-                               m->init(m->m);
-                       if (m != m->next) {
-                               /* Merge options for non-cloned matches */
-                               opts = xtables_merge_options(
-                                                    iptables_globals.orig_opts,
-                                                    opts,
-                                                    m->extra_opts,
-                                                    &m->option_offset);
-                               if (opts == NULL)
-                                       xtables_error(OTHER_PROBLEM,
-                                                  "can't alloc memory!");
-                       }
-               }
-               break;
+               case 'm':
+                       command_match(&cs);
+                       break;
 
                case 'n':
                        set_option(&cs.options, OPT_NUMERIC, &cs.fw.ip.invflags,