From 6e2e169eb66b63d2991e1c7ada931e3cdb0ced32 Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Thu, 16 Mar 2017 16:55:01 +0900 Subject: iptables: remove duplicated argument parsing code 1. Factor out repeated code to a new xs_has_arg function. 2. Add a new parse_wait_time option to parse the value of -w. 3. Make parse_wait_interval take argc and argv so its callers can be simpler. Signed-off-by: Lorenzo Colitti Signed-off-by: Pablo Neira Ayuso --- iptables/xtables-arp.c | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) (limited to 'iptables/xtables-arp.c') diff --git a/iptables/xtables-arp.c b/iptables/xtables-arp.c index bd6d57c2..6aa000a1 100644 --- a/iptables/xtables-arp.c +++ b/iptables/xtables-arp.c @@ -984,8 +984,7 @@ int do_commandarp(struct nft_handle *h, int argc, char *argv[], char **table) add_command(&command, CMD_DELETE, CMD_NONE, invert); chain = optarg; - if (optind < argc && argv[optind][0] != '-' - && argv[optind][0] != '!') { + if (xs_has_arg(argc, argv)) { rulenum = parse_rulenumber(argv[optind++]); command = CMD_DELETE_NUM; } @@ -995,8 +994,7 @@ int do_commandarp(struct nft_handle *h, int argc, char *argv[], char **table) add_command(&command, CMD_REPLACE, CMD_NONE, invert); chain = optarg; - if (optind < argc && argv[optind][0] != '-' - && argv[optind][0] != '!') + if (xs_has_arg(argc, argv)) rulenum = parse_rulenumber(argv[optind++]); else xtables_error(PARAMETER_PROBLEM, @@ -1008,8 +1006,7 @@ int do_commandarp(struct nft_handle *h, int argc, char *argv[], char **table) add_command(&command, CMD_INSERT, CMD_NONE, invert); chain = optarg; - if (optind < argc && argv[optind][0] != '-' - && argv[optind][0] != '!') + if (xs_has_arg(argc, argv)) rulenum = parse_rulenumber(argv[optind++]); else rulenum = 1; break; @@ -1018,8 +1015,7 @@ int do_commandarp(struct nft_handle *h, int argc, char *argv[], char **table) add_command(&command, CMD_LIST, CMD_ZERO, invert); if (optarg) chain = optarg; - else if (optind < argc && argv[optind][0] != '-' - && argv[optind][0] != '!') + else if (xs_has_arg(argc, argv)) chain = argv[optind++]; break; @@ -1027,8 +1023,7 @@ int do_commandarp(struct nft_handle *h, int argc, char *argv[], char **table) add_command(&command, CMD_FLUSH, CMD_NONE, invert); if (optarg) chain = optarg; - else if (optind < argc && argv[optind][0] != '-' - && argv[optind][0] != '!') + else if (xs_has_arg(argc, argv)) chain = argv[optind++]; break; @@ -1036,8 +1031,7 @@ int do_commandarp(struct nft_handle *h, int argc, char *argv[], char **table) add_command(&command, CMD_ZERO, CMD_LIST, invert); if (optarg) chain = optarg; - else if (optind < argc && argv[optind][0] != '-' - && argv[optind][0] != '!') + else if (xs_has_arg(argc, argv)) chain = argv[optind++]; break; @@ -1059,8 +1053,7 @@ int do_commandarp(struct nft_handle *h, int argc, char *argv[], char **table) add_command(&command, CMD_DELETE_CHAIN, CMD_NONE, invert); if (optarg) chain = optarg; - else if (optind < argc && argv[optind][0] != '-' - && argv[optind][0] != '!') + else if (xs_has_arg(argc, argv)) chain = argv[optind++]; break; @@ -1068,8 +1061,7 @@ int do_commandarp(struct nft_handle *h, int argc, char *argv[], char **table) add_command(&command, CMD_RENAME_CHAIN, CMD_NONE, invert); chain = optarg; - if (optind < argc && argv[optind][0] != '-' - && argv[optind][0] != '!') + if (xs_has_arg(argc, argv)) newname = argv[optind++]; else xtables_error(PARAMETER_PROBLEM, @@ -1082,8 +1074,7 @@ int do_commandarp(struct nft_handle *h, int argc, char *argv[], char **table) add_command(&command, CMD_SET_POLICY, CMD_NONE, invert); chain = optarg; - if (optind < argc && argv[optind][0] != '-' - && argv[optind][0] != '!') + if (xs_has_arg(argc, argv)) policy = argv[optind++]; else xtables_error(PARAMETER_PROBLEM, @@ -1286,8 +1277,7 @@ int do_commandarp(struct nft_handle *h, int argc, char *argv[], char **table) set_option(&options, OPT_COUNTERS, &cs.fw.arp.invflags, invert); pcnt = optarg; - if (optind < argc && argv[optind][0] != '-' - && argv[optind][0] != '!') + if (xs_has_arg(argc, argv)) bcnt = argv[optind++]; else xtables_error(PARAMETER_PROBLEM, -- cgit v1.2.3