]> granicus.if.org Git - ipset/commitdiff
ipset: pass ipset_arg argument pointer
authorHolger Eitzenberger <holger@eitzenberger.org>
Tue, 1 Feb 2011 16:30:57 +0000 (17:30 +0100)
committerJozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Tue, 1 Feb 2011 16:30:57 +0000 (17:30 +0100)
Signed-off-by: Holger Eitzenberger <holger@eitzenberger.org>
include/libipset/parse.h
lib/parse.c
src/ipset.c

index e87a60d87144201ecea23cb5eb767af5bb1e5ef6..760df49abce5cbf864a8928dffadfd9e39271851 100644 (file)
@@ -17,6 +17,7 @@
 #define IPSET_PROTO_SEPARATOR  ":"
 
 struct ipset_session;
+struct ipset_arg;
 
 typedef int (*ipset_parsefn)(struct ipset_session *s,
                             enum ipset_opt opt, const char *str);
@@ -84,8 +85,8 @@ extern int ipset_parse_ignored(struct ipset_session *session,
 extern int ipset_parse_elem(struct ipset_session *session,
                             enum ipset_opt opt, const char *str);
 extern int ipset_call_parser(struct ipset_session *session,
-                            ipset_parsefn parse, const char *optstr,
-                            enum ipset_opt optional, const char *str);
+                                                        const struct ipset_arg *arg,
+                                                        const char *str);
 
 /* Compatibility parser functions */
 extern int ipset_parse_iptimeout(struct ipset_session *session,
index e998df598d27052e7672ee28dd43497aca1fc30e..cd1ad321a22c6469ff3ae7c603d5ba3fcd368d35 100644 (file)
@@ -1416,15 +1416,14 @@ ipset_parse_ignored(struct ipset_session *session,
  */
 int
 ipset_call_parser(struct ipset_session *session,
-                 ipset_parsefn parse, const char *optstr,
-                 enum ipset_opt opt, const char *str)
+                                 const struct ipset_arg *arg,
+                                 const char *str)
 {
        if (ipset_data_flags_test(ipset_session_data(session),
-                                 IPSET_FLAG(opt)))
-               syntax_err("%s already specified", optstr);
+                                 IPSET_FLAG(arg->opt)))
+               syntax_err("%s already specified", arg->name[0]);
 
-       return parse(session, opt, parse == ipset_parse_ignored
-                                  ? optstr : str);
+       return arg->parse(session, arg->opt, str);
 }
 
 #define parse_elem(s, t, d, str)                                       \
index 8ed3e101e79b7ad77fb994962796bf8d6b10106a..2cfcfac64b9ac959c2c790d498d006e186a76632 100644 (file)
@@ -236,10 +236,7 @@ call_parser(int *argc, char *argv[], const struct ipset_arg *args)
                                /* Fall through */
                        case IPSET_OPTIONAL_ARG:
                                if (i + 1 <= *argc) {
-                                       ret = ipset_call_parser(session,
-                                                       arg->parse,
-                                                       optstr, arg->opt,
-                                                       argv[i]);
+                                       ret = ipset_call_parser(session, arg, argv[i]);
                                        if (ret < 0)
                                                return ret;
                                        ipset_shift_argv(argc, argv, i);
@@ -247,10 +244,7 @@ call_parser(int *argc, char *argv[], const struct ipset_arg *args)
                                }
                                /* Fall through */
                        default:
-                               ret = ipset_call_parser(session,
-                                                       arg->parse,
-                                                       optstr, arg->opt,
-                                                       optstr);
+                               ret = ipset_call_parser(session, arg, optstr);
                                if (ret < 0)
                                        return ret;
                        }