diff options
Diffstat (limited to 'networking')
-rw-r--r-- | networking/arping.c | 6 | ||||
-rw-r--r-- | networking/ether-wake.c | 3 | ||||
-rw-r--r-- | networking/ftpd.c | 17 | ||||
-rw-r--r-- | networking/ftpgetput.c | 7 | ||||
-rw-r--r-- | networking/httpd.c | 10 | ||||
-rw-r--r-- | networking/ipcalc.c | 7 | ||||
-rw-r--r-- | networking/nc_bloaty.c | 14 | ||||
-rw-r--r-- | networking/ntpd.c | 9 | ||||
-rw-r--r-- | networking/ping.c | 12 | ||||
-rw-r--r-- | networking/pscan.c | 7 | ||||
-rw-r--r-- | networking/slattach.c | 5 | ||||
-rw-r--r-- | networking/tcpudp.c | 7 | ||||
-rw-r--r-- | networking/telnetd.c | 10 | ||||
-rw-r--r-- | networking/tftp.c | 15 | ||||
-rw-r--r-- | networking/traceroute.c | 6 | ||||
-rw-r--r-- | networking/tunctl.c | 18 | ||||
-rw-r--r-- | networking/udhcp/d6_dhcpc.c | 7 | ||||
-rw-r--r-- | networking/udhcp/dhcpc.c | 10 | ||||
-rw-r--r-- | networking/udhcp/dhcpd.c | 7 | ||||
-rw-r--r-- | networking/udhcp/dumpleases.c | 8 | ||||
-rw-r--r-- | networking/wget.c | 8 | ||||
-rw-r--r-- | networking/whois.c | 3 | ||||
-rw-r--r-- | networking/zcip.c | 5 |
23 files changed, 121 insertions, 80 deletions
diff --git a/networking/arping.c b/networking/arping.c index 3fd54a287..f9967d81e 100644 --- a/networking/arping.c +++ b/networking/arping.c | |||
@@ -306,9 +306,9 @@ int arping_main(int argc UNUSED_PARAM, char **argv) | |||
306 | /* Dad also sets quit_on_reply. | 306 | /* Dad also sets quit_on_reply. |
307 | * Advert also sets unsolicited. | 307 | * Advert also sets unsolicited. |
308 | */ | 308 | */ |
309 | opt_complementary = "=1:Df:AU"; | 309 | opt = getopt32(argv, "^" "DUAqfbc:+w:I:s:" "\0" "=1:Df:AU", |
310 | opt = getopt32(argv, "DUAqfbc:+w:I:s:", | 310 | &count, &str_timeout, &device, &source |
311 | &count, &str_timeout, &device, &source); | 311 | ); |
312 | if (opt & 0x80) /* -w: timeout */ | 312 | if (opt & 0x80) /* -w: timeout */ |
313 | timeout_us = xatou_range(str_timeout, 0, INT_MAX/2000000) * 1000000 + 500000; | 313 | timeout_us = xatou_range(str_timeout, 0, INT_MAX/2000000) * 1000000 + 500000; |
314 | //if (opt & 0x200) /* -s: source */ | 314 | //if (opt & 0x200) /* -s: source */ |
diff --git a/networking/ether-wake.c b/networking/ether-wake.c index 52522e76d..6677f07d5 100644 --- a/networking/ether-wake.c +++ b/networking/ether-wake.c | |||
@@ -212,8 +212,7 @@ int ether_wake_main(int argc UNUSED_PARAM, char **argv) | |||
212 | struct whereto_t whereto; /* who to wake up */ | 212 | struct whereto_t whereto; /* who to wake up */ |
213 | 213 | ||
214 | /* handle misc user options */ | 214 | /* handle misc user options */ |
215 | opt_complementary = "=1"; | 215 | flags = getopt32(argv, "^" "bi:p:" "\0" "=1", &ifname, &pass); |
216 | flags = getopt32(argv, "bi:p:", &ifname, &pass); | ||
217 | if (flags & 4) /* -p */ | 216 | if (flags & 4) /* -p */ |
218 | wol_passwd_sz = get_wol_pw(pass, wol_passwd); | 217 | wol_passwd_sz = get_wol_pw(pass, wol_passwd); |
219 | flags &= 1; /* we further interested only in -b [bcast] flag */ | 218 | flags &= 1; /* we further interested only in -b [bcast] flag */ |
diff --git a/networking/ftpd.c b/networking/ftpd.c index c562c2886..8af5acac2 100644 --- a/networking/ftpd.c +++ b/networking/ftpd.c | |||
@@ -1174,17 +1174,20 @@ int ftpd_main(int argc UNUSED_PARAM, char **argv) | |||
1174 | abs_timeout = 1 * 60 * 60; | 1174 | abs_timeout = 1 * 60 * 60; |
1175 | verbose_S = 0; | 1175 | verbose_S = 0; |
1176 | G.timeout = 2 * 60; | 1176 | G.timeout = 2 * 60; |
1177 | opt_complementary = "vv:SS"; | ||
1178 | #if BB_MMU | 1177 | #if BB_MMU |
1179 | opts = getopt32(argv, "vS" | 1178 | opts = getopt32(argv, "^" "vS" |
1180 | IF_FEATURE_FTPD_WRITE("w") "t:+T:+" IF_FEATURE_FTPD_AUTHENTICATION("a:"), | 1179 | IF_FEATURE_FTPD_WRITE("w") "t:+T:+" IF_FEATURE_FTPD_AUTHENTICATION("a:") |
1180 | "\0" "vv:SS", | ||
1181 | &G.timeout, &abs_timeout, IF_FEATURE_FTPD_AUTHENTICATION(&anon_opt,) | 1181 | &G.timeout, &abs_timeout, IF_FEATURE_FTPD_AUTHENTICATION(&anon_opt,) |
1182 | &G.verbose, &verbose_S); | 1182 | &G.verbose, &verbose_S |
1183 | ); | ||
1183 | #else | 1184 | #else |
1184 | opts = getopt32(argv, "l1AvS" | 1185 | opts = getopt32(argv, "^" "l1AvS" |
1185 | IF_FEATURE_FTPD_WRITE("w") "t:+T:+" IF_FEATURE_FTPD_AUTHENTICATION("a:"), | 1186 | IF_FEATURE_FTPD_WRITE("w") "t:+T:+" IF_FEATURE_FTPD_AUTHENTICATION("a:") |
1187 | "\0" "vv:SS", | ||
1186 | &G.timeout, &abs_timeout, IF_FEATURE_FTPD_AUTHENTICATION(&anon_opt,) | 1188 | &G.timeout, &abs_timeout, IF_FEATURE_FTPD_AUTHENTICATION(&anon_opt,) |
1187 | &G.verbose, &verbose_S); | 1189 | &G.verbose, &verbose_S |
1190 | ); | ||
1188 | if (opts & (OPT_l|OPT_1)) { | 1191 | if (opts & (OPT_l|OPT_1)) { |
1189 | /* Our secret backdoor to ls */ | 1192 | /* Our secret backdoor to ls */ |
1190 | if (fchdir(3) != 0) | 1193 | if (fchdir(3) != 0) |
diff --git a/networking/ftpgetput.c b/networking/ftpgetput.c index 1fc20364f..2cce07ac2 100644 --- a/networking/ftpgetput.c +++ b/networking/ftpgetput.c | |||
@@ -361,11 +361,12 @@ int ftpgetput_main(int argc UNUSED_PARAM, char **argv) | |||
361 | /* | 361 | /* |
362 | * Decipher the command line | 362 | * Decipher the command line |
363 | */ | 363 | */ |
364 | opt_complementary = "-2:vv:cc"; /* must have 2 to 3 params; -v and -c count */ | 364 | /* must have 2 to 3 params; -v and -c count */ |
365 | #define OPTSTRING "^cvu:p:P:" "\0" "-2:?3:vv:cc" | ||
365 | #if ENABLE_FEATURE_FTPGETPUT_LONG_OPTIONS | 366 | #if ENABLE_FEATURE_FTPGETPUT_LONG_OPTIONS |
366 | getopt32long(argv, "cvu:p:P:", ftpgetput_longopts, | 367 | getopt32long(argv, OPTSTRING, ftpgetput_longopts, |
367 | #else | 368 | #else |
368 | getopt32(argv, "cvu:p:P:", | 369 | getopt32(argv, OPTSTRING, |
369 | #endif | 370 | #endif |
370 | &user, &password, &port, &verbose_flag, &do_continue | 371 | &user, &password, &port, &verbose_flag, &do_continue |
371 | ); | 372 | ); |
diff --git a/networking/httpd.c b/networking/httpd.c index 079145757..9369de824 100644 --- a/networking/httpd.c +++ b/networking/httpd.c | |||
@@ -2636,17 +2636,19 @@ int httpd_main(int argc UNUSED_PARAM, char **argv) | |||
2636 | #endif | 2636 | #endif |
2637 | 2637 | ||
2638 | home_httpd = xrealloc_getcwd_or_warn(NULL); | 2638 | home_httpd = xrealloc_getcwd_or_warn(NULL); |
2639 | /* -v counts, -i implies -f */ | ||
2640 | opt_complementary = "vv:if"; | ||
2641 | /* We do not "absolutize" path given by -h (home) opt. | 2639 | /* We do not "absolutize" path given by -h (home) opt. |
2642 | * If user gives relative path in -h, | 2640 | * If user gives relative path in -h, |
2643 | * $SCRIPT_FILENAME will not be set. */ | 2641 | * $SCRIPT_FILENAME will not be set. */ |
2644 | opt = getopt32(argv, "c:d:h:" | 2642 | opt = getopt32(argv, "^" |
2643 | "c:d:h:" | ||
2645 | IF_FEATURE_HTTPD_ENCODE_URL_STR("e:") | 2644 | IF_FEATURE_HTTPD_ENCODE_URL_STR("e:") |
2646 | IF_FEATURE_HTTPD_BASIC_AUTH("r:") | 2645 | IF_FEATURE_HTTPD_BASIC_AUTH("r:") |
2647 | IF_FEATURE_HTTPD_AUTH_MD5("m:") | 2646 | IF_FEATURE_HTTPD_AUTH_MD5("m:") |
2648 | IF_FEATURE_HTTPD_SETUID("u:") | 2647 | IF_FEATURE_HTTPD_SETUID("u:") |
2649 | "p:ifv", | 2648 | "p:ifv" |
2649 | "\0" | ||
2650 | /* -v counts, -i implies -f */ | ||
2651 | "vv:if", | ||
2650 | &opt_c_configFile, &url_for_decode, &home_httpd | 2652 | &opt_c_configFile, &url_for_decode, &home_httpd |
2651 | IF_FEATURE_HTTPD_ENCODE_URL_STR(, &url_for_encode) | 2653 | IF_FEATURE_HTTPD_ENCODE_URL_STR(, &url_for_encode) |
2652 | IF_FEATURE_HTTPD_BASIC_AUTH(, &g_realm) | 2654 | IF_FEATURE_HTTPD_BASIC_AUTH(, &g_realm) |
diff --git a/networking/ipcalc.c b/networking/ipcalc.c index 1d5db969c..cdae8eea8 100644 --- a/networking/ipcalc.c +++ b/networking/ipcalc.c | |||
@@ -130,8 +130,11 @@ int ipcalc_main(int argc UNUSED_PARAM, char **argv) | |||
130 | #define ipaddr (s_ipaddr.s_addr) | 130 | #define ipaddr (s_ipaddr.s_addr) |
131 | char *ipstr; | 131 | char *ipstr; |
132 | 132 | ||
133 | opt_complementary = "-1:?2"; /* minimum 1 arg, maximum 2 args */ | 133 | opt = GETOPT32(argv, "^" |
134 | opt = GETOPT32(argv, "mbn" IF_FEATURE_IPCALC_FANCY("phs") LONGOPTS); | 134 | "mbn" IF_FEATURE_IPCALC_FANCY("phs") |
135 | "\0" "-1:?2"/*min 1, max 2 args*/ | ||
136 | LONGOPTS | ||
137 | ); | ||
135 | argv += optind; | 138 | argv += optind; |
136 | if (opt & SILENT) | 139 | if (opt & SILENT) |
137 | logmode = LOGMODE_NONE; /* suppress error_msg() output */ | 140 | logmode = LOGMODE_NONE; /* suppress error_msg() output */ |
diff --git a/networking/nc_bloaty.c b/networking/nc_bloaty.c index 3db784982..64098648a 100644 --- a/networking/nc_bloaty.c +++ b/networking/nc_bloaty.c | |||
@@ -787,11 +787,15 @@ int nc_main(int argc UNUSED_PARAM, char **argv) | |||
787 | e_found: | 787 | e_found: |
788 | 788 | ||
789 | // -g -G -t -r deleted, unimplemented -a deleted too | 789 | // -g -G -t -r deleted, unimplemented -a deleted too |
790 | opt_complementary = "?2:vv:ll"; /* max 2 params; -v and -l are counters; -w N */ | 790 | getopt32(argv, "^" |
791 | getopt32(argv, "np:s:uvw:+" IF_NC_SERVER("lk") | 791 | "np:s:uvw:+"/* -w N */ IF_NC_SERVER("lk") |
792 | IF_NC_EXTRA("i:o:z"), | 792 | IF_NC_EXTRA("i:o:z") |
793 | &str_p, &str_s, &o_wait | 793 | "\0" |
794 | IF_NC_EXTRA(, &str_i, &str_o), &o_verbose IF_NC_SERVER(, &cnt_l)); | 794 | "?2:vv:ll", /* max 2 params; -v and -l are counters */ |
795 | &str_p, &str_s, &o_wait | ||
796 | IF_NC_EXTRA(, &str_i, &str_o) | ||
797 | , &o_verbose IF_NC_SERVER(, &cnt_l) | ||
798 | ); | ||
795 | argv += optind; | 799 | argv += optind; |
796 | #if ENABLE_NC_EXTRA | 800 | #if ENABLE_NC_EXTRA |
797 | if (option_mask32 & OPT_i) /* line-interval time */ | 801 | if (option_mask32 & OPT_i) /* line-interval time */ |
diff --git a/networking/ntpd.c b/networking/ntpd.c index f21f9513d..25fa44389 100644 --- a/networking/ntpd.c +++ b/networking/ntpd.c | |||
@@ -2230,15 +2230,16 @@ static NOINLINE void ntp_init(char **argv) | |||
2230 | 2230 | ||
2231 | /* Parse options */ | 2231 | /* Parse options */ |
2232 | peers = NULL; | 2232 | peers = NULL; |
2233 | opt_complementary = "dd:wn" /* -d: counter; -p: list; -w implies -n */ | 2233 | opts = getopt32(argv, "^" |
2234 | IF_FEATURE_NTPD_SERVER(":Il"); /* -I implies -l */ | ||
2235 | opts = getopt32(argv, | ||
2236 | "nqNx" /* compat */ | 2234 | "nqNx" /* compat */ |
2237 | "wp:*S:"IF_FEATURE_NTPD_SERVER("l") /* NOT compat */ | 2235 | "wp:*S:"IF_FEATURE_NTPD_SERVER("l") /* NOT compat */ |
2238 | IF_FEATURE_NTPD_SERVER("I:") /* compat */ | 2236 | IF_FEATURE_NTPD_SERVER("I:") /* compat */ |
2239 | "d" /* compat */ | 2237 | "d" /* compat */ |
2240 | "46aAbgL", /* compat, ignored */ | 2238 | "46aAbgL", /* compat, ignored */ |
2241 | &peers, &G.script_name, | 2239 | "\0" |
2240 | "dd:wn" /* -d: counter; -p: list; -w implies -n */ | ||
2241 | IF_FEATURE_NTPD_SERVER(":Il") /* -I implies -l */ | ||
2242 | , &peers, &G.script_name, | ||
2242 | #if ENABLE_FEATURE_NTPD_SERVER | 2243 | #if ENABLE_FEATURE_NTPD_SERVER |
2243 | &G.if_name, | 2244 | &G.if_name, |
2244 | #endif | 2245 | #endif |
diff --git a/networking/ping.c b/networking/ping.c index 2e8bef023..7460e4414 100644 --- a/networking/ping.c +++ b/networking/ping.c | |||
@@ -340,7 +340,8 @@ static int common_ping_main(sa_family_t af, char **argv) | |||
340 | 340 | ||
341 | /* Full(er) version */ | 341 | /* Full(er) version */ |
342 | 342 | ||
343 | #define OPT_STRING ("qvc:+s:t:+w:+W:+I:np:4" IF_PING6("6")) | 343 | /* -c NUM, -t NUM, -w NUM, -W NUM */ |
344 | #define OPT_STRING "qvc:+s:t:+w:+W:+I:np:4"IF_PING6("6") | ||
344 | enum { | 345 | enum { |
345 | OPT_QUIET = 1 << 0, | 346 | OPT_QUIET = 1 << 0, |
346 | OPT_VERBOSE = 1 << 1, | 347 | OPT_VERBOSE = 1 << 1, |
@@ -863,9 +864,12 @@ static int common_ping_main(int opt, char **argv) | |||
863 | 864 | ||
864 | INIT_G(); | 865 | INIT_G(); |
865 | 866 | ||
866 | /* exactly one argument needed; -v and -q don't mix; -c NUM, -t NUM, -w NUM, -W NUM */ | 867 | opt |= getopt32(argv, "^" |
867 | opt_complementary = "=1:q--v:v--q"; | 868 | OPT_STRING |
868 | opt |= getopt32(argv, OPT_STRING, &pingcount, &str_s, &opt_ttl, &deadline, &timeout, &str_I, &str_p); | 869 | /* exactly one arg; -v and -q don't mix */ |
870 | "\0" "=1:q--v:v--q", | ||
871 | &pingcount, &str_s, &opt_ttl, &deadline, &timeout, &str_I, &str_p | ||
872 | ); | ||
869 | if (opt & OPT_s) | 873 | if (opt & OPT_s) |
870 | datalen = xatou16(str_s); // -s | 874 | datalen = xatou16(str_s); // -s |
871 | if (opt & OPT_I) { // -I | 875 | if (opt & OPT_I) { // -I |
diff --git a/networking/pscan.c b/networking/pscan.c index 17985d2c8..95b0a937d 100644 --- a/networking/pscan.c +++ b/networking/pscan.c | |||
@@ -75,8 +75,11 @@ int pscan_main(int argc UNUSED_PARAM, char **argv) | |||
75 | unsigned rtt_4; | 75 | unsigned rtt_4; |
76 | unsigned start, diff; | 76 | unsigned start, diff; |
77 | 77 | ||
78 | opt_complementary = "=1"; /* exactly one non-option */ | 78 | opt = getopt32(argv, "^" |
79 | opt = getopt32(argv, "cbp:P:t:T:", &opt_min_port, &opt_max_port, &opt_timeout, &opt_min_rtt); | 79 | "cbp:P:t:T:" |
80 | "\0" "=1", /* exactly one non-option */ | ||
81 | &opt_min_port, &opt_max_port, &opt_timeout, &opt_min_rtt | ||
82 | ); | ||
80 | argv += optind; | 83 | argv += optind; |
81 | max_port = xatou_range(opt_max_port, 1, 65535); | 84 | max_port = xatou_range(opt_max_port, 1, 65535); |
82 | port = xatou_range(opt_min_port, 1, max_port); | 85 | port = xatou_range(opt_min_port, 1, max_port); |
diff --git a/networking/slattach.c b/networking/slattach.c index d4659a314..e0a388926 100644 --- a/networking/slattach.c +++ b/networking/slattach.c | |||
@@ -128,8 +128,9 @@ int slattach_main(int argc UNUSED_PARAM, char **argv) | |||
128 | INIT_G(); | 128 | INIT_G(); |
129 | 129 | ||
130 | /* Parse command line options */ | 130 | /* Parse command line options */ |
131 | opt_complementary = "=1"; | 131 | opt = getopt32(argv, "^" "p:s:c:ehmLF" "\0" "=1", |
132 | opt = getopt32(argv, "p:s:c:ehmLF", &proto, &baud_str, &extcmd); | 132 | &proto, &baud_str, &extcmd |
133 | ); | ||
133 | /*argc -= optind;*/ | 134 | /*argc -= optind;*/ |
134 | argv += optind; | 135 | argv += optind; |
135 | 136 | ||
diff --git a/networking/tcpudp.c b/networking/tcpudp.c index 270325164..d4c69e0f7 100644 --- a/networking/tcpudp.c +++ b/networking/tcpudp.c | |||
@@ -269,10 +269,11 @@ int tcpudpsvd_main(int argc UNUSED_PARAM, char **argv) | |||
269 | 269 | ||
270 | tcp = (applet_name[0] == 't'); | 270 | tcp = (applet_name[0] == 't'); |
271 | 271 | ||
272 | /* 3+ args, -i at most once, -p implies -h, -v is counter, -b N, -c N */ | ||
273 | opt_complementary = "-3:i--i:ph:vv"; | ||
274 | #ifdef SSLSVD | 272 | #ifdef SSLSVD |
275 | opts = getopt32(argv, "+c:+C:i:x:u:l:Eb:+hpt:vU:/:Z:K:", | 273 | opts = getopt32(argv, "^+" |
274 | "c:+C:i:x:u:l:Eb:+hpt:vU:/:Z:K:" /* -c NUM, -b NUM */ | ||
275 | /* 3+ args, -i at most once, -p implies -h, -v is a counter */ | ||
276 | "\0" "-3:i--i:ph:vv", | ||
276 | &cmax, &str_C, &instructs, &instructs, &user, &preset_local_hostname, | 277 | &cmax, &str_C, &instructs, &instructs, &user, &preset_local_hostname, |
277 | &backlog, &str_t, &ssluser, &root, &cert, &key, &verbose | 278 | &backlog, &str_t, &ssluser, &root, &cert, &key, &verbose |
278 | ); | 279 | ); |
diff --git a/networking/telnetd.c b/networking/telnetd.c index 16c572e8d..a6bafa21d 100644 --- a/networking/telnetd.c +++ b/networking/telnetd.c | |||
@@ -659,13 +659,15 @@ int telnetd_main(int argc UNUSED_PARAM, char **argv) | |||
659 | #endif | 659 | #endif |
660 | INIT_G(); | 660 | INIT_G(); |
661 | 661 | ||
662 | /* -w NUM, and implies -F. -w and -i don't mix */ | ||
663 | IF_FEATURE_TELNETD_INETD_WAIT(opt_complementary = "wF:i--w:w--i";) | ||
664 | /* Even if !STANDALONE, we accept (and ignore) -i, thus people | 662 | /* Even if !STANDALONE, we accept (and ignore) -i, thus people |
665 | * don't need to guess whether it's ok to pass -i to us */ | 663 | * don't need to guess whether it's ok to pass -i to us */ |
666 | opt = getopt32(argv, "f:l:Ki" | 664 | opt = getopt32(argv, "^" |
665 | "f:l:Ki" | ||
667 | IF_FEATURE_TELNETD_STANDALONE("p:b:F") | 666 | IF_FEATURE_TELNETD_STANDALONE("p:b:F") |
668 | IF_FEATURE_TELNETD_INETD_WAIT("Sw:+"), | 667 | IF_FEATURE_TELNETD_INETD_WAIT("Sw:+") /* -w NUM */ |
668 | "\0" | ||
669 | /* -w implies -F. -w and -i don't mix */ | ||
670 | IF_FEATURE_TELNETD_INETD_WAIT("wF:i--w:w--i"), | ||
669 | &G.issuefile, &G.loginpath | 671 | &G.issuefile, &G.loginpath |
670 | IF_FEATURE_TELNETD_STANDALONE(, &opt_portnbr, &opt_bindaddr) | 672 | IF_FEATURE_TELNETD_STANDALONE(, &opt_portnbr, &opt_bindaddr) |
671 | IF_FEATURE_TELNETD_INETD_WAIT(, &sec_linger) | 673 | IF_FEATURE_TELNETD_INETD_WAIT(, &sec_linger) |
diff --git a/networking/tftp.c b/networking/tftp.c index 5baa80448..73a9829aa 100644 --- a/networking/tftp.c +++ b/networking/tftp.c | |||
@@ -761,15 +761,16 @@ int tftp_main(int argc UNUSED_PARAM, char **argv) | |||
761 | 761 | ||
762 | INIT_G(); | 762 | INIT_G(); |
763 | 763 | ||
764 | /* -p or -g is mandatory, and they are mutually exclusive */ | 764 | IF_GETPUT(opt =) getopt32(argv, "^" |
765 | opt_complementary = "" IF_FEATURE_TFTP_GET("g:") IF_FEATURE_TFTP_PUT("p:") | ||
766 | IF_GETPUT("g--p:p--g:"); | ||
767 | |||
768 | IF_GETPUT(opt =) getopt32(argv, | ||
769 | IF_FEATURE_TFTP_GET("g") IF_FEATURE_TFTP_PUT("p") | 765 | IF_FEATURE_TFTP_GET("g") IF_FEATURE_TFTP_PUT("p") |
770 | "l:r:" IF_FEATURE_TFTP_BLOCKSIZE("b:"), | 766 | "l:r:" IF_FEATURE_TFTP_BLOCKSIZE("b:") |
767 | "\0" | ||
768 | /* -p or -g is mandatory, and they are mutually exclusive */ | ||
769 | IF_FEATURE_TFTP_GET("g:") IF_FEATURE_TFTP_PUT("p:") | ||
770 | IF_GETPUT("g--p:p--g:"), | ||
771 | &local_file, &remote_file | 771 | &local_file, &remote_file |
772 | IF_FEATURE_TFTP_BLOCKSIZE(, &blksize_str)); | 772 | IF_FEATURE_TFTP_BLOCKSIZE(, &blksize_str) |
773 | ); | ||
773 | argv += optind; | 774 | argv += optind; |
774 | 775 | ||
775 | # if ENABLE_FEATURE_TFTP_BLOCKSIZE | 776 | # if ENABLE_FEATURE_TFTP_BLOCKSIZE |
diff --git a/networking/traceroute.c b/networking/traceroute.c index d9c62f7f9..8b6247482 100644 --- a/networking/traceroute.c +++ b/networking/traceroute.c | |||
@@ -833,9 +833,9 @@ common_traceroute_main(int op, char **argv) | |||
833 | 833 | ||
834 | INIT_G(); | 834 | INIT_G(); |
835 | 835 | ||
836 | /* minimum 1 arg */ | 836 | op |= getopt32(argv, "^" |
837 | opt_complementary = "-1:x-x"; | 837 | OPT_STRING |
838 | op |= getopt32(argv, OPT_STRING | 838 | "\0" "-1:x-x" /* minimum 1 arg */ |
839 | , &tos_str, &device, &max_ttl_str, &port_str, &nprobes_str | 839 | , &tos_str, &device, &max_ttl_str, &port_str, &nprobes_str |
840 | , &source, &waittime_str, &pausemsecs_str, &first_ttl_str | 840 | , &source, &waittime_str, &pausemsecs_str, &first_ttl_str |
841 | ); | 841 | ); |
diff --git a/networking/tunctl.c b/networking/tunctl.c index 4c3220025..f2dc645a1 100644 --- a/networking/tunctl.c +++ b/networking/tunctl.c | |||
@@ -83,10 +83,13 @@ int tunctl_main(int argc UNUSED_PARAM, char **argv) | |||
83 | #endif | 83 | #endif |
84 | }; | 84 | }; |
85 | 85 | ||
86 | opt_complementary = "=0:t--d:d--t"; // no arguments; t ^ d | 86 | opts = getopt32(argv, "^" |
87 | opts = getopt32(argv, "f:t:d:" IF_FEATURE_TUNCTL_UG("u:g:b"), | 87 | "f:t:d:" IF_FEATURE_TUNCTL_UG("u:g:b") |
88 | "\0" | ||
89 | "=0:t--d:d--t", // no arguments; t ^ d | ||
88 | &opt_device, &opt_name, &opt_name | 90 | &opt_device, &opt_name, &opt_name |
89 | IF_FEATURE_TUNCTL_UG(, &opt_user, &opt_group)); | 91 | IF_FEATURE_TUNCTL_UG(, &opt_user, &opt_group) |
92 | ); | ||
90 | 93 | ||
91 | // select device | 94 | // select device |
92 | memset(&ifr, 0, sizeof(ifr)); | 95 | memset(&ifr, 0, sizeof(ifr)); |
@@ -153,9 +156,12 @@ int tunctl_main(int argc UNUSED_PARAM, char **argv) | |||
153 | OPT_d = 1 << 2, // delete named interface | 156 | OPT_d = 1 << 2, // delete named interface |
154 | }; | 157 | }; |
155 | 158 | ||
156 | opt_complementary = "=0:t--d:d--t"; // no arguments; t ^ d | 159 | opts = getopt32(argv, "^" |
157 | opts = getopt32(argv, "f:t:d:u:g:b", // u, g, b accepted and ignored | 160 | "f:t:d:u:g:b" // u, g, b accepted and ignored |
158 | &opt_device, &opt_name, &opt_name, NULL, NULL); | 161 | "\0" |
162 | "=0:t--d:d--t", // no arguments; t ^ d | ||
163 | &opt_device, &opt_name, &opt_name, NULL, NULL | ||
164 | ); | ||
159 | 165 | ||
160 | // set interface name | 166 | // set interface name |
161 | memset(&ifr, 0, sizeof(ifr)); | 167 | memset(&ifr, 0, sizeof(ifr)); |
diff --git a/networking/udhcp/d6_dhcpc.c b/networking/udhcp/d6_dhcpc.c index 84969aa81..849ca1388 100644 --- a/networking/udhcp/d6_dhcpc.c +++ b/networking/udhcp/d6_dhcpc.c | |||
@@ -1101,13 +1101,14 @@ int udhcpc6_main(int argc UNUSED_PARAM, char **argv) | |||
1101 | client_config.script = CONFIG_UDHCPC_DEFAULT_SCRIPT; | 1101 | client_config.script = CONFIG_UDHCPC_DEFAULT_SCRIPT; |
1102 | 1102 | ||
1103 | /* Parse command line */ | 1103 | /* Parse command line */ |
1104 | /* O,x: list; -T,-t,-A take numeric param */ | 1104 | opt = getopt32long(argv, "^" |
1105 | IF_UDHCP_VERBOSE(opt_complementary = "vv";) | 1105 | /* O,x: list; -T,-t,-A take numeric param */ |
1106 | opt = getopt32long(argv, "i:np:qRr:s:T:+t:+SA:+O:*ox:*f" | 1106 | "i:np:qRr:s:T:+t:+SA:+O:*ox:*f" |
1107 | USE_FOR_MMU("b") | 1107 | USE_FOR_MMU("b") |
1108 | ///IF_FEATURE_UDHCPC_ARPING("a") | 1108 | ///IF_FEATURE_UDHCPC_ARPING("a") |
1109 | IF_FEATURE_UDHCP_PORT("P:") | 1109 | IF_FEATURE_UDHCP_PORT("P:") |
1110 | "v" | 1110 | "v" |
1111 | "\0" IF_UDHCP_VERBOSE("vv") /* -v is a counter */ | ||
1111 | , udhcpc6_longopts | 1112 | , udhcpc6_longopts |
1112 | , &client_config.interface, &client_config.pidfile, &str_r /* i,p */ | 1113 | , &client_config.interface, &client_config.pidfile, &str_r /* i,p */ |
1113 | , &client_config.script /* s */ | 1114 | , &client_config.script /* s */ |
diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c index 5f87f8586..55e0400b9 100644 --- a/networking/udhcp/dhcpc.c +++ b/networking/udhcp/dhcpc.c | |||
@@ -1295,16 +1295,18 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv) | |||
1295 | str_V = "udhcp "BB_VER; | 1295 | str_V = "udhcp "BB_VER; |
1296 | 1296 | ||
1297 | /* Parse command line */ | 1297 | /* Parse command line */ |
1298 | /* O,x: list; -T,-t,-A take numeric param */ | 1298 | opt = getopt32long(argv, "^" |
1299 | IF_UDHCP_VERBOSE(opt_complementary = "vv";) | 1299 | /* O,x: list; -T,-t,-A take numeric param */ |
1300 | opt = getopt32long(argv, "CV:H:h:F:i:np:qRr:s:T:+t:+SA:+O:*ox:*fB" | 1300 | "CV:H:h:F:i:np:qRr:s:T:+t:+SA:+O:*ox:*fB" |
1301 | USE_FOR_MMU("b") | 1301 | USE_FOR_MMU("b") |
1302 | IF_FEATURE_UDHCPC_ARPING("a::") | 1302 | IF_FEATURE_UDHCPC_ARPING("a::") |
1303 | IF_FEATURE_UDHCP_PORT("P:") | 1303 | IF_FEATURE_UDHCP_PORT("P:") |
1304 | "v" | 1304 | "v" |
1305 | "\0" IF_UDHCP_VERBOSE("vv") /* -v is a counter */ | ||
1305 | , udhcpc_longopts | 1306 | , udhcpc_longopts |
1306 | , &str_V, &str_h, &str_h, &str_F | 1307 | , &str_V, &str_h, &str_h, &str_F |
1307 | , &client_config.interface, &client_config.pidfile, &str_r /* i,p */ | 1308 | , &client_config.interface, &client_config.pidfile /* i,p */ |
1309 | , &str_r /* r */ | ||
1308 | , &client_config.script /* s */ | 1310 | , &client_config.script /* s */ |
1309 | , &discover_timeout, &discover_retries, &tryagain_timeout /* T,t,A */ | 1311 | , &discover_timeout, &discover_retries, &tryagain_timeout /* T,t,A */ |
1310 | , &list_O | 1312 | , &list_O |
diff --git a/networking/udhcp/dhcpd.c b/networking/udhcp/dhcpd.c index 3a5fc2db7..05ddc8649 100644 --- a/networking/udhcp/dhcpd.c +++ b/networking/udhcp/dhcpd.c | |||
@@ -814,11 +814,12 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv) | |||
814 | IF_FEATURE_UDHCP_PORT(SERVER_PORT = 67;) | 814 | IF_FEATURE_UDHCP_PORT(SERVER_PORT = 67;) |
815 | IF_FEATURE_UDHCP_PORT(CLIENT_PORT = 68;) | 815 | IF_FEATURE_UDHCP_PORT(CLIENT_PORT = 68;) |
816 | 816 | ||
817 | opt = getopt32(argv, "^" | ||
818 | "fSI:va:"IF_FEATURE_UDHCP_PORT("P:") | ||
819 | "\0" | ||
817 | #if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 1 | 820 | #if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 1 |
818 | opt_complementary = "vv"; | 821 | "vv" |
819 | #endif | 822 | #endif |
820 | opt = getopt32(argv, "fSI:va:" | ||
821 | IF_FEATURE_UDHCP_PORT("P:") | ||
822 | , &str_I | 823 | , &str_I |
823 | , &str_a | 824 | , &str_a |
824 | IF_FEATURE_UDHCP_PORT(, &str_P) | 825 | IF_FEATURE_UDHCP_PORT(, &str_P) |
diff --git a/networking/udhcp/dumpleases.c b/networking/udhcp/dumpleases.c index fb1860ff6..70d2d1434 100644 --- a/networking/udhcp/dumpleases.c +++ b/networking/udhcp/dumpleases.c | |||
@@ -54,8 +54,12 @@ int dumpleases_main(int argc UNUSED_PARAM, char **argv) | |||
54 | #endif | 54 | #endif |
55 | init_unicode(); | 55 | init_unicode(); |
56 | 56 | ||
57 | opt_complementary = "=0:a--r:r--a"; | 57 | opt = getopt32long(argv, "^" |
58 | opt = getopt32long(argv, "arf:d", dumpleases_longopts, &file); | 58 | "arf:d" |
59 | "\0" "=0:a--r:r--a", | ||
60 | dumpleases_longopts, | ||
61 | &file | ||
62 | ); | ||
59 | 63 | ||
60 | fd = xopen(file, O_RDONLY); | 64 | fd = xopen(file, O_RDONLY); |
61 | 65 | ||
diff --git a/networking/wget.c b/networking/wget.c index b661f727b..e1b40d3fd 100644 --- a/networking/wget.c +++ b/networking/wget.c | |||
@@ -1387,9 +1387,8 @@ IF_DESKTOP( "no-parent\0" No_argument "\xf0") | |||
1387 | 1387 | ||
1388 | #if ENABLE_FEATURE_WGET_LONG_OPTIONS | 1388 | #if ENABLE_FEATURE_WGET_LONG_OPTIONS |
1389 | #endif | 1389 | #endif |
1390 | opt_complementary = "-1" /* at least one URL */ | 1390 | GETOPT32(argv, "^" |
1391 | IF_FEATURE_WGET_LONG_OPTIONS(":\xff::"); /* --header is a list */ | 1391 | "cqSO:P:Y:U:T:+" |
1392 | GETOPT32(argv, "cqSO:P:Y:U:T:+" | ||
1393 | /*ignored:*/ "t:" | 1392 | /*ignored:*/ "t:" |
1394 | /*ignored:*/ "n::" | 1393 | /*ignored:*/ "n::" |
1395 | /* wget has exactly four -n<letter> opts, all of which we can ignore: | 1394 | /* wget has exactly four -n<letter> opts, all of which we can ignore: |
@@ -1400,6 +1399,9 @@ IF_DESKTOP( "no-parent\0" No_argument "\xf0") | |||
1400 | * "n::" above says that we accept -n[ARG]. | 1399 | * "n::" above says that we accept -n[ARG]. |
1401 | * Specifying "n:" would be a bug: "-n ARG" would eat ARG! | 1400 | * Specifying "n:" would be a bug: "-n ARG" would eat ARG! |
1402 | */ | 1401 | */ |
1402 | "\0" | ||
1403 | "-1" /* at least one URL */ | ||
1404 | IF_FEATURE_WGET_LONG_OPTIONS(":\xff::") /* --header is a list */ | ||
1403 | LONGOPTS | 1405 | LONGOPTS |
1404 | , &G.fname_out, &G.dir_prefix, | 1406 | , &G.fname_out, &G.dir_prefix, |
1405 | &G.proxy_flag, &G.user_agent, | 1407 | &G.proxy_flag, &G.user_agent, |
diff --git a/networking/whois.c b/networking/whois.c index 0cb7e5411..fd1cdf43e 100644 --- a/networking/whois.c +++ b/networking/whois.c | |||
@@ -167,8 +167,7 @@ int whois_main(int argc UNUSED_PARAM, char **argv) | |||
167 | int port = 43; | 167 | int port = 43; |
168 | const char *host = "whois.iana.org"; | 168 | const char *host = "whois.iana.org"; |
169 | 169 | ||
170 | opt_complementary = "-1"; | 170 | getopt32(argv, "^" "ih:p:+" "\0" "-1", &host, &port); |
171 | getopt32(argv, "ih:p:+", &host, &port); | ||
172 | argv += optind; | 171 | argv += optind; |
173 | 172 | ||
174 | do { | 173 | do { |
diff --git a/networking/zcip.c b/networking/zcip.c index 94174a165..55440285f 100644 --- a/networking/zcip.c +++ b/networking/zcip.c | |||
@@ -253,8 +253,9 @@ int zcip_main(int argc UNUSED_PARAM, char **argv) | |||
253 | #define QUIT (opts & 2) | 253 | #define QUIT (opts & 2) |
254 | // Parse commandline: prog [options] ifname script | 254 | // Parse commandline: prog [options] ifname script |
255 | // exactly 2 args; -v accumulates and implies -f | 255 | // exactly 2 args; -v accumulates and implies -f |
256 | opt_complementary = "=2:vv:vf"; | 256 | opts = getopt32(argv, "^" "fqr:l:v" "\0" "=2:vv:vf", |
257 | opts = getopt32(argv, "fqr:l:v", &r_opt, &l_opt, &verbose); | 257 | &r_opt, &l_opt, &verbose |
258 | ); | ||
258 | #if !BB_MMU | 259 | #if !BB_MMU |
259 | // on NOMMU reexec early (or else we will rerun things twice) | 260 | // on NOMMU reexec early (or else we will rerun things twice) |
260 | if (!FOREGROUND) | 261 | if (!FOREGROUND) |