]> git.ipfire.org Git - thirdparty/iptables.git/commitdiff
xshared: Store optstring in xtables_globals
authorPhil Sutter <phil@nwl.cc>
Mon, 27 Sep 2021 14:59:49 +0000 (16:59 +0200)
committerPhil Sutter <phil@nwl.cc>
Wed, 20 Oct 2021 09:32:54 +0000 (11:32 +0200)
Preparing for a common option parser, store the string of options for
each family inside the respective xtables_globals object. The
array of long option definitions sitting in there already indicates it's
the right place.

While being at it, drop '-m' support from arptables-nft.

Signed-off-by: Phil Sutter <phil@nwl.cc>
include/xtables.h
iptables/xshared.h
iptables/xtables-arp.c
iptables/xtables-eb.c
iptables/xtables.c

index e51f4bfda318a63b2647819023a1dfceabbc6ec5..c872a04220867db20c44c4acfbf3e60d2973c3f1 100644 (file)
@@ -420,6 +420,7 @@ struct xtables_globals
 {
        unsigned int option_offset;
        const char *program_name, *program_version;
+       const char *optstring;
        struct option *orig_opts;
        struct option *opts;
        void (*exit_err)(enum xtables_exittype status, const char *msg, ...) __attribute__((noreturn, format(printf,2,3)));
index 823894f94b84150d69ca2dacac09907e56059171..b59116ac497472e9b6bed36c27926922979d4eef 100644 (file)
@@ -68,6 +68,8 @@ struct xtables_globals;
 struct xtables_rule_match;
 struct xtables_target;
 
+#define OPTSTRING_COMMON "-:A:C:D:E:F::I:L::M:N:P:VX::Z::" "c:d:i:j:o:p:s:t:"
+
 /* define invflags which won't collide with IPT ones */
 #define IPT_INV_SRCDEVADDR     0x0080
 #define IPT_INV_TGTDEVADDR     0x0100
index 1d132bdf23546fe44061d74570100d585a919f2e..a028ac340cba0554517c617f8e0d1c6ef4f213ef 100644 (file)
@@ -100,6 +100,7 @@ extern void xtables_exit_error(enum xtables_exittype status, const char *msg, ..
 struct xtables_globals arptables_globals = {
        .option_offset          = 0,
        .program_version        = PACKAGE_VERSION,
+       .optstring              = OPTSTRING_COMMON "R:S::" "h::l:nv" /* "m:" */,
        .orig_opts              = original_opts,
        .exit_err               = xtables_exit_error,
        .compat_rev             = nft_compatible_revision,
@@ -444,8 +445,7 @@ int do_commandarp(struct nft_handle *h, int argc, char *argv[], char **table,
        opterr = 0;
 
        opts = xt_params->orig_opts;
-       while ((c = getopt_long(argc, argv,
-          "-A:D:R:I:L::M:F::Z::N:X::E:P:Vh::o:p:s:d:j:l:i:vnt:m:c:",
+       while ((c = getopt_long(argc, argv, xt_params->optstring,
                                           opts, NULL)) != -1) {
                switch (c) {
                        /*
index 1ed6bcd8a7877160caa87797013d4ad1c4f92ad4..3f58754d14cee7c33ca2fa58eec4473ea2518cd2 100644 (file)
@@ -220,6 +220,7 @@ extern void xtables_exit_error(enum xtables_exittype status, const char *msg, ..
 struct xtables_globals ebtables_globals = {
        .option_offset          = 0,
        .program_version        = PACKAGE_VERSION,
+       .optstring              = OPTSTRING_COMMON "h",
        .orig_opts              = ebt_original_options,
        .exit_err               = xtables_exit_error,
        .compat_rev             = nft_compatible_revision,
@@ -732,8 +733,8 @@ int do_commandeb(struct nft_handle *h, int argc, char *argv[], char **table,
        opterr = false;
 
        /* Getopt saves the day */
-       while ((c = getopt_long(argc, argv,
-          "-A:D:C:I:N:E:X::L::Z::F::P:Vhi:o:j:c:p:s:d:t:M:", opts, NULL)) != -1) {
+       while ((c = getopt_long(argc, argv, xt_params->optstring,
+                                       opts, NULL)) != -1) {
                cs.c = c;
                switch (c) {
 
index 0a700e08474009f6d84d15d53846d7579d802d98..c17cf7aec617802d2ff3e056b58c5bb31791fc83 100644 (file)
@@ -89,6 +89,7 @@ void xtables_exit_error(enum xtables_exittype status, const char *msg, ...) __at
 struct xtables_globals xtables_globals = {
        .option_offset = 0,
        .program_version = PACKAGE_VERSION,
+       .optstring = OPTSTRING_COMMON "R:S::W::" "46bfg:h::m:nvw::x",
        .orig_opts = original_opts,
        .exit_err = xtables_exit_error,
        .compat_rev = nft_compatible_revision,
@@ -455,8 +456,7 @@ void do_parse(struct nft_handle *h, int argc, char *argv[],
        opterr = 0;
 
        opts = xt_params->orig_opts;
-       while ((cs->c = getopt_long(argc, argv,
-          "-:A:C:D:R:I:L::S::M:F::Z::N:X::E:P:Vh::o:p:s:d:j:i:fbvw::W::nt:m:xc:g:46",
+       while ((cs->c = getopt_long(argc, argv, xt_params->optstring,
                                           opts, NULL)) != -1) {
                switch (cs->c) {
                        /*