aboutsummaryrefslogtreecommitdiff
path: root/networking
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2017-08-08 21:55:02 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2017-08-08 21:55:02 +0200
commit22542eca18e5807b72ddc78999f5101e33f17a53 (patch)
tree1271842a37c6215c998674a44bf7f561a0deff52 /networking
parent036585a911a5fe6c2cd77b808dd9150500f37272 (diff)
downloadbusybox-22542eca18e5807b72ddc78999f5101e33f17a53.tar.gz
getopt32: remove opt_complementary
function old new delta vgetopt32 1318 1392 +74 runsvdir_main 703 713 +10 bb_make_directory 423 425 +2 collect_cpu 546 545 -1 opt_chars 3 - -3 opt_complementary 4 - -4 tftpd_main 567 562 -5 ntp_init 476 471 -5 zcip_main 1266 1256 -10 xxd_main 428 418 -10 whois_main 140 130 -10 who_main 463 453 -10 which_main 212 202 -10 wget_main 2535 2525 -10 watchdog_main 291 281 -10 watch_main 222 212 -10 vlock_main 399 389 -10 uuencode_main 332 322 -10 uudecode_main 316 306 -10 unlink_main 45 35 -10 udhcpd_main 1482 1472 -10 udhcpc_main 2762 2752 -10 tune2fs_main 290 280 -10 tunctl_main 366 356 -10 truncate_main 218 208 -10 tr_main 518 508 -10 time_main 1134 1124 -10 tftp_main 286 276 -10 telnetd_main 1873 1863 -10 tcpudpsvd_main 1785 1775 -10 taskset_main 521 511 -10 tar_main 1009 999 -10 tail_main 1644 1634 -10 syslogd_main 1967 1957 -10 switch_root_main 368 358 -10 svlogd_main 1454 1444 -10 sv 1296 1286 -10 stat_main 104 94 -10 start_stop_daemon_main 1028 1018 -10 split_main 542 532 -10 sort_main 796 786 -10 slattach_main 624 614 -10 shuf_main 504 494 -10 setsid_main 96 86 -10 setserial_main 1132 1122 -10 setfont_main 388 378 -10 setconsole_main 78 68 -10 sendmail_main 1209 1199 -10 sed_main 677 667 -10 script_main 1077 1067 -10 run_parts_main 325 315 -10 rtcwake_main 454 444 -10 rm_main 175 165 -10 reformime_main 119 109 -10 readlink_main 123 113 -10 rdate_main 246 236 -10 pwdx_main 189 179 -10 pstree_main 317 307 -10 pscan_main 663 653 -10 popmaildir_main 818 808 -10 pmap_main 80 70 -10 nc_main 1042 1032 -10 mv_main 558 548 -10 mountpoint_main 477 467 -10 mount_main 1264 1254 -10 modprobe_main 768 758 -10 modinfo_main 333 323 -10 mktemp_main 200 190 -10 mkswap_main 324 314 -10 mkfs_vfat_main 1489 1479 -10 microcom_main 715 705 -10 md5_sha1_sum_main 521 511 -10 man_main 867 857 -10 makedevs_main 1052 1042 -10 ls_main 563 553 -10 losetup_main 432 422 -10 loadfont_main 89 79 -10 ln_main 524 514 -10 link_main 75 65 -10 ipcalc_main 544 534 -10 iostat_main 2397 2387 -10 install_main 768 758 -10 id_main 480 470 -10 i2cset_main 1239 1229 -10 i2cget_main 380 370 -10 i2cdump_main 1482 1472 -10 i2cdetect_main 682 672 -10 hwclock_main 406 396 -10 httpd_main 741 731 -10 grep_main 837 827 -10 getty_main 1559 1549 -10 fuser_main 297 287 -10 ftpgetput_main 345 335 -10 ftpd_main 2232 2222 -10 fstrim_main 251 241 -10 fsfreeze_main 77 67 -10 fsck_minix_main 2921 2911 -10 flock_main 314 304 -10 flashcp_main 740 730 -10 flash_eraseall_main 833 823 -10 fdformat_main 532 522 -10 expand_main 680 670 -10 eject_main 335 325 -10 dumpleases_main 630 620 -10 du_main 314 304 -10 dos2unix_main 441 431 -10 diff_main 1350 1340 -10 df_main 1064 1054 -10 date_main 1095 1085 -10 cut_main 961 951 -10 cryptpw_main 228 218 -10 crontab_main 575 565 -10 crond_main 1149 1139 -10 cp_main 370 360 -10 common_traceroute_main 3834 3824 -10 common_ping_main 1767 1757 -10 comm_main 239 229 -10 cmp_main 655 645 -10 chrt_main 379 369 -10 chpst_main 704 694 -10 chpasswd_main 308 298 -10 chown_main 171 161 -10 chmod_main 158 148 -10 cat_main 428 418 -10 bzip2_main 120 110 -10 blkdiscard_main 264 254 -10 base64_main 221 211 -10 arping_main 1665 1655 -10 ar_main 556 546 -10 adjtimex_main 406 396 -10 adduser_main 882 872 -10 addgroup_main 411 401 -10 acpid_main 1198 1188 -10 optstring 11 - -11 opt_string 18 - -18 OPT_STR 25 - -25 ubi_tools_main 1288 1258 -30 ls_options 31 - -31 ------------------------------------------------------------------------------ (add/remove: 0/6 grow/shrink: 3/129 up/down: 86/-1383) Total: -1297 bytes text data bss dec hex filename 915428 485 6876 922789 e14a5 busybox_old 914629 485 6872 921986 e1182 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'networking')
-rw-r--r--networking/arping.c6
-rw-r--r--networking/ether-wake.c3
-rw-r--r--networking/ftpd.c17
-rw-r--r--networking/ftpgetput.c7
-rw-r--r--networking/httpd.c10
-rw-r--r--networking/ipcalc.c7
-rw-r--r--networking/nc_bloaty.c14
-rw-r--r--networking/ntpd.c9
-rw-r--r--networking/ping.c12
-rw-r--r--networking/pscan.c7
-rw-r--r--networking/slattach.c5
-rw-r--r--networking/tcpudp.c7
-rw-r--r--networking/telnetd.c10
-rw-r--r--networking/tftp.c15
-rw-r--r--networking/traceroute.c6
-rw-r--r--networking/tunctl.c18
-rw-r--r--networking/udhcp/d6_dhcpc.c7
-rw-r--r--networking/udhcp/dhcpc.c10
-rw-r--r--networking/udhcp/dhcpd.c7
-rw-r--r--networking/udhcp/dumpleases.c8
-rw-r--r--networking/wget.c8
-rw-r--r--networking/whois.c3
-rw-r--r--networking/zcip.c5
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)
/* Dad also sets quit_on_reply.
* Advert also sets unsolicited.
*/
- opt_complementary = "=1:Df:AU";
- opt = getopt32(argv, "DUAqfbc:+w:I:s:",
- &count, &str_timeout, &device, &source);
+ opt = getopt32(argv, "^" "DUAqfbc:+w:I:s:" "\0" "=1:Df:AU",
+ &count, &str_timeout, &device, &source
+ );
if (opt & 0x80) /* -w: timeout */
timeout_us = xatou_range(str_timeout, 0, INT_MAX/2000000) * 1000000 + 500000;
//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)
struct whereto_t whereto; /* who to wake up */
/* handle misc user options */
- opt_complementary = "=1";
- flags = getopt32(argv, "bi:p:", &ifname, &pass);
+ flags = getopt32(argv, "^" "bi:p:" "\0" "=1", &ifname, &pass);
if (flags & 4) /* -p */
wol_passwd_sz = get_wol_pw(pass, wol_passwd);
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)
abs_timeout = 1 * 60 * 60;
verbose_S = 0;
G.timeout = 2 * 60;
- opt_complementary = "vv:SS";
#if BB_MMU
- opts = getopt32(argv, "vS"
- IF_FEATURE_FTPD_WRITE("w") "t:+T:+" IF_FEATURE_FTPD_AUTHENTICATION("a:"),
+ opts = getopt32(argv, "^" "vS"
+ IF_FEATURE_FTPD_WRITE("w") "t:+T:+" IF_FEATURE_FTPD_AUTHENTICATION("a:")
+ "\0" "vv:SS",
&G.timeout, &abs_timeout, IF_FEATURE_FTPD_AUTHENTICATION(&anon_opt,)
- &G.verbose, &verbose_S);
+ &G.verbose, &verbose_S
+ );
#else
- opts = getopt32(argv, "l1AvS"
- IF_FEATURE_FTPD_WRITE("w") "t:+T:+" IF_FEATURE_FTPD_AUTHENTICATION("a:"),
+ opts = getopt32(argv, "^" "l1AvS"
+ IF_FEATURE_FTPD_WRITE("w") "t:+T:+" IF_FEATURE_FTPD_AUTHENTICATION("a:")
+ "\0" "vv:SS",
&G.timeout, &abs_timeout, IF_FEATURE_FTPD_AUTHENTICATION(&anon_opt,)
- &G.verbose, &verbose_S);
+ &G.verbose, &verbose_S
+ );
if (opts & (OPT_l|OPT_1)) {
/* Our secret backdoor to ls */
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)
/*
* Decipher the command line
*/
- opt_complementary = "-2:vv:cc"; /* must have 2 to 3 params; -v and -c count */
+ /* must have 2 to 3 params; -v and -c count */
+#define OPTSTRING "^cvu:p:P:" "\0" "-2:?3:vv:cc"
#if ENABLE_FEATURE_FTPGETPUT_LONG_OPTIONS
- getopt32long(argv, "cvu:p:P:", ftpgetput_longopts,
+ getopt32long(argv, OPTSTRING, ftpgetput_longopts,
#else
- getopt32(argv, "cvu:p:P:",
+ getopt32(argv, OPTSTRING,
#endif
&user, &password, &port, &verbose_flag, &do_continue
);
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)
#endif
home_httpd = xrealloc_getcwd_or_warn(NULL);
- /* -v counts, -i implies -f */
- opt_complementary = "vv:if";
/* We do not "absolutize" path given by -h (home) opt.
* If user gives relative path in -h,
* $SCRIPT_FILENAME will not be set. */
- opt = getopt32(argv, "c:d:h:"
+ opt = getopt32(argv, "^"
+ "c:d:h:"
IF_FEATURE_HTTPD_ENCODE_URL_STR("e:")
IF_FEATURE_HTTPD_BASIC_AUTH("r:")
IF_FEATURE_HTTPD_AUTH_MD5("m:")
IF_FEATURE_HTTPD_SETUID("u:")
- "p:ifv",
+ "p:ifv"
+ "\0"
+ /* -v counts, -i implies -f */
+ "vv:if",
&opt_c_configFile, &url_for_decode, &home_httpd
IF_FEATURE_HTTPD_ENCODE_URL_STR(, &url_for_encode)
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)
#define ipaddr (s_ipaddr.s_addr)
char *ipstr;
- opt_complementary = "-1:?2"; /* minimum 1 arg, maximum 2 args */
- opt = GETOPT32(argv, "mbn" IF_FEATURE_IPCALC_FANCY("phs") LONGOPTS);
+ opt = GETOPT32(argv, "^"
+ "mbn" IF_FEATURE_IPCALC_FANCY("phs")
+ "\0" "-1:?2"/*min 1, max 2 args*/
+ LONGOPTS
+ );
argv += optind;
if (opt & SILENT)
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)
e_found:
// -g -G -t -r deleted, unimplemented -a deleted too
- opt_complementary = "?2:vv:ll"; /* max 2 params; -v and -l are counters; -w N */
- getopt32(argv, "np:s:uvw:+" IF_NC_SERVER("lk")
- IF_NC_EXTRA("i:o:z"),
- &str_p, &str_s, &o_wait
- IF_NC_EXTRA(, &str_i, &str_o), &o_verbose IF_NC_SERVER(, &cnt_l));
+ getopt32(argv, "^"
+ "np:s:uvw:+"/* -w N */ IF_NC_SERVER("lk")
+ IF_NC_EXTRA("i:o:z")
+ "\0"
+ "?2:vv:ll", /* max 2 params; -v and -l are counters */
+ &str_p, &str_s, &o_wait
+ IF_NC_EXTRA(, &str_i, &str_o)
+ , &o_verbose IF_NC_SERVER(, &cnt_l)
+ );
argv += optind;
#if ENABLE_NC_EXTRA
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)
/* Parse options */
peers = NULL;
- opt_complementary = "dd:wn" /* -d: counter; -p: list; -w implies -n */
- IF_FEATURE_NTPD_SERVER(":Il"); /* -I implies -l */
- opts = getopt32(argv,
+ opts = getopt32(argv, "^"
"nqNx" /* compat */
"wp:*S:"IF_FEATURE_NTPD_SERVER("l") /* NOT compat */
IF_FEATURE_NTPD_SERVER("I:") /* compat */
"d" /* compat */
"46aAbgL", /* compat, ignored */
- &peers, &G.script_name,
+ "\0"
+ "dd:wn" /* -d: counter; -p: list; -w implies -n */
+ IF_FEATURE_NTPD_SERVER(":Il") /* -I implies -l */
+ , &peers, &G.script_name,
#if ENABLE_FEATURE_NTPD_SERVER
&G.if_name,
#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)
/* Full(er) version */
-#define OPT_STRING ("qvc:+s:t:+w:+W:+I:np:4" IF_PING6("6"))
+/* -c NUM, -t NUM, -w NUM, -W NUM */
+#define OPT_STRING "qvc:+s:t:+w:+W:+I:np:4"IF_PING6("6")
enum {
OPT_QUIET = 1 << 0,
OPT_VERBOSE = 1 << 1,
@@ -863,9 +864,12 @@ static int common_ping_main(int opt, char **argv)
INIT_G();
- /* exactly one argument needed; -v and -q don't mix; -c NUM, -t NUM, -w NUM, -W NUM */
- opt_complementary = "=1:q--v:v--q";
- opt |= getopt32(argv, OPT_STRING, &pingcount, &str_s, &opt_ttl, &deadline, &timeout, &str_I, &str_p);
+ opt |= getopt32(argv, "^"
+ OPT_STRING
+ /* exactly one arg; -v and -q don't mix */
+ "\0" "=1:q--v:v--q",
+ &pingcount, &str_s, &opt_ttl, &deadline, &timeout, &str_I, &str_p
+ );
if (opt & OPT_s)
datalen = xatou16(str_s); // -s
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)
unsigned rtt_4;
unsigned start, diff;
- opt_complementary = "=1"; /* exactly one non-option */
- opt = getopt32(argv, "cbp:P:t:T:", &opt_min_port, &opt_max_port, &opt_timeout, &opt_min_rtt);
+ opt = getopt32(argv, "^"
+ "cbp:P:t:T:"
+ "\0" "=1", /* exactly one non-option */
+ &opt_min_port, &opt_max_port, &opt_timeout, &opt_min_rtt
+ );
argv += optind;
max_port = xatou_range(opt_max_port, 1, 65535);
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)
INIT_G();
/* Parse command line options */
- opt_complementary = "=1";
- opt = getopt32(argv, "p:s:c:ehmLF", &proto, &baud_str, &extcmd);
+ opt = getopt32(argv, "^" "p:s:c:ehmLF" "\0" "=1",
+ &proto, &baud_str, &extcmd
+ );
/*argc -= optind;*/
argv += optind;
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)
tcp = (applet_name[0] == 't');
- /* 3+ args, -i at most once, -p implies -h, -v is counter, -b N, -c N */
- opt_complementary = "-3:i--i:ph:vv";
#ifdef SSLSVD
- opts = getopt32(argv, "+c:+C:i:x:u:l:Eb:+hpt:vU:/:Z:K:",
+ opts = getopt32(argv, "^+"
+ "c:+C:i:x:u:l:Eb:+hpt:vU:/:Z:K:" /* -c NUM, -b NUM */
+ /* 3+ args, -i at most once, -p implies -h, -v is a counter */
+ "\0" "-3:i--i:ph:vv",
&cmax, &str_C, &instructs, &instructs, &user, &preset_local_hostname,
&backlog, &str_t, &ssluser, &root, &cert, &key, &verbose
);
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)
#endif
INIT_G();
- /* -w NUM, and implies -F. -w and -i don't mix */
- IF_FEATURE_TELNETD_INETD_WAIT(opt_complementary = "wF:i--w:w--i";)
/* Even if !STANDALONE, we accept (and ignore) -i, thus people
* don't need to guess whether it's ok to pass -i to us */
- opt = getopt32(argv, "f:l:Ki"
+ opt = getopt32(argv, "^"
+ "f:l:Ki"
IF_FEATURE_TELNETD_STANDALONE("p:b:F")
- IF_FEATURE_TELNETD_INETD_WAIT("Sw:+"),
+ IF_FEATURE_TELNETD_INETD_WAIT("Sw:+") /* -w NUM */
+ "\0"
+ /* -w implies -F. -w and -i don't mix */
+ IF_FEATURE_TELNETD_INETD_WAIT("wF:i--w:w--i"),
&G.issuefile, &G.loginpath
IF_FEATURE_TELNETD_STANDALONE(, &opt_portnbr, &opt_bindaddr)
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)
INIT_G();
- /* -p or -g is mandatory, and they are mutually exclusive */
- opt_complementary = "" IF_FEATURE_TFTP_GET("g:") IF_FEATURE_TFTP_PUT("p:")
- IF_GETPUT("g--p:p--g:");
-
- IF_GETPUT(opt =) getopt32(argv,
+ IF_GETPUT(opt =) getopt32(argv, "^"
IF_FEATURE_TFTP_GET("g") IF_FEATURE_TFTP_PUT("p")
- "l:r:" IF_FEATURE_TFTP_BLOCKSIZE("b:"),
+ "l:r:" IF_FEATURE_TFTP_BLOCKSIZE("b:")
+ "\0"
+ /* -p or -g is mandatory, and they are mutually exclusive */
+ IF_FEATURE_TFTP_GET("g:") IF_FEATURE_TFTP_PUT("p:")
+ IF_GETPUT("g--p:p--g:"),
&local_file, &remote_file
- IF_FEATURE_TFTP_BLOCKSIZE(, &blksize_str));
+ IF_FEATURE_TFTP_BLOCKSIZE(, &blksize_str)
+ );
argv += optind;
# 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)
INIT_G();
- /* minimum 1 arg */
- opt_complementary = "-1:x-x";
- op |= getopt32(argv, OPT_STRING
+ op |= getopt32(argv, "^"
+ OPT_STRING
+ "\0" "-1:x-x" /* minimum 1 arg */
, &tos_str, &device, &max_ttl_str, &port_str, &nprobes_str
, &source, &waittime_str, &pausemsecs_str, &first_ttl_str
);
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)
#endif
};
- opt_complementary = "=0:t--d:d--t"; // no arguments; t ^ d
- opts = getopt32(argv, "f:t:d:" IF_FEATURE_TUNCTL_UG("u:g:b"),
+ opts = getopt32(argv, "^"
+ "f:t:d:" IF_FEATURE_TUNCTL_UG("u:g:b")
+ "\0"
+ "=0:t--d:d--t", // no arguments; t ^ d
&opt_device, &opt_name, &opt_name
- IF_FEATURE_TUNCTL_UG(, &opt_user, &opt_group));
+ IF_FEATURE_TUNCTL_UG(, &opt_user, &opt_group)
+ );
// select device
memset(&ifr, 0, sizeof(ifr));
@@ -153,9 +156,12 @@ int tunctl_main(int argc UNUSED_PARAM, char **argv)
OPT_d = 1 << 2, // delete named interface
};
- opt_complementary = "=0:t--d:d--t"; // no arguments; t ^ d
- opts = getopt32(argv, "f:t:d:u:g:b", // u, g, b accepted and ignored
- &opt_device, &opt_name, &opt_name, NULL, NULL);
+ opts = getopt32(argv, "^"
+ "f:t:d:u:g:b" // u, g, b accepted and ignored
+ "\0"
+ "=0:t--d:d--t", // no arguments; t ^ d
+ &opt_device, &opt_name, &opt_name, NULL, NULL
+ );
// set interface name
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)
client_config.script = CONFIG_UDHCPC_DEFAULT_SCRIPT;
/* Parse command line */
- /* O,x: list; -T,-t,-A take numeric param */
- IF_UDHCP_VERBOSE(opt_complementary = "vv";)
- opt = getopt32long(argv, "i:np:qRr:s:T:+t:+SA:+O:*ox:*f"
+ opt = getopt32long(argv, "^"
+ /* O,x: list; -T,-t,-A take numeric param */
+ "i:np:qRr:s:T:+t:+SA:+O:*ox:*f"
USE_FOR_MMU("b")
///IF_FEATURE_UDHCPC_ARPING("a")
IF_FEATURE_UDHCP_PORT("P:")
"v"
+ "\0" IF_UDHCP_VERBOSE("vv") /* -v is a counter */
, udhcpc6_longopts
, &client_config.interface, &client_config.pidfile, &str_r /* i,p */
, &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)
str_V = "udhcp "BB_VER;
/* Parse command line */
- /* O,x: list; -T,-t,-A take numeric param */
- IF_UDHCP_VERBOSE(opt_complementary = "vv";)
- opt = getopt32long(argv, "CV:H:h:F:i:np:qRr:s:T:+t:+SA:+O:*ox:*fB"
+ opt = getopt32long(argv, "^"
+ /* O,x: list; -T,-t,-A take numeric param */
+ "CV:H:h:F:i:np:qRr:s:T:+t:+SA:+O:*ox:*fB"
USE_FOR_MMU("b")
IF_FEATURE_UDHCPC_ARPING("a::")
IF_FEATURE_UDHCP_PORT("P:")
"v"
+ "\0" IF_UDHCP_VERBOSE("vv") /* -v is a counter */
, udhcpc_longopts
, &str_V, &str_h, &str_h, &str_F
- , &client_config.interface, &client_config.pidfile, &str_r /* i,p */
+ , &client_config.interface, &client_config.pidfile /* i,p */
+ , &str_r /* r */
, &client_config.script /* s */
, &discover_timeout, &discover_retries, &tryagain_timeout /* T,t,A */
, &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)
IF_FEATURE_UDHCP_PORT(SERVER_PORT = 67;)
IF_FEATURE_UDHCP_PORT(CLIENT_PORT = 68;)
+ opt = getopt32(argv, "^"
+ "fSI:va:"IF_FEATURE_UDHCP_PORT("P:")
+ "\0"
#if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 1
- opt_complementary = "vv";
+ "vv"
#endif
- opt = getopt32(argv, "fSI:va:"
- IF_FEATURE_UDHCP_PORT("P:")
, &str_I
, &str_a
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)
#endif
init_unicode();
- opt_complementary = "=0:a--r:r--a";
- opt = getopt32long(argv, "arf:d", dumpleases_longopts, &file);
+ opt = getopt32long(argv, "^"
+ "arf:d"
+ "\0" "=0:a--r:r--a",
+ dumpleases_longopts,
+ &file
+ );
fd = xopen(file, O_RDONLY);
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")
#if ENABLE_FEATURE_WGET_LONG_OPTIONS
#endif
- opt_complementary = "-1" /* at least one URL */
- IF_FEATURE_WGET_LONG_OPTIONS(":\xff::"); /* --header is a list */
- GETOPT32(argv, "cqSO:P:Y:U:T:+"
+ GETOPT32(argv, "^"
+ "cqSO:P:Y:U:T:+"
/*ignored:*/ "t:"
/*ignored:*/ "n::"
/* 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")
* "n::" above says that we accept -n[ARG].
* Specifying "n:" would be a bug: "-n ARG" would eat ARG!
*/
+ "\0"
+ "-1" /* at least one URL */
+ IF_FEATURE_WGET_LONG_OPTIONS(":\xff::") /* --header is a list */
LONGOPTS
, &G.fname_out, &G.dir_prefix,
&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)
int port = 43;
const char *host = "whois.iana.org";
- opt_complementary = "-1";
- getopt32(argv, "ih:p:+", &host, &port);
+ getopt32(argv, "^" "ih:p:+" "\0" "-1", &host, &port);
argv += optind;
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)
#define QUIT (opts & 2)
// Parse commandline: prog [options] ifname script
// exactly 2 args; -v accumulates and implies -f
- opt_complementary = "=2:vv:vf";
- opts = getopt32(argv, "fqr:l:v", &r_opt, &l_opt, &verbose);
+ opts = getopt32(argv, "^" "fqr:l:v" "\0" "=2:vv:vf",
+ &r_opt, &l_opt, &verbose
+ );
#if !BB_MMU
// on NOMMU reexec early (or else we will rerun things twice)
if (!FOREGROUND)