]> git.ipfire.org Git - thirdparty/iptables.git/commitdiff
libxtables: Introduce xtables_globals print_help callback
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)
With optstring being stored in struct xtables_globals as well, it is a
natural choice to store a pointer to a help printer also which matches
the supported options.

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

index c872a04220867db20c44c4acfbf3e60d2973c3f1..ca674c2663eb4633130c6b1b628d37a172a41551 100644 (file)
@@ -425,6 +425,7 @@ struct xtables_globals
        struct option *opts;
        void (*exit_err)(enum xtables_exittype status, const char *msg, ...) __attribute__((noreturn, format(printf,2,3)));
        int (*compat_rev)(const char *name, uint8_t rev, int opt);
+       void (*print_help)(const struct xtables_rule_match *m);
 };
 
 #define XT_GETOPT_TABLEEND {.name = NULL, .has_arg = false}
index a028ac340cba0554517c617f8e0d1c6ef4f213ef..2e4bb3f2313c837ef6e97dd1c019fa9ede4e44dc 100644 (file)
@@ -97,6 +97,7 @@ static struct option original_opts[] = {
 #define opts xt_params->opts
 
 extern void xtables_exit_error(enum xtables_exittype status, const char *msg, ...) __attribute__((noreturn, format(printf,2,3)));
+static void printhelp(const struct xtables_rule_match *m);
 struct xtables_globals arptables_globals = {
        .option_offset          = 0,
        .program_version        = PACKAGE_VERSION,
@@ -104,6 +105,7 @@ struct xtables_globals arptables_globals = {
        .orig_opts              = original_opts,
        .exit_err               = xtables_exit_error,
        .compat_rev             = nft_compatible_revision,
+       .print_help             = printhelp,
 };
 
 /***********************************************/
@@ -164,7 +166,7 @@ exit_tryhelp(int status)
 }
 
 static void
-printhelp(void)
+printhelp(const struct xtables_rule_match *m)
 {
        struct xtables_target *t = NULL;
        int i;
@@ -563,7 +565,7 @@ int do_commandarp(struct nft_handle *h, int argc, char *argv[], char **table,
                        if (!optarg)
                                optarg = argv[optind];
 
-                       printhelp();
+                       xt_params->print_help(NULL);
                        command = CMD_NONE;
                        break;
                case 's':
index 9abfc8f8d7f32a9574225142f4c35279c869cc70..2b3cc9301c455ba8480c8220ca713da83ac21e0a 100644 (file)
@@ -85,6 +85,7 @@ static struct option original_opts[] = {
 };
 
 void xtables_exit_error(enum xtables_exittype status, const char *msg, ...) __attribute__((noreturn, format(printf,2,3)));
+static void printhelp(const struct xtables_rule_match *m);
 
 struct xtables_globals xtables_globals = {
        .option_offset = 0,
@@ -93,6 +94,7 @@ struct xtables_globals xtables_globals = {
        .orig_opts = original_opts,
        .exit_err = xtables_exit_error,
        .compat_rev = nft_compatible_revision,
+       .print_help = printhelp,
 };
 
 #define opts xt_params->opts
@@ -435,7 +437,7 @@ void do_parse(struct nft_handle *h, int argc, char *argv[],
                                xtables_find_match(cs->protocol,
                                        XTF_TRY_LOAD, &cs->matches);
 
-                       printhelp(cs->matches);
+                       xt_params->print_help(cs->matches);
                        p->command = CMD_NONE;
                        return;