aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/applets.src.h5
-rw-r--r--include/busybox.h13
-rw-r--r--include/libbb.h43
-rw-r--r--include/platform.h10
-rw-r--r--include/unarchive.h62
-rw-r--r--include/usage.src.h216
6 files changed, 135 insertions, 214 deletions
diff --git a/include/applets.src.h b/include/applets.src.h
index 9162b66c7..5d84597b0 100644
--- a/include/applets.src.h
+++ b/include/applets.src.h
@@ -76,7 +76,6 @@ IF_ASH(APPLET(ash, _BB_DIR_BIN, _BB_SUID_DROP))
76IF_AWK(APPLET_NOEXEC(awk, awk, _BB_DIR_USR_BIN, _BB_SUID_DROP, awk)) 76IF_AWK(APPLET_NOEXEC(awk, awk, _BB_DIR_USR_BIN, _BB_SUID_DROP, awk))
77IF_BASENAME(APPLET_NOFORK(basename, basename, _BB_DIR_USR_BIN, _BB_SUID_DROP, basename)) 77IF_BASENAME(APPLET_NOFORK(basename, basename, _BB_DIR_USR_BIN, _BB_SUID_DROP, basename))
78IF_FEATURE_BASH_IS_ASH(APPLET_ODDNAME(bash, ash, _BB_DIR_BIN, _BB_SUID_DROP, bash)) 78IF_FEATURE_BASH_IS_ASH(APPLET_ODDNAME(bash, ash, _BB_DIR_BIN, _BB_SUID_DROP, bash))
79IF_FEATURE_BASH_IS_HUSH(APPLET_ODDNAME(bash, hush, _BB_DIR_BIN, _BB_SUID_DROP, bash))
80IF_BBCONFIG(APPLET(bbconfig, _BB_DIR_BIN, _BB_SUID_DROP)) 79IF_BBCONFIG(APPLET(bbconfig, _BB_DIR_BIN, _BB_SUID_DROP))
81//IF_BBSH(APPLET(bbsh, _BB_DIR_BIN, _BB_SUID_DROP)) 80//IF_BBSH(APPLET(bbsh, _BB_DIR_BIN, _BB_SUID_DROP))
82IF_BEEP(APPLET(beep, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 81IF_BEEP(APPLET(beep, _BB_DIR_USR_BIN, _BB_SUID_DROP))
@@ -183,7 +182,6 @@ IF_HEXDUMP(APPLET_NOEXEC(hexdump, hexdump, _BB_DIR_USR_BIN, _BB_SUID_DROP, hexdu
183IF_HOSTID(APPLET_NOFORK(hostid, hostid, _BB_DIR_USR_BIN, _BB_SUID_DROP, hostid)) 182IF_HOSTID(APPLET_NOFORK(hostid, hostid, _BB_DIR_USR_BIN, _BB_SUID_DROP, hostid))
184IF_HOSTNAME(APPLET(hostname, _BB_DIR_BIN, _BB_SUID_DROP)) 183IF_HOSTNAME(APPLET(hostname, _BB_DIR_BIN, _BB_SUID_DROP))
185IF_HTTPD(APPLET(httpd, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 184IF_HTTPD(APPLET(httpd, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
186IF_HUSH(APPLET(hush, _BB_DIR_BIN, _BB_SUID_DROP))
187IF_HWCLOCK(APPLET(hwclock, _BB_DIR_SBIN, _BB_SUID_DROP)) 185IF_HWCLOCK(APPLET(hwclock, _BB_DIR_SBIN, _BB_SUID_DROP))
188IF_ID(APPLET(id, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 186IF_ID(APPLET(id, _BB_DIR_USR_BIN, _BB_SUID_DROP))
189IF_IFCONFIG(APPLET(ifconfig, _BB_DIR_SBIN, _BB_SUID_DROP)) 187IF_IFCONFIG(APPLET(ifconfig, _BB_DIR_SBIN, _BB_SUID_DROP))
@@ -218,7 +216,6 @@ IF_KILL(APPLET(kill, _BB_DIR_BIN, _BB_SUID_DROP))
218IF_KILLALL(APPLET_ODDNAME(killall, kill, _BB_DIR_USR_BIN, _BB_SUID_DROP, killall)) 216IF_KILLALL(APPLET_ODDNAME(killall, kill, _BB_DIR_USR_BIN, _BB_SUID_DROP, killall))
219IF_KILLALL5(APPLET_ODDNAME(killall5, kill, _BB_DIR_USR_BIN, _BB_SUID_DROP, killall5)) 217IF_KILLALL5(APPLET_ODDNAME(killall5, kill, _BB_DIR_USR_BIN, _BB_SUID_DROP, killall5))
220IF_KLOGD(APPLET(klogd, _BB_DIR_SBIN, _BB_SUID_DROP)) 218IF_KLOGD(APPLET(klogd, _BB_DIR_SBIN, _BB_SUID_DROP))
221IF_LASH(APPLET(lash, _BB_DIR_BIN, _BB_SUID_DROP))
222IF_LAST(APPLET(last, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 219IF_LAST(APPLET(last, _BB_DIR_USR_BIN, _BB_SUID_DROP))
223IF_LENGTH(APPLET_NOFORK(length, length, _BB_DIR_USR_BIN, _BB_SUID_DROP, length)) 220IF_LENGTH(APPLET_NOFORK(length, length, _BB_DIR_USR_BIN, _BB_SUID_DROP, length))
224IF_LESS(APPLET(less, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 221IF_LESS(APPLET(less, _BB_DIR_USR_BIN, _BB_SUID_DROP))
@@ -273,7 +270,6 @@ IF_MODPROBE_SMALL(APPLET(modprobe, _BB_DIR_SBIN, _BB_SUID_DROP))
273IF_MORE(APPLET(more, _BB_DIR_BIN, _BB_SUID_DROP)) 270IF_MORE(APPLET(more, _BB_DIR_BIN, _BB_SUID_DROP))
274IF_MOUNT(APPLET(mount, _BB_DIR_BIN, IF_DESKTOP(_BB_SUID_MAYBE) IF_NOT_DESKTOP(_BB_SUID_DROP))) 271IF_MOUNT(APPLET(mount, _BB_DIR_BIN, IF_DESKTOP(_BB_SUID_MAYBE) IF_NOT_DESKTOP(_BB_SUID_DROP)))
275IF_MOUNTPOINT(APPLET(mountpoint, _BB_DIR_BIN, _BB_SUID_DROP)) 272IF_MOUNTPOINT(APPLET(mountpoint, _BB_DIR_BIN, _BB_SUID_DROP))
276IF_MSH(APPLET(msh, _BB_DIR_BIN, _BB_SUID_DROP))
277IF_MT(APPLET(mt, _BB_DIR_BIN, _BB_SUID_DROP)) 273IF_MT(APPLET(mt, _BB_DIR_BIN, _BB_SUID_DROP))
278IF_MV(APPLET(mv, _BB_DIR_BIN, _BB_SUID_DROP)) 274IF_MV(APPLET(mv, _BB_DIR_BIN, _BB_SUID_DROP))
279IF_NAMEIF(APPLET(nameif, _BB_DIR_SBIN, _BB_SUID_DROP)) 275IF_NAMEIF(APPLET(nameif, _BB_DIR_SBIN, _BB_SUID_DROP))
@@ -349,7 +345,6 @@ IF_SETSEBOOL(APPLET(setsebool, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
349IF_SETSID(APPLET(setsid, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 345IF_SETSID(APPLET(setsid, _BB_DIR_USR_BIN, _BB_SUID_DROP))
350IF_SETUIDGID(APPLET_ODDNAME(setuidgid, chpst, _BB_DIR_USR_BIN, _BB_SUID_DROP, setuidgid)) 346IF_SETUIDGID(APPLET_ODDNAME(setuidgid, chpst, _BB_DIR_USR_BIN, _BB_SUID_DROP, setuidgid))
351IF_FEATURE_SH_IS_ASH(APPLET_ODDNAME(sh, ash, _BB_DIR_BIN, _BB_SUID_DROP, sh)) 347IF_FEATURE_SH_IS_ASH(APPLET_ODDNAME(sh, ash, _BB_DIR_BIN, _BB_SUID_DROP, sh))
352IF_FEATURE_SH_IS_HUSH(APPLET_ODDNAME(sh, hush, _BB_DIR_BIN, _BB_SUID_DROP, sh))
353IF_SHA1SUM(APPLET_ODDNAME(sha1sum, md5_sha1_sum, _BB_DIR_USR_BIN, _BB_SUID_DROP, sha1sum)) 348IF_SHA1SUM(APPLET_ODDNAME(sha1sum, md5_sha1_sum, _BB_DIR_USR_BIN, _BB_SUID_DROP, sha1sum))
354IF_SHA256SUM(APPLET_ODDNAME(sha256sum, md5_sha1_sum, _BB_DIR_USR_BIN, _BB_SUID_DROP, sha256sum)) 349IF_SHA256SUM(APPLET_ODDNAME(sha256sum, md5_sha1_sum, _BB_DIR_USR_BIN, _BB_SUID_DROP, sha256sum))
355IF_SHA512SUM(APPLET_ODDNAME(sha512sum, md5_sha1_sum, _BB_DIR_USR_BIN, _BB_SUID_DROP, sha512sum)) 350IF_SHA512SUM(APPLET_ODDNAME(sha512sum, md5_sha1_sum, _BB_DIR_USR_BIN, _BB_SUID_DROP, sha512sum))
diff --git a/include/busybox.h b/include/busybox.h
index 48ce856ea..48fc0b4c8 100644
--- a/include/busybox.h
+++ b/include/busybox.h
@@ -35,18 +35,21 @@ extern const uint16_t applet_nameofs[];
35extern const uint8_t applet_install_loc[]; 35extern const uint8_t applet_install_loc[];
36 36
37#if ENABLE_FEATURE_SUID || ENABLE_FEATURE_PREFER_APPLETS 37#if ENABLE_FEATURE_SUID || ENABLE_FEATURE_PREFER_APPLETS
38#define APPLET_NAME(i) (applet_names + (applet_nameofs[i] & 0x0fff)) 38# define APPLET_NAME(i) (applet_names + (applet_nameofs[i] & 0x0fff))
39#else 39#else
40#define APPLET_NAME(i) (applet_names + applet_nameofs[i]) 40# define APPLET_NAME(i) (applet_names + applet_nameofs[i])
41#endif 41#endif
42 42
43#if ENABLE_FEATURE_PREFER_APPLETS 43#if ENABLE_FEATURE_PREFER_APPLETS
44#define APPLET_IS_NOFORK(i) (applet_nameofs[i] & (1 << 12)) 44# define APPLET_IS_NOFORK(i) (applet_nameofs[i] & (1 << 12))
45#define APPLET_IS_NOEXEC(i) (applet_nameofs[i] & (1 << 13)) 45# define APPLET_IS_NOEXEC(i) (applet_nameofs[i] & (1 << 13))
46#else
47# define APPLET_IS_NOFORK(i) 0
48# define APPLET_IS_NOEXEC(i) 0
46#endif 49#endif
47 50
48#if ENABLE_FEATURE_SUID 51#if ENABLE_FEATURE_SUID
49#define APPLET_SUID(i) ((applet_nameofs[i] >> 14) & 0x3) 52# define APPLET_SUID(i) ((applet_nameofs[i] >> 14) & 0x3)
50#endif 53#endif
51 54
52#if ENABLE_FEATURE_INSTALLER 55#if ENABLE_FEATURE_INSTALLER
diff --git a/include/libbb.h b/include/libbb.h
index 0836b684e..26656de2e 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -419,6 +419,7 @@ void xchdir(const char *path) FAST_FUNC;
419void xchroot(const char *path) FAST_FUNC; 419void xchroot(const char *path) FAST_FUNC;
420void xsetenv(const char *key, const char *value) FAST_FUNC; 420void xsetenv(const char *key, const char *value) FAST_FUNC;
421void bb_unsetenv(const char *key) FAST_FUNC; 421void bb_unsetenv(const char *key) FAST_FUNC;
422void bb_unsetenv_and_free(char *key) FAST_FUNC;
422void xunlink(const char *pathname) FAST_FUNC; 423void xunlink(const char *pathname) FAST_FUNC;
423void xstat(const char *pathname, struct stat *buf) FAST_FUNC; 424void xstat(const char *pathname, struct stat *buf) FAST_FUNC;
424int xopen(const char *pathname, int flags) FAST_FUNC; 425int xopen(const char *pathname, int flags) FAST_FUNC;
@@ -854,6 +855,20 @@ int bb_execvp(const char *file, char *const argv[]) FAST_FUNC;
854#define BB_EXECVP(prog,cmd) execvp(prog,cmd) 855#define BB_EXECVP(prog,cmd) execvp(prog,cmd)
855#define BB_EXECLP(prog,cmd,...) execlp(prog,cmd, __VA_ARGS__) 856#define BB_EXECLP(prog,cmd,...) execlp(prog,cmd, __VA_ARGS__)
856#endif 857#endif
858int BB_EXECVP_or_die(char **argv) NORETURN FAST_FUNC;
859
860/* xvfork() can't be a _function_, return after vfork mangles stack
861 * in the parent. It must be a macro. */
862#define xvfork() \
863({ \
864 pid_t bb__xvfork_pid = vfork(); \
865 if (bb__xvfork_pid < 0) \
866 bb_perror_msg_and_die("vfork"); \
867 bb__xvfork_pid; \
868})
869#if BB_MMU
870pid_t xfork(void) FAST_FUNC;
871#endif
857 872
858/* NOMMU friendy fork+exec: */ 873/* NOMMU friendy fork+exec: */
859pid_t spawn(char **argv) FAST_FUNC; 874pid_t spawn(char **argv) FAST_FUNC;
@@ -900,7 +915,7 @@ int run_nofork_applet_prime(struct nofork_save_area *old, int applet_no, char **
900 * Both of the above will redirect fd 0,1,2 to /dev/null and drop ctty 915 * Both of the above will redirect fd 0,1,2 to /dev/null and drop ctty
901 * (will do setsid()). 916 * (will do setsid()).
902 * 917 *
903 * fork_or_rexec(argv) = bare-bones "fork" on MMU, 918 * fork_or_rexec(argv) = bare-bones fork on MMU,
904 * "vfork + re-exec ourself" on NOMMU. No fd redirection, no setsid(). 919 * "vfork + re-exec ourself" on NOMMU. No fd redirection, no setsid().
905 * On MMU ignores argv. 920 * On MMU ignores argv.
906 * 921 *
@@ -916,19 +931,19 @@ enum {
916 DAEMON_ONLY_SANITIZE = 8, /* internal use */ 931 DAEMON_ONLY_SANITIZE = 8, /* internal use */
917}; 932};
918#if BB_MMU 933#if BB_MMU
919 pid_t fork_or_rexec(void) FAST_FUNC;
920 enum { re_execed = 0 }; 934 enum { re_execed = 0 };
921# define fork_or_rexec(argv) fork_or_rexec() 935# define fork_or_rexec(argv) xfork()
922# define bb_daemonize_or_rexec(flags, argv) bb_daemonize_or_rexec(flags) 936# define bb_daemonize_or_rexec(flags, argv) bb_daemonize_or_rexec(flags)
923# define bb_daemonize(flags) bb_daemonize_or_rexec(flags, bogus) 937# define bb_daemonize(flags) bb_daemonize_or_rexec(flags, bogus)
924#else 938#else
939 extern bool re_execed;
925 void re_exec(char **argv) NORETURN FAST_FUNC; 940 void re_exec(char **argv) NORETURN FAST_FUNC;
926 pid_t fork_or_rexec(char **argv) FAST_FUNC; 941 pid_t fork_or_rexec(char **argv) FAST_FUNC;
927 extern bool re_execed;
928 int BUG_fork_is_unavailable_on_nommu(void) FAST_FUNC; 942 int BUG_fork_is_unavailable_on_nommu(void) FAST_FUNC;
929 int BUG_daemon_is_unavailable_on_nommu(void) FAST_FUNC; 943 int BUG_daemon_is_unavailable_on_nommu(void) FAST_FUNC;
930 void BUG_bb_daemonize_is_unavailable_on_nommu(void) FAST_FUNC; 944 void BUG_bb_daemonize_is_unavailable_on_nommu(void) FAST_FUNC;
931# define fork() BUG_fork_is_unavailable_on_nommu() 945# define fork() BUG_fork_is_unavailable_on_nommu()
946# define xfork() BUG_fork_is_unavailable_on_nommu()
932# define daemon(a,b) BUG_daemon_is_unavailable_on_nommu() 947# define daemon(a,b) BUG_daemon_is_unavailable_on_nommu()
933# define bb_daemonize(a) BUG_bb_daemonize_is_unavailable_on_nommu() 948# define bb_daemonize(a) BUG_bb_daemonize_is_unavailable_on_nommu()
934#endif 949#endif
@@ -1141,6 +1156,7 @@ typedef struct parser_t {
1141} parser_t; 1156} parser_t;
1142parser_t* config_open(const char *filename) FAST_FUNC; 1157parser_t* config_open(const char *filename) FAST_FUNC;
1143parser_t* config_open2(const char *filename, FILE* FAST_FUNC (*fopen_func)(const char *path)) FAST_FUNC; 1158parser_t* config_open2(const char *filename, FILE* FAST_FUNC (*fopen_func)(const char *path)) FAST_FUNC;
1159/* delims[0] is a comment char (use '\0' to disable), the rest are token delimiters */
1144int config_read(parser_t *parser, char **tokens, unsigned flags, const char *delims) FAST_FUNC; 1160int config_read(parser_t *parser, char **tokens, unsigned flags, const char *delims) FAST_FUNC;
1145#define config_read(parser, tokens, max, min, str, flags) \ 1161#define config_read(parser, tokens, max, min, str, flags) \
1146 config_read(parser, tokens, ((flags) | (((min) & 0xFF) << 8) | ((max) & 0xFF)), str) 1162 config_read(parser, tokens, ((flags) | (((min) & 0xFF) << 8) | ((max) & 0xFF)), str)
@@ -1171,7 +1187,6 @@ char *bb_simplify_abs_path_inplace(char *path) FAST_FUNC;
1171extern void bb_do_delay(int seconds) FAST_FUNC; 1187extern void bb_do_delay(int seconds) FAST_FUNC;
1172extern void change_identity(const struct passwd *pw) FAST_FUNC; 1188extern void change_identity(const struct passwd *pw) FAST_FUNC;
1173extern void run_shell(const char *shell, int loginshell, const char *command, const char **additional_args) NORETURN FAST_FUNC; 1189extern void run_shell(const char *shell, int loginshell, const char *command, const char **additional_args) NORETURN FAST_FUNC;
1174extern void run_shell(const char *shell, int loginshell, const char *command, const char **additional_args) FAST_FUNC;
1175#if ENABLE_SELINUX 1190#if ENABLE_SELINUX
1176extern void renew_current_security_context(void) FAST_FUNC; 1191extern void renew_current_security_context(void) FAST_FUNC;
1177extern void set_current_security_context(security_context_t sid) FAST_FUNC; 1192extern void set_current_security_context(security_context_t sid) FAST_FUNC;
@@ -1611,12 +1626,12 @@ extern struct globals *const ptr_to_globals;
1611 * use bb_default_login_shell and following defines. 1626 * use bb_default_login_shell and following defines.
1612 * If you change LIBBB_DEFAULT_LOGIN_SHELL, 1627 * If you change LIBBB_DEFAULT_LOGIN_SHELL,
1613 * don't forget to change increment constant. */ 1628 * don't forget to change increment constant. */
1614#define LIBBB_DEFAULT_LOGIN_SHELL "-/bin/sh" 1629#define LIBBB_DEFAULT_LOGIN_SHELL "-/bin/sh"
1615extern const char bb_default_login_shell[]; 1630extern const char bb_default_login_shell[];
1616/* "/bin/sh" */ 1631/* "/bin/sh" */
1617#define DEFAULT_SHELL (bb_default_login_shell+1) 1632#define DEFAULT_SHELL (bb_default_login_shell+1)
1618/* "sh" */ 1633/* "sh" */
1619#define DEFAULT_SHELL_SHORT_NAME (bb_default_login_shell+6) 1634#define DEFAULT_SHELL_SHORT_NAME (bb_default_login_shell+6)
1620 1635
1621#if ENABLE_FEATURE_DEVFS 1636#if ENABLE_FEATURE_DEVFS
1622# define CURRENT_VC "/dev/vc/0" 1637# define CURRENT_VC "/dev/vc/0"
@@ -1625,18 +1640,18 @@ extern const char bb_default_login_shell[];
1625# define VC_3 "/dev/vc/3" 1640# define VC_3 "/dev/vc/3"
1626# define VC_4 "/dev/vc/4" 1641# define VC_4 "/dev/vc/4"
1627# define VC_5 "/dev/vc/5" 1642# define VC_5 "/dev/vc/5"
1628#if defined(__sh__) || defined(__H8300H__) || defined(__H8300S__) 1643# if defined(__sh__) || defined(__H8300H__) || defined(__H8300S__)
1629/* Yes, this sucks, but both SH (including sh64) and H8 have a SCI(F) for their 1644/* Yes, this sucks, but both SH (including sh64) and H8 have a SCI(F) for their
1630 respective serial ports .. as such, we can't use the common device paths for 1645 respective serial ports .. as such, we can't use the common device paths for
1631 these. -- PFM */ 1646 these. -- PFM */
1632# define SC_0 "/dev/ttsc/0" 1647# define SC_0 "/dev/ttsc/0"
1633# define SC_1 "/dev/ttsc/1" 1648# define SC_1 "/dev/ttsc/1"
1634# define SC_FORMAT "/dev/ttsc/%d" 1649# define SC_FORMAT "/dev/ttsc/%d"
1635#else 1650# else
1636# define SC_0 "/dev/tts/0" 1651# define SC_0 "/dev/tts/0"
1637# define SC_1 "/dev/tts/1" 1652# define SC_1 "/dev/tts/1"
1638# define SC_FORMAT "/dev/tts/%d" 1653# define SC_FORMAT "/dev/tts/%d"
1639#endif 1654# endif
1640# define VC_FORMAT "/dev/vc/%d" 1655# define VC_FORMAT "/dev/vc/%d"
1641# define LOOP_FORMAT "/dev/loop/%d" 1656# define LOOP_FORMAT "/dev/loop/%d"
1642# define LOOP_NAMESIZE (sizeof("/dev/loop/") + sizeof(int)*3 + 1) 1657# define LOOP_NAMESIZE (sizeof("/dev/loop/") + sizeof(int)*3 + 1)
@@ -1649,15 +1664,15 @@ extern const char bb_default_login_shell[];
1649# define VC_3 "/dev/tty3" 1664# define VC_3 "/dev/tty3"
1650# define VC_4 "/dev/tty4" 1665# define VC_4 "/dev/tty4"
1651# define VC_5 "/dev/tty5" 1666# define VC_5 "/dev/tty5"
1652#if defined(__sh__) || defined(__H8300H__) || defined(__H8300S__) 1667# if defined(__sh__) || defined(__H8300H__) || defined(__H8300S__)
1653# define SC_0 "/dev/ttySC0" 1668# define SC_0 "/dev/ttySC0"
1654# define SC_1 "/dev/ttySC1" 1669# define SC_1 "/dev/ttySC1"
1655# define SC_FORMAT "/dev/ttySC%d" 1670# define SC_FORMAT "/dev/ttySC%d"
1656#else 1671# else
1657# define SC_0 "/dev/ttyS0" 1672# define SC_0 "/dev/ttyS0"
1658# define SC_1 "/dev/ttyS1" 1673# define SC_1 "/dev/ttyS1"
1659# define SC_FORMAT "/dev/ttyS%d" 1674# define SC_FORMAT "/dev/ttyS%d"
1660#endif 1675# endif
1661# define VC_FORMAT "/dev/tty%d" 1676# define VC_FORMAT "/dev/tty%d"
1662# define LOOP_FORMAT "/dev/loop%d" 1677# define LOOP_FORMAT "/dev/loop%d"
1663# define LOOP_NAMESIZE (sizeof("/dev/loop") + sizeof(int)*3 + 1) 1678# define LOOP_NAMESIZE (sizeof("/dev/loop") + sizeof(int)*3 + 1)
diff --git a/include/platform.h b/include/platform.h
index d1ac391eb..9458e2e02 100644
--- a/include/platform.h
+++ b/include/platform.h
@@ -26,6 +26,7 @@
26#define HAVE_SETBIT 1 26#define HAVE_SETBIT 1
27#define HAVE_STRCASESTR 1 27#define HAVE_STRCASESTR 1
28#define HAVE_STRCHRNUL 1 28#define HAVE_STRCHRNUL 1
29#define HAVE_STRSEP 1
29#define HAVE_STRSIGNAL 1 30#define HAVE_STRSIGNAL 1
30#define HAVE_VASPRINTF 1 31#define HAVE_VASPRINTF 1
31 32
@@ -185,10 +186,10 @@
185#if defined(__BIG_ENDIAN__) && __BIG_ENDIAN__ 186#if defined(__BIG_ENDIAN__) && __BIG_ENDIAN__
186# define BB_BIG_ENDIAN 1 187# define BB_BIG_ENDIAN 1
187# define BB_LITTLE_ENDIAN 0 188# define BB_LITTLE_ENDIAN 0
188#elif __BYTE_ORDER == __BIG_ENDIAN 189#elif defined(__BYTE_ORDER) && __BYTE_ORDER == __BIG_ENDIAN
189# define BB_BIG_ENDIAN 1 190# define BB_BIG_ENDIAN 1
190# define BB_LITTLE_ENDIAN 0 191# define BB_LITTLE_ENDIAN 0
191#elif __BYTE_ORDER == __LITTLE_ENDIAN 192#elif (defined(__BYTE_ORDER) && __BYTE_ORDER == __LITTLE_ENDIAN) || defined(__386__)
192# define BB_BIG_ENDIAN 0 193# define BB_BIG_ENDIAN 0
193# define BB_LITTLE_ENDIAN 1 194# define BB_LITTLE_ENDIAN 1
194#else 195#else
@@ -381,6 +382,7 @@ typedef unsigned smalluint;
381# undef HAVE_SETBIT 382# undef HAVE_SETBIT
382# undef HAVE_STRCASESTR 383# undef HAVE_STRCASESTR
383# undef HAVE_STRCHRNUL 384# undef HAVE_STRCHRNUL
385# undef HAVE_STRSEP
384# undef HAVE_STRSIGNAL 386# undef HAVE_STRSIGNAL
385# undef HAVE_VASPRINTF 387# undef HAVE_VASPRINTF
386#endif 388#endif
@@ -419,6 +421,10 @@ extern char *strcasestr(const char *s, const char *pattern) FAST_FUNC;
419extern char *strchrnul(const char *s, int c) FAST_FUNC; 421extern char *strchrnul(const char *s, int c) FAST_FUNC;
420#endif 422#endif
421 423
424#ifndef HAVE_STRSEP
425extern char *strsep(char **stringp, const char *delim) FAST_FUNC;
426#endif
427
422#ifndef HAVE_STRSIGNAL 428#ifndef HAVE_STRSIGNAL
423/* Not exactly the same: instead of "Stopped" it shows "STOP" etc */ 429/* Not exactly the same: instead of "Stopped" it shows "STOP" etc */
424# define strsignal(sig) get_signame(sig) 430# define strsignal(sig) get_signame(sig)
diff --git a/include/unarchive.h b/include/unarchive.h
index 8009de282..b55af6d9d 100644
--- a/include/unarchive.h
+++ b/include/unarchive.h
@@ -7,16 +7,23 @@ PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
7enum { 7enum {
8#if BB_BIG_ENDIAN 8#if BB_BIG_ENDIAN
9 COMPRESS_MAGIC = 0x1f9d, 9 COMPRESS_MAGIC = 0x1f9d,
10 GZIP_MAGIC = 0x1f8b, 10 GZIP_MAGIC = 0x1f8b,
11 BZIP2_MAGIC = ('B'<<8) + 'Z', 11 BZIP2_MAGIC = 'B' * 256 + 'Z',
12 XZ_MAGIC1 = (0xfd<<8) + '7', 12 /* .xz signature: 0xfd, '7', 'z', 'X', 'Z', 0x00 */
13 XZ_MAGIC2 = ((((('z'<<8) + 'X')<<8) + 'Z')<<8) + 0, 13 /* More info at: http://tukaani.org/xz/xz-file-format.txt */
14 XZ_MAGIC1 = 0xfd * 256 + '7',
15 XZ_MAGIC2 = (('z' * 256 + 'X') * 256 + 'Z') * 256 + 0,
16 /* Different form: 32 bits, then 16 bits: */
17 XZ_MAGIC1a = ((0xfd * 256 + '7') * 256 + 'z') * 256 + 'X',
18 XZ_MAGIC2a = 'Z' * 256 + 0,
14#else 19#else
15 COMPRESS_MAGIC = 0x9d1f, 20 COMPRESS_MAGIC = 0x9d1f,
16 GZIP_MAGIC = 0x8b1f, 21 GZIP_MAGIC = 0x8b1f,
17 BZIP2_MAGIC = ('Z'<<8) + 'B', 22 BZIP2_MAGIC = 'Z' * 256 + 'B',
18 XZ_MAGIC1 = ('7'<<8) + 0xfd, 23 XZ_MAGIC1 = '7' * 256 + 0xfd,
19 XZ_MAGIC2 = (((((0<<8) + 'Z')<<8) + 'X')<<8) + 'z', 24 XZ_MAGIC2 = ((0 * 256 + 'Z') * 256 + 'X') * 256 + 'z',
25 XZ_MAGIC1a = (('X' * 256 + 'z') * 256 + '7') * 256 + 0xfd,
26 XZ_MAGIC2a = 0 * 256 + 'Z',
20#endif 27#endif
21}; 28};
22 29
@@ -75,6 +82,9 @@ typedef struct archive_handle_t {
75 char* tar__longname; 82 char* tar__longname;
76 char* tar__linkname; 83 char* tar__linkname;
77# endif 84# endif
85#if ENABLE_FEATURE_TAR_TO_COMMAND
86 char* tar__to_command;
87#endif
78# if ENABLE_FEATURE_TAR_SELINUX 88# if ENABLE_FEATURE_TAR_SELINUX
79 char* tar__global_sctx; 89 char* tar__global_sctx;
80 char* tar__next_file_sctx; 90 char* tar__next_file_sctx;
@@ -110,6 +120,39 @@ typedef struct archive_handle_t {
110#define ARCHIVE_O_TRUNC (1 << 8) 120#define ARCHIVE_O_TRUNC (1 << 8)
111 121
112 122
123/* POSIX tar Header Block, from POSIX 1003.1-1990 */
124#define TAR_BLOCK_SIZE 512
125#define NAME_SIZE 100
126#define NAME_SIZE_STR "100"
127typedef struct tar_header_t { /* byte offset */
128 char name[NAME_SIZE]; /* 0-99 */
129 char mode[8]; /* 100-107 */
130 char uid[8]; /* 108-115 */
131 char gid[8]; /* 116-123 */
132 char size[12]; /* 124-135 */
133 char mtime[12]; /* 136-147 */
134 char chksum[8]; /* 148-155 */
135 char typeflag; /* 156-156 */
136 char linkname[NAME_SIZE]; /* 157-256 */
137 /* POSIX: "ustar" NUL "00" */
138 /* GNU tar: "ustar " NUL */
139 /* Normally it's defined as magic[6] followed by
140 * version[2], but we put them together to save code.
141 */
142 char magic[8]; /* 257-264 */
143 char uname[32]; /* 265-296 */
144 char gname[32]; /* 297-328 */
145 char devmajor[8]; /* 329-336 */
146 char devminor[8]; /* 337-344 */
147 char prefix[155]; /* 345-499 */
148 char padding[12]; /* 500-512 (pad to exactly TAR_BLOCK_SIZE) */
149} tar_header_t;
150struct BUG_tar_header {
151 char c[sizeof(tar_header_t) == TAR_BLOCK_SIZE ? 1 : -1];
152};
153
154
155
113/* Info struct unpackers can fill out to inform users of thing like 156/* Info struct unpackers can fill out to inform users of thing like
114 * timestamps of unpacked files */ 157 * timestamps of unpacked files */
115typedef struct unpack_info_t { 158typedef struct unpack_info_t {
@@ -128,6 +171,7 @@ extern void unpack_ar_archive(archive_handle_t *ar_archive) FAST_FUNC;
128extern void data_skip(archive_handle_t *archive_handle) FAST_FUNC; 171extern void data_skip(archive_handle_t *archive_handle) FAST_FUNC;
129extern void data_extract_all(archive_handle_t *archive_handle) FAST_FUNC; 172extern void data_extract_all(archive_handle_t *archive_handle) FAST_FUNC;
130extern void data_extract_to_stdout(archive_handle_t *archive_handle) FAST_FUNC; 173extern void data_extract_to_stdout(archive_handle_t *archive_handle) FAST_FUNC;
174extern void data_extract_to_command(archive_handle_t *archive_handle) FAST_FUNC;
131 175
132extern void header_skip(const file_header_t *file_header) FAST_FUNC; 176extern void header_skip(const file_header_t *file_header) FAST_FUNC;
133extern void header_list(const file_header_t *file_header) FAST_FUNC; 177extern void header_list(const file_header_t *file_header) FAST_FUNC;
@@ -159,7 +203,7 @@ typedef struct inflate_unzip_result {
159} inflate_unzip_result; 203} inflate_unzip_result;
160 204
161IF_DESKTOP(long long) int inflate_unzip(inflate_unzip_result *res, off_t compr_size, int src_fd, int dst_fd) FAST_FUNC; 205IF_DESKTOP(long long) int inflate_unzip(inflate_unzip_result *res, off_t compr_size, int src_fd, int dst_fd) FAST_FUNC;
162/* xz unpacker takes .xz stream from offset 0 */ 206/* xz unpacker takes .xz stream from offset 6 */
163IF_DESKTOP(long long) int unpack_xz_stream(int src_fd, int dst_fd) FAST_FUNC; 207IF_DESKTOP(long long) int unpack_xz_stream(int src_fd, int dst_fd) FAST_FUNC;
164/* lzma unpacker takes .lzma stream from offset 0 */ 208/* lzma unpacker takes .lzma stream from offset 0 */
165IF_DESKTOP(long long) int unpack_lzma_stream(int src_fd, int dst_fd) FAST_FUNC; 209IF_DESKTOP(long long) int unpack_lzma_stream(int src_fd, int dst_fd) FAST_FUNC;
diff --git a/include/usage.src.h b/include/usage.src.h
index f30edbc54..b3396006f 100644
--- a/include/usage.src.h
+++ b/include/usage.src.h
@@ -119,12 +119,6 @@ INSERT
119#define sh_full_usage "" 119#define sh_full_usage ""
120#define ash_trivial_usage NOUSAGE_STR 120#define ash_trivial_usage NOUSAGE_STR
121#define ash_full_usage "" 121#define ash_full_usage ""
122#define hush_trivial_usage NOUSAGE_STR
123#define hush_full_usage ""
124#define lash_trivial_usage NOUSAGE_STR
125#define lash_full_usage ""
126#define msh_trivial_usage NOUSAGE_STR
127#define msh_full_usage ""
128#define bash_trivial_usage NOUSAGE_STR 122#define bash_trivial_usage NOUSAGE_STR
129#define bash_full_usage "" 123#define bash_full_usage ""
130 124
@@ -163,16 +157,6 @@ INSERT
163#define blkid_full_usage "\n\n" \ 157#define blkid_full_usage "\n\n" \
164 "Print UUIDs of all filesystems" 158 "Print UUIDs of all filesystems"
165 159
166#define bootchartd_trivial_usage \
167 "start [PROG ARGS]|stop|init"
168#define bootchartd_full_usage "\n\n" \
169 "Create /var/log/bootchart.tgz with boot chart data\n" \
170 "\nOptions:" \
171 "\nstart: start background logging; with PROG, run PROG, then kill logging with USR1" \
172 "\nstop: send USR1 to all bootchartd processes" \
173 "\ninit: start background logging; stop when getty/xdm is seen (for init scripts)" \
174 "\nUnder PID 1: as init, then exec $bootchart_init, /init, /sbin/init" \
175
176#define brctl_trivial_usage \ 160#define brctl_trivial_usage \
177 "COMMAND [BRIDGE [INTERFACE]]" 161 "COMMAND [BRIDGE [INTERFACE]]"
178#define brctl_full_usage "\n\n" \ 162#define brctl_full_usage "\n\n" \
@@ -444,7 +428,7 @@ INSERT
444 " [-/ DIR] [-n NICE] [-m BYTES] [-d BYTES] [-o N]\n" \ 428 " [-/ DIR] [-n NICE] [-m BYTES] [-d BYTES] [-o N]\n" \
445 " [-p N] [-f BYTES] [-c BYTES] PROG ARGS" 429 " [-p N] [-f BYTES] [-c BYTES] PROG ARGS"
446#define chpst_full_usage "\n\n" \ 430#define chpst_full_usage "\n\n" \
447 "Change the process state and run PROG\n" \ 431 "Change the process state, run PROG\n" \
448 "\nOptions:" \ 432 "\nOptions:" \
449 "\n -u USER[:GRP] Set uid and gid" \ 433 "\n -u USER[:GRP] Set uid and gid" \
450 "\n -U USER[:GRP] Set $UID and $GID in environment" \ 434 "\n -U USER[:GRP] Set $UID and $GID in environment" \
@@ -467,17 +451,17 @@ INSERT
467#define setuidgid_trivial_usage \ 451#define setuidgid_trivial_usage \
468 "USER PROG ARGS" 452 "USER PROG ARGS"
469#define setuidgid_full_usage "\n\n" \ 453#define setuidgid_full_usage "\n\n" \
470 "Set uid and gid to USER's uid and gid, removing all supplementary\n" \ 454 "Set uid and gid to USER's uid and gid, drop supplementary group ids,\n" \
471 "groups and run PROG" 455 "run PROG"
472#define envuidgid_trivial_usage \ 456#define envuidgid_trivial_usage \
473 "USER PROG ARGS" 457 "USER PROG ARGS"
474#define envuidgid_full_usage "\n\n" \ 458#define envuidgid_full_usage "\n\n" \
475 "Set $UID to USER's uid and $GID to USER's gid and run PROG" 459 "Set $UID to USER's uid and $GID to USER's gid, run PROG"
476#define envdir_trivial_usage \ 460#define envdir_trivial_usage \
477 "DIR PROG ARGS" 461 "DIR PROG ARGS"
478#define envdir_full_usage "\n\n" \ 462#define envdir_full_usage "\n\n" \
479 "Set various environment variables as specified by files\n" \ 463 "Set various environment variables as specified by files\n" \
480 "in the directory dir and run PROG" 464 "in the directory DIR, run PROG"
481#define softlimit_trivial_usage \ 465#define softlimit_trivial_usage \
482 "[-a BYTES] [-m BYTES] [-d BYTES] [-s BYTES] [-l BYTES]\n" \ 466 "[-a BYTES] [-m BYTES] [-d BYTES] [-s BYTES] [-l BYTES]\n" \
483 " [-f BYTES] [-c BYTES] [-r BYTES] [-o N] [-p N] [-t N]\n" \ 467 " [-f BYTES] [-c BYTES] [-r BYTES] [-o N] [-p N] [-t N]\n" \
@@ -548,24 +532,49 @@ INSERT
548#define bbconfig_trivial_usage \ 532#define bbconfig_trivial_usage \
549 "" 533 ""
550#define bbconfig_full_usage "\n\n" \ 534#define bbconfig_full_usage "\n\n" \
551 "Print the config file which built busybox" 535 "Print the config file used by busybox build"
552 536
553#define chrt_trivial_usage \ 537#define chrt_trivial_usage \
554 "[OPTIONS] [PRIO] [PID | PROG ARGS]" 538 "[OPTIONS] [PRIO] [PID | PROG ARGS]"
555#define chrt_full_usage "\n\n" \ 539#define chrt_full_usage "\n\n" \
556 "Manipulate real-time attributes of a process\n" \ 540 "Change scheduling priority and class for a process\n" \
557 "\nOptions:" \ 541 "\nOptions:" \
558 "\n -p Operate on PID" \ 542 "\n -p Operate on PID" \
559 "\n -r Set SCHED_RR scheduling" \ 543 "\n -r Set SCHED_RR class" \
560 "\n -f Set SCHED_FIFO scheduling" \ 544 "\n -f Set SCHED_FIFO class" \
561 "\n -o Set SCHED_OTHER scheduling" \ 545 "\n -o Set SCHED_OTHER class" \
562 "\n -m Show min and max priorities" \ 546 "\n -m Show min/max priorities" \
563 547
564#define chrt_example_usage \ 548#define chrt_example_usage \
565 "$ chrt -r 4 sleep 900; x=$!\n" \ 549 "$ chrt -r 4 sleep 900; x=$!\n" \
566 "$ chrt -f -p 3 $x\n" \ 550 "$ chrt -f -p 3 $x\n" \
567 "You need CAP_SYS_NICE privileges to set scheduling attributes of a process" 551 "You need CAP_SYS_NICE privileges to set scheduling attributes of a process"
568 552
553#define nice_trivial_usage \
554 "[-n ADJUST] [PROG ARGS]"
555#define nice_full_usage "\n\n" \
556 "Change scheduling priority, run PROG\n" \
557 "\nOptions:" \
558 "\n -n ADJUST Adjust priority by ADJUST" \
559
560#define renice_trivial_usage \
561 "{{-n INCREMENT} | PRIORITY} [[-p | -g | -u] ID...]"
562#define renice_full_usage "\n\n" \
563 "Change scheduling priority for a running process\n" \
564 "\nOptions:" \
565 "\n -n Adjust current nice value (smaller is faster)" \
566 "\n -p Process id(s) (default)" \
567 "\n -g Process group id(s)" \
568 "\n -u Process user name(s) and/or id(s)" \
569
570#define ionice_trivial_usage \
571 "[-c 1-3] [-n 0-7] [-p PID] [PROG]"
572#define ionice_full_usage "\n\n" \
573 "Change I/O priority and class\n" \
574 "\nOptions:" \
575 "\n -c Class. 1:realtime 2:best-effort 3:idle" \
576 "\n -n Priority" \
577
569#define cp_trivial_usage \ 578#define cp_trivial_usage \
570 "[OPTIONS] SOURCE DEST" 579 "[OPTIONS] SOURCE DEST"
571#define cp_full_usage "\n\n" \ 580#define cp_full_usage "\n\n" \
@@ -1309,7 +1318,7 @@ INSERT
1309#define flock_trivial_usage \ 1318#define flock_trivial_usage \
1310 "[-sxun] FD|{FILE [-c] PROG ARGS}" 1319 "[-sxun] FD|{FILE [-c] PROG ARGS}"
1311#define flock_full_usage "\n\n" \ 1320#define flock_full_usage "\n\n" \
1312 "[Un]lock file descriptor, or lock FILE and run PROG\n" \ 1321 "[Un]lock file descriptor, or lock FILE, run PROG\n" \
1313 "\nOptions:" \ 1322 "\nOptions:" \
1314 "\n -s Shared lock" \ 1323 "\n -s Shared lock" \
1315 "\n -x Exclusive lock (default)" \ 1324 "\n -x Exclusive lock (default)" \
@@ -2048,14 +2057,6 @@ INSERT
2048 "\n -Z Set security context" \ 2057 "\n -Z Set security context" \
2049 ) 2058 )
2050 2059
2051#define ionice_trivial_usage \
2052 "[-c 1-3] [-n 0-7] [-p PID] [PROG]"
2053#define ionice_full_usage "\n\n" \
2054 "Change I/O scheduling class and priority\n" \
2055 "\nOptions:" \
2056 "\n -c Class. 1:realtime 2:best-effort 3:idle" \
2057 "\n -n Priority" \
2058
2059/* would need to make the " | " optional depending on more than one selected: */ 2060/* would need to make the " | " optional depending on more than one selected: */
2060#define ip_trivial_usage \ 2061#define ip_trivial_usage \
2061 "[OPTIONS] {" \ 2062 "[OPTIONS] {" \
@@ -2954,84 +2955,6 @@ INSERT
2954 " or\n" \ 2955 " or\n" \
2955 "$ nameif -c /etc/my_mactab_file\n" \ 2956 "$ nameif -c /etc/my_mactab_file\n" \
2956 2957
2957#if !ENABLE_DESKTOP
2958
2959#if ENABLE_NC_SERVER || ENABLE_NC_EXTRA
2960#define NC_OPTIONS_STR "\n\nOptions:"
2961#else
2962#define NC_OPTIONS_STR
2963#endif
2964
2965#define nc_trivial_usage \
2966 IF_NC_EXTRA("[-iN] [-wN] ")IF_NC_SERVER("[-l] [-p PORT] ") \
2967 "["IF_NC_EXTRA("-f FILENAME|")"IPADDR PORT]"IF_NC_EXTRA(" [-e PROG]")
2968#define nc_full_usage "\n\n" \
2969 "Open a pipe to IP:port" IF_NC_EXTRA(" or file") \
2970 NC_OPTIONS_STR \
2971 IF_NC_EXTRA( \
2972 "\n -e PROG Run PROG after connect" \
2973 "\n -i SEC Delay interval for lines sent" \
2974 "\n -w SEC Timeout for connect" \
2975 "\n -f FILE Use file (ala /dev/ttyS0) instead of network" \
2976 ) \
2977 IF_NC_SERVER( \
2978 "\n -l Listen mode, for inbound connects" \
2979 IF_NC_EXTRA( \
2980 "\n (use -l twice with -e for persistent server)") \
2981 "\n -p PORT Local port" \
2982 )
2983
2984#define nc_notes_usage "" \
2985 IF_NC_EXTRA( \
2986 "To use netcat as a terminal emulator on a serial port:\n\n" \
2987 "$ stty 115200 -F /dev/ttyS0\n" \
2988 "$ stty raw -echo -ctlecho && nc -f /dev/ttyS0\n" \
2989 )
2990
2991#define nc_example_usage \
2992 "$ nc foobar.somedomain.com 25\n" \
2993 "220 foobar ESMTP Exim 3.12 #1 Sat, 15 Apr 2000 00:03:02 -0600\n" \
2994 "help\n" \
2995 "214-Commands supported:\n" \
2996 "214- HELO EHLO MAIL RCPT DATA AUTH\n" \
2997 "214 NOOP QUIT RSET HELP\n" \
2998 "quit\n" \
2999 "221 foobar closing connection\n"
3000
3001#else /* DESKTOP nc - much more compatible with nc 1.10 */
3002
3003#define nc_trivial_usage \
3004 "[OPTIONS] HOST PORT - connect" \
3005 IF_NC_SERVER("\n" \
3006 "nc [OPTIONS] -l -p PORT [HOST] [PORT] - listen")
3007#define nc_full_usage "\n\n" \
3008 "Options:" \
3009 "\n -e PROG Run PROG after connect (must be last)" \
3010 IF_NC_SERVER( \
3011 "\n -l Listen mode, for inbound connects" \
3012 ) \
3013 "\n -n Don't do DNS resolution" \
3014 "\n -s ADDR Local address" \
3015 "\n -p PORT Local port" \
3016 "\n -u UDP mode" \
3017 "\n -v Verbose" \
3018 "\n -w SEC Timeout for connects and final net reads" \
3019 IF_NC_EXTRA( \
3020 "\n -i SEC Delay interval for lines sent" /* ", ports scanned" */ \
3021 "\n -o FILE Hex dump traffic" \
3022 "\n -z Zero-I/O mode (scanning)" \
3023 ) \
3024/* "\n -r Randomize local and remote ports" */
3025/* "\n -g gateway Source-routing hop point[s], up to 8" */
3026/* "\n -G num Source-routing pointer: 4, 8, 12, ..." */
3027/* "\nport numbers can be individual or ranges: lo-hi [inclusive]" */
3028
3029/* -e PROG can take ARGS too: "nc ... -e ls -l", but we don't document it
3030 * in help text: nc 1.10 does not allow that. We don't want to entice
3031 * users to use this incompatibility */
3032
3033#endif
3034
3035#define netstat_trivial_usage \ 2958#define netstat_trivial_usage \
3036 "[-laentuwxr"IF_FEATURE_NETSTAT_WIDE("W")IF_FEATURE_NETSTAT_PRG("p")"]" 2959 "[-laentuwxr"IF_FEATURE_NETSTAT_WIDE("W")IF_FEATURE_NETSTAT_PRG("p")"]"
3037#define netstat_full_usage "\n\n" \ 2960#define netstat_full_usage "\n\n" \
@@ -3053,13 +2976,6 @@ INSERT
3053 "\n -p Display PID/Program name for sockets" \ 2976 "\n -p Display PID/Program name for sockets" \
3054 ) 2977 )
3055 2978
3056#define nice_trivial_usage \
3057 "[-n ADJUST] [PROG ARGS]"
3058#define nice_full_usage "\n\n" \
3059 "Run PROG with modified scheduling priority\n" \
3060 "\nOptions:" \
3061 "\n -n ADJUST Adjust priority by ADJUST" \
3062
3063#define nmeter_trivial_usage \ 2979#define nmeter_trivial_usage \
3064 "format_string" 2980 "format_string"
3065#define nmeter_full_usage "\n\n" \ 2981#define nmeter_full_usage "\n\n" \
@@ -3513,16 +3429,6 @@ INSERT
3513 "\n" \ 3429 "\n" \
3514 "\nOther options are silently ignored" \ 3430 "\nOther options are silently ignored" \
3515 3431
3516#define renice_trivial_usage \
3517 "{{-n INCREMENT} | PRIORITY} [[-p | -g | -u] ID...]"
3518#define renice_full_usage "\n\n" \
3519 "Change priority of running processes\n" \
3520 "\nOptions:" \
3521 "\n -n Adjust current nice value (smaller is faster)" \
3522 "\n -p Process id(s) (default)" \
3523 "\n -g Process group id(s)" \
3524 "\n -u Process user name(s) and/or id(s)" \
3525
3526#define scriptreplay_trivial_usage \ 3432#define scriptreplay_trivial_usage \
3527 "timingfile [typescript [divisor]]" 3433 "timingfile [typescript [divisor]]"
3528#define scriptreplay_full_usage "\n\n" \ 3434#define scriptreplay_full_usage "\n\n" \
@@ -4273,54 +4179,6 @@ INSERT
4273#define tac_full_usage "\n\n" \ 4179#define tac_full_usage "\n\n" \
4274 "Concatenate FILEs and print them in reverse" 4180 "Concatenate FILEs and print them in reverse"
4275 4181
4276#define tar_trivial_usage \
4277 "-[" IF_FEATURE_TAR_CREATE("c") "xt" IF_FEATURE_SEAMLESS_GZ("z") \
4278 IF_FEATURE_SEAMLESS_BZ2("j") IF_FEATURE_SEAMLESS_LZMA("a") \
4279 IF_FEATURE_SEAMLESS_Z("Z") IF_FEATURE_TAR_NOPRESERVE_TIME("m") "vO] " \
4280 IF_FEATURE_TAR_FROM("[-X FILE] ") \
4281 "[-f TARFILE] [-C DIR] [FILE]..."
4282#define tar_full_usage "\n\n" \
4283 IF_FEATURE_TAR_CREATE("Create, extract, ") \
4284 IF_NOT_FEATURE_TAR_CREATE("Extract ") \
4285 "or list files from a tar file\n" \
4286 "\nOptions:" \
4287 IF_FEATURE_TAR_CREATE( \
4288 "\n c Create" \
4289 ) \
4290 "\n x Extract" \
4291 "\n t List" \
4292 "\nArchive format selection:" \
4293 IF_FEATURE_SEAMLESS_GZ( \
4294 "\n z Filter the archive through gzip" \
4295 ) \
4296 IF_FEATURE_SEAMLESS_BZ2( \
4297 "\n j Filter the archive through bzip2" \
4298 ) \
4299 IF_FEATURE_SEAMLESS_LZMA( \
4300 "\n a Filter the archive through lzma" \
4301 ) \
4302 IF_FEATURE_SEAMLESS_Z( \
4303 "\n Z Filter the archive through compress" \
4304 ) \
4305 IF_FEATURE_TAR_NOPRESERVE_TIME( \
4306 "\n m Do not restore mtime" \
4307 ) \
4308 "\nFile selection:" \
4309 "\n f Name of TARFILE or \"-\" for stdin" \
4310 "\n O Extract to stdout" \
4311 IF_FEATURE_TAR_FROM( \
4312 IF_FEATURE_TAR_LONG_OPTIONS( \
4313 "\n exclude File to exclude" \
4314 ) \
4315 "\n X File with names to exclude" \
4316 ) \
4317 "\n C Change to DIR before operation" \
4318 "\n v Verbose" \
4319
4320#define tar_example_usage \
4321 "$ zcat /tmp/tarball.tar.gz | tar -xf -\n" \
4322 "$ tar -cf /tmp/tarball.tar /usr/local\n"
4323
4324#define taskset_trivial_usage \ 4182#define taskset_trivial_usage \
4325 "[-p] [MASK] [PID | PROG ARGS]" 4183 "[-p] [MASK] [PID | PROG ARGS]"
4326#define taskset_full_usage "\n\n" \ 4184#define taskset_full_usage "\n\n" \