aboutsummaryrefslogtreecommitdiff
path: root/archival
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2017-08-08 16:38:18 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2017-08-08 17:09:40 +0200
commit036585a911a5fe6c2cd77b808dd9150500f37272 (patch)
treeaa7c65b4d09c74642f622a1ef5da982d6ed4940a /archival
parent00677b5e35dd97f415f0b0bef25b55865f55ab33 (diff)
downloadbusybox-w32-036585a911a5fe6c2cd77b808dd9150500f37272.tar.gz
busybox-w32-036585a911a5fe6c2cd77b808dd9150500f37272.tar.bz2
busybox-w32-036585a911a5fe6c2cd77b808dd9150500f37272.zip
getopt32: remove applet_long_options
FEATURE_GETOPT_LONG made dependent on LONG_OPTS. The folloving options are removed, now LONG_OPTS enables long options for affected applets: FEATURE_ENV_LONG_OPTIONS FEATURE_EXPAND_LONG_OPTIONS FEATURE_UNEXPAND_LONG_OPTIONS FEATURE_MKDIR_LONG_OPTIONS FEATURE_MV_LONG_OPTIONS FEATURE_RMDIR_LONG_OPTIONS FEATURE_ADDGROUP_LONG_OPTIONS FEATURE_ADDUSER_LONG_OPTIONS FEATURE_HWCLOCK_LONG_OPTIONS FEATURE_NSENTER_LONG_OPTS FEATURE_CHCON_LONG_OPTIONS FEATURE_RUNCON_LONG_OPTIONS They either had a small number of long options, or their long options are essential. Example: upstream addgroup and adduser have ONLY longopts, we should probably go further and get rid of non-standard short options. To this end, make addgroup and adduser "select LONG_OPTS". We had this breakage caused by us even in our own package! #if ENABLE_LONG_OPTS || !ENABLE_ADDGROUP /* We try to use --gid, not -g, because "standard" addgroup * has no short option -g, it has only long --gid. */ argv[1] = (char*)"--gid"; #else /* Breaks if system in fact does NOT use busybox addgroup */ argv[1] = (char*)"-g"; #endif xargs: its lone longopt no longer depends on DESKTOP, only on LONG_OPTS. hwclock TODO: get rid of incompatible -t, -l aliases to --systz, --localtime Shorten help texts by omitting long option when short opt alternative exists. Reduction of size comes from the fact that store of an immediate (an address of longopts) to a fixed address (global variable) is a longer insn than pushing that immediate or passing it in a register. This effect is CPU-agnostic. function old new delta getopt32 1350 22 -1328 vgetopt32 - 1318 +1318 getopt32long - 24 +24 tftpd_main 562 567 +5 scan_recursive 376 380 +4 collect_cpu 545 546 +1 date_main 1096 1095 -1 hostname_main 262 259 -3 uname_main 259 255 -4 setpriv_main 362 358 -4 rmdir_main 191 187 -4 mv_main 562 558 -4 ipcalc_main 548 544 -4 ifenslave_main 641 637 -4 gzip_main 192 188 -4 gunzip_main 77 73 -4 fsfreeze_main 81 77 -4 flock_main 318 314 -4 deluser_main 337 333 -4 cp_main 374 370 -4 chown_main 175 171 -4 applet_long_options 4 - -4 xargs_main 894 889 -5 wget_main 2540 2535 -5 udhcpc_main 2767 2762 -5 touch_main 436 431 -5 tar_main 1014 1009 -5 start_stop_daemon_main 1033 1028 -5 sed_main 682 677 -5 script_main 1082 1077 -5 run_parts_main 330 325 -5 rtcwake_main 459 454 -5 od_main 2169 2164 -5 nl_main 201 196 -5 modprobe_main 773 768 -5 mkdir_main 160 155 -5 ls_main 568 563 -5 install_main 773 768 -5 hwclock_main 411 406 -5 getopt_main 622 617 -5 fstrim_main 256 251 -5 env_main 198 193 -5 dumpleases_main 635 630 -5 dpkg_main 3991 3986 -5 diff_main 1355 1350 -5 cryptpw_main 233 228 -5 cpio_main 593 588 -5 conspy_main 1135 1130 -5 chpasswd_main 313 308 -5 adduser_main 887 882 -5 addgroup_main 416 411 -5 ftpgetput_main 351 345 -6 get_terminal_width_height 242 234 -8 expand_main 690 680 -10 static.expand_longopts 18 - -18 static.unexpand_longopts 27 - -27 mkdir_longopts 28 - -28 env_longopts 30 - -30 static.ifenslave_longopts 34 - -34 mv_longopts 46 - -46 static.rmdir_longopts 48 - -48 packed_usage 31739 31687 -52 ------------------------------------------------------------------------------ (add/remove: 2/8 grow/shrink: 3/49 up/down: 1352/-1840) Total: -488 bytes text data bss dec hex filename 915681 485 6880 923046 e15a6 busybox_old 915428 485 6876 922789 e14a5 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'archival')
-rw-r--r--archival/bbunzip.c5
-rw-r--r--archival/cpio.c7
-rw-r--r--archival/dpkg.c3
-rw-r--r--archival/gzip.c7
-rw-r--r--archival/tar.c11
5 files changed, 18 insertions, 15 deletions
diff --git a/archival/bbunzip.c b/archival/bbunzip.c
index 9b9fdc87b..20ab893da 100644
--- a/archival/bbunzip.c
+++ b/archival/bbunzip.c
@@ -389,9 +389,10 @@ int gunzip_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
389int gunzip_main(int argc UNUSED_PARAM, char **argv) 389int gunzip_main(int argc UNUSED_PARAM, char **argv)
390{ 390{
391#if ENABLE_FEATURE_GUNZIP_LONG_OPTIONS 391#if ENABLE_FEATURE_GUNZIP_LONG_OPTIONS
392 applet_long_options = gunzip_longopts; 392 getopt32long(argv, "cfkvqdtn", gunzip_longopts);
393#endif 393#else
394 getopt32(argv, "cfkvqdtn"); 394 getopt32(argv, "cfkvqdtn");
395#endif
395 argv += optind; 396 argv += optind;
396 397
397 /* If called as zcat... 398 /* If called as zcat...
diff --git a/archival/cpio.c b/archival/cpio.c
index 38bab8257..f2165be3a 100644
--- a/archival/cpio.c
+++ b/archival/cpio.c
@@ -360,9 +360,8 @@ int cpio_main(int argc UNUSED_PARAM, char **argv)
360 char *cpio_owner; 360 char *cpio_owner;
361 IF_FEATURE_CPIO_O(const char *cpio_fmt = "";) 361 IF_FEATURE_CPIO_O(const char *cpio_fmt = "";)
362 unsigned opt; 362 unsigned opt;
363
364#if ENABLE_LONG_OPTS 363#if ENABLE_LONG_OPTS
365 applet_long_options = 364 const char *long_opts =
366 "extract\0" No_argument "i" 365 "extract\0" No_argument "i"
367 "list\0" No_argument "t" 366 "list\0" No_argument "t"
368#if ENABLE_FEATURE_CPIO_O 367#if ENABLE_FEATURE_CPIO_O
@@ -390,9 +389,9 @@ int cpio_main(int argc UNUSED_PARAM, char **argv)
390 /* -L makes sense only with -o or -p */ 389 /* -L makes sense only with -o or -p */
391 390
392#if !ENABLE_FEATURE_CPIO_O 391#if !ENABLE_FEATURE_CPIO_O
393 opt = getopt32(argv, OPTION_STR, &cpio_filename, &cpio_owner); 392 opt = getopt32long(argv, OPTION_STR, long_opts, &cpio_filename, &cpio_owner);
394#else 393#else
395 opt = getopt32(argv, OPTION_STR "oH:" IF_FEATURE_CPIO_P("p"), 394 opt = getopt32long(argv, OPTION_STR "oH:" IF_FEATURE_CPIO_P("p"), long_opts,
396 &cpio_filename, &cpio_owner, &cpio_fmt); 395 &cpio_filename, &cpio_owner, &cpio_fmt);
397#endif 396#endif
398 argv += optind; 397 argv += optind;
diff --git a/archival/dpkg.c b/archival/dpkg.c
index 90ad8766c..852e0cac2 100644
--- a/archival/dpkg.c
+++ b/archival/dpkg.c
@@ -1766,8 +1766,7 @@ int dpkg_main(int argc UNUSED_PARAM, char **argv)
1766 1766
1767 INIT_G(); 1767 INIT_G();
1768 1768
1769 IF_LONG_OPTS(applet_long_options = dpkg_longopts); 1769 opt = getopt32long(argv, "CilPruF:", dpkg_longopts, &str_f);
1770 opt = getopt32(argv, "CilPruF:", &str_f);
1771 argv += optind; 1770 argv += optind;
1772 //if (opt & OPT_configure) ... // -C 1771 //if (opt & OPT_configure) ... // -C
1773 if (opt & OPT_force) { // -F (--force in official dpkg) 1772 if (opt & OPT_force) { // -F (--force in official dpkg)
diff --git a/archival/gzip.c b/archival/gzip.c
index 4cf34ac28..9c53895e9 100644
--- a/archival/gzip.c
+++ b/archival/gzip.c
@@ -2216,11 +2216,12 @@ int gzip_main(int argc UNUSED_PARAM, char **argv)
2216 SET_PTR_TO_GLOBALS((char *)xzalloc(sizeof(struct globals)+sizeof(struct globals2)) 2216 SET_PTR_TO_GLOBALS((char *)xzalloc(sizeof(struct globals)+sizeof(struct globals2))
2217 + sizeof(struct globals)); 2217 + sizeof(struct globals));
2218 2218
2219#if ENABLE_FEATURE_GZIP_LONG_OPTIONS
2220 applet_long_options = gzip_longopts;
2221#endif
2222 /* Must match bbunzip's constants OPT_STDOUT, OPT_FORCE! */ 2219 /* Must match bbunzip's constants OPT_STDOUT, OPT_FORCE! */
2220#if ENABLE_FEATURE_GZIP_LONG_OPTIONS
2221 opt = getopt32long(argv, "cfkv" IF_FEATURE_GZIP_DECOMPRESS("dt") "qn123456789", gzip_longopts);
2222#else
2223 opt = getopt32(argv, "cfkv" IF_FEATURE_GZIP_DECOMPRESS("dt") "qn123456789"); 2223 opt = getopt32(argv, "cfkv" IF_FEATURE_GZIP_DECOMPRESS("dt") "qn123456789");
2224#endif
2224#if ENABLE_FEATURE_GZIP_DECOMPRESS /* gunzip_main may not be visible... */ 2225#if ENABLE_FEATURE_GZIP_DECOMPRESS /* gunzip_main may not be visible... */
2225 if (opt & 0x30) // -d and/or -t 2226 if (opt & 0x30) // -d and/or -t
2226 return gunzip_main(argc, argv); 2227 return gunzip_main(argc, argv);
diff --git a/archival/tar.c b/archival/tar.c
index f62b33005..44ab246c0 100644
--- a/archival/tar.c
+++ b/archival/tar.c
@@ -940,6 +940,11 @@ static const char tar_longopts[] ALIGN1 =
940 "exclude\0" Required_argument "\xff" 940 "exclude\0" Required_argument "\xff"
941# endif 941# endif
942 ; 942 ;
943# define GETOPT32 getopt32long
944# define LONGOPTS ,tar_longopts
945#else
946# define GETOPT32 getopt32
947# define LONGOPTS
943#endif 948#endif
944 949
945int tar_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 950int tar_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
@@ -980,9 +985,6 @@ int tar_main(int argc UNUSED_PARAM, char **argv)
980 ":\xf9+" // --strip-components=NUM 985 ":\xf9+" // --strip-components=NUM
981#endif 986#endif
982 ; 987 ;
983#if ENABLE_FEATURE_TAR_LONG_OPTIONS
984 applet_long_options = tar_longopts;
985#endif
986#if ENABLE_DESKTOP 988#if ENABLE_DESKTOP
987 /* Lie to buildroot when it starts asking stupid questions. */ 989 /* Lie to buildroot when it starts asking stupid questions. */
988 if (argv[1] && strcmp(argv[1], "--version") == 0) { 990 if (argv[1] && strcmp(argv[1], "--version") == 0) {
@@ -1019,7 +1021,7 @@ int tar_main(int argc UNUSED_PARAM, char **argv)
1019 } 1021 }
1020 } 1022 }
1021#endif 1023#endif
1022 opt = getopt32(argv, 1024 opt = GETOPT32(argv,
1023 "txC:f:Oopvk" 1025 "txC:f:Oopvk"
1024 IF_FEATURE_TAR_CREATE( "ch" ) 1026 IF_FEATURE_TAR_CREATE( "ch" )
1025 IF_FEATURE_SEAMLESS_BZ2( "j" ) 1027 IF_FEATURE_SEAMLESS_BZ2( "j" )
@@ -1030,6 +1032,7 @@ int tar_main(int argc UNUSED_PARAM, char **argv)
1030 IF_FEATURE_SEAMLESS_Z( "Z" ) 1032 IF_FEATURE_SEAMLESS_Z( "Z" )
1031 IF_FEATURE_TAR_NOPRESERVE_TIME("m") 1033 IF_FEATURE_TAR_NOPRESERVE_TIME("m")
1032 IF_FEATURE_TAR_LONG_OPTIONS("\xf9:") // --strip-components 1034 IF_FEATURE_TAR_LONG_OPTIONS("\xf9:") // --strip-components
1035 LONGOPTS
1033 , &base_dir // -C dir 1036 , &base_dir // -C dir
1034 , &tar_filename // -f filename 1037 , &tar_filename // -f filename
1035 IF_FEATURE_TAR_FROM(, &(tar_handle->accept)) // T 1038 IF_FEATURE_TAR_FROM(, &(tar_handle->accept)) // T