Changeset 2725 in MondoRescue for branches/2.2.9/mindi-busybox/include
- Timestamp:
- Feb 25, 2011, 9:26:54 PM (14 years ago)
- Location:
- branches/2.2.9/mindi-busybox/include
- Files:
-
- 10 added
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.2.9/mindi-busybox/include/applets.h
r1765 r2725 1 /* DO NOT EDIT. This file is generated from applets.src.h */ 1 2 /* vi: set sw=4 ts=4: */ 2 3 /* … … 5 6 * If you write a new applet, you need to add an entry to this list to make 6 7 * busybox aware of it. 7 *8 * It is CRUCIAL that this listing be kept in ascii order, otherwise the binary9 * search lookup contributed by Gaute B Strokkenes stops working. If you value10 * your kneecaps, you'll be sure to *make sure* that any changes made to this11 * file result in the listing remaining in ascii order. You have been warned.12 8 */ 13 9 … … 18 14 l - location to install link to: [/usr]/[s]bin 19 15 s - suid type: 20 _BB_SUID_ ALWAYS: will complain if busybox isn't suid16 _BB_SUID_REQUIRE: will complain if busybox isn't suid 21 17 and is run by non-root (applet_main() will not be called at all) 22 _BB_SUID_ NEVER: will drop suid prior to applet_main()18 _BB_SUID_DROP: will drop suid prior to applet_main() 23 19 _BB_SUID_MAYBE: neither of the above 24 20 */ 25 21 26 22 #if defined(PROTOTYPES) 27 # define APPLET(name,l,s) int name##_main(int argc, char **argv); 28 # define APPLET_NOUSAGE(name,main,l,s) int main##_main(int argc, char **argv); 29 # define APPLET_ODDNAME(name,main,l,s,name2) int main##_main(int argc, char **argv); 30 # define APPLET_NOEXEC(name,main,l,s,name2) int main##_main(int argc, char **argv); 31 # define APPLET_NOFORK(name,main,l,s,name2) int main##_main(int argc, char **argv); 23 # define APPLET(name,l,s) int name##_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 24 # define APPLET_ODDNAME(name,main,l,s,name2) int main##_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 25 # define APPLET_NOEXEC(name,main,l,s,name2) int main##_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 26 # define APPLET_NOFORK(name,main,l,s,name2) int main##_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 27 28 #elif defined(NAME_MAIN_CNAME) 29 # define APPLET(name,l,s) name name##_main name 30 # define APPLET_ODDNAME(name,main,l,s,name2) name main##_main name2 31 # define APPLET_NOEXEC(name,main,l,s,name2) name main##_main name2 32 # define APPLET_NOFORK(name,main,l,s,name2) name main##_main name2 32 33 33 34 #elif defined(MAKE_USAGE) && ENABLE_FEATURE_VERBOSE_USAGE 34 # define APPLET(name,l,s) name##_trivial_usage "\n\n" name##_full_usage "\0" 35 # define APPLET_NOUSAGE(name,main,l,s) "\b\0" 36 # define APPLET_ODDNAME(name,main,l,s,name2) name2##_trivial_usage "\n\n" name2##_full_usage "\0" 37 # define APPLET_NOEXEC(name,main,l,s,name2) name2##_trivial_usage "\n\n" name2##_full_usage "\0" 38 # define APPLET_NOFORK(name,main,l,s,name2) name2##_trivial_usage "\n\n" name2##_full_usage "\0" 35 # define APPLET(name,l,s) MAKE_USAGE(#name, name##_trivial_usage name##_full_usage) 36 # define APPLET_ODDNAME(name,main,l,s,name2) MAKE_USAGE(#name, name2##_trivial_usage name2##_full_usage) 37 # define APPLET_NOEXEC(name,main,l,s,name2) MAKE_USAGE(#name, name2##_trivial_usage name2##_full_usage) 38 # define APPLET_NOFORK(name,main,l,s,name2) MAKE_USAGE(#name, name2##_trivial_usage name2##_full_usage) 39 39 40 40 #elif defined(MAKE_USAGE) && !ENABLE_FEATURE_VERBOSE_USAGE 41 # define APPLET(name,l,s) name##_trivial_usage "\0" 42 # define APPLET_NOUSAGE(name,main,l,s) "\b\0" 43 # define APPLET_ODDNAME(name,main,l,s,name2) name2##_trivial_usage "\0" 44 # define APPLET_NOEXEC(name,main,l,s,name2) name2##_trivial_usage "\0" 45 # define APPLET_NOFORK(name,main,l,s,name2) name2##_trivial_usage "\0" 41 # define APPLET(name,l,s) MAKE_USAGE(#name, name##_trivial_usage) 42 # define APPLET_ODDNAME(name,main,l,s,name2) MAKE_USAGE(#name, name2##_trivial_usage) 43 # define APPLET_NOEXEC(name,main,l,s,name2) MAKE_USAGE(#name, name2##_trivial_usage) 44 # define APPLET_NOFORK(name,main,l,s,name2) MAKE_USAGE(#name, name2##_trivial_usage) 46 45 47 46 #elif defined(MAKE_LINKS) 48 47 # define APPLET(name,l,c) LINK l name 49 # define APPLET_NOUSAGE(name,main,l,s) LINK l name50 48 # define APPLET_ODDNAME(name,main,l,s,name2) LINK l name 51 49 # define APPLET_NOEXEC(name,main,l,s,name2) LINK l name … … 53 51 54 52 #else 55 const struct bb_applet applets[] = { /* name, main, location, need_suid */ 56 # define APPLET(name,l,s) { #name, name##_main USE_FEATURE_INSTALLER(,l) USE_FEATURE_SUID(,s) }, 57 # define APPLET_NOUSAGE(name,main,l,s) { #name, main##_main USE_FEATURE_INSTALLER(,l) USE_FEATURE_SUID(,s) }, 58 # define APPLET_ODDNAME(name,main,l,s,name2) { #name, main##_main USE_FEATURE_INSTALLER(,l) USE_FEATURE_SUID(,s) }, 59 # define APPLET_NOEXEC(name,main,l,s,name2) { #name, main##_main USE_FEATURE_INSTALLER(,l) USE_FEATURE_SUID(,s) USE_FEATURE_PREFER_APPLETS(,1) }, 60 # define APPLET_NOFORK(name,main,l,s,name2) { #name, main##_main USE_FEATURE_INSTALLER(,l) USE_FEATURE_SUID(,s) USE_FEATURE_PREFER_APPLETS(,1 ,1) }, 53 static struct bb_applet applets[] = { /* name, main, location, need_suid */ 54 # define APPLET(name,l,s) { #name, #name, l, s }, 55 # define APPLET_ODDNAME(name,main,l,s,name2) { #name, #main, l, s }, 56 # define APPLET_NOEXEC(name,main,l,s,name2) { #name, #main, l, s, 1 }, 57 # define APPLET_NOFORK(name,main,l,s,name2) { #name, #main, l, s, 1, 1 }, 61 58 #endif 62 59 … … 67 64 68 65 69 USE_TEST(APPLET_NOEXEC([, test, _BB_DIR_USR_BIN, _BB_SUID_NEVER, test)) 70 USE_TEST(APPLET_NOUSAGE([[, test, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 71 USE_ADDGROUP(APPLET(addgroup, _BB_DIR_BIN, _BB_SUID_NEVER)) 72 USE_ADDUSER(APPLET(adduser, _BB_DIR_BIN, _BB_SUID_NEVER)) 73 USE_ADJTIMEX(APPLET(adjtimex, _BB_DIR_SBIN, _BB_SUID_NEVER)) 74 USE_AR(APPLET(ar, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 75 USE_ARP(APPLET(arp, _BB_DIR_SBIN, _BB_SUID_NEVER)) 76 USE_ARPING(APPLET(arping, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 77 USE_ASH(APPLET_NOUSAGE(ash, ash, _BB_DIR_BIN, _BB_SUID_NEVER)) 78 USE_AWK(APPLET_NOEXEC(awk, awk, _BB_DIR_USR_BIN, _BB_SUID_NEVER, awk)) 79 USE_BASENAME(APPLET_NOFORK(basename, basename, _BB_DIR_USR_BIN, _BB_SUID_NEVER, basename)) 80 USE_BBCONFIG(APPLET(bbconfig, _BB_DIR_BIN, _BB_SUID_NEVER)) 81 //USE_BBSH(APPLET(bbsh, _BB_DIR_BIN, _BB_SUID_NEVER)) 82 USE_BUNZIP2(APPLET(bunzip2, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 83 USE_BUNZIP2(APPLET_ODDNAME(bzcat, bunzip2, _BB_DIR_USR_BIN, _BB_SUID_NEVER, bzcat)) 84 USE_CAL(APPLET(cal, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 85 USE_CAT(APPLET_NOFORK(cat, cat, _BB_DIR_BIN, _BB_SUID_NEVER, cat)) 86 USE_CATV(APPLET(catv, _BB_DIR_BIN, _BB_SUID_NEVER)) 87 USE_CHATTR(APPLET(chattr, _BB_DIR_BIN, _BB_SUID_NEVER)) 88 USE_CHCON(APPLET(chcon, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 89 USE_CHGRP(APPLET_NOEXEC(chgrp, chgrp, _BB_DIR_BIN, _BB_SUID_NEVER, chgrp)) 90 USE_CHMOD(APPLET_NOEXEC(chmod, chmod, _BB_DIR_BIN, _BB_SUID_NEVER, chmod)) 91 USE_CHOWN(APPLET_NOEXEC(chown, chown, _BB_DIR_BIN, _BB_SUID_NEVER, chown)) 92 USE_CHPASSWD(APPLET(chpasswd, _BB_DIR_USR_SBIN, _BB_SUID_NEVER)) 93 USE_CHPST(APPLET(chpst, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 94 USE_CHROOT(APPLET(chroot, _BB_DIR_USR_SBIN, _BB_SUID_NEVER)) 95 USE_CHRT(APPLET(chrt, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 96 USE_CHVT(APPLET(chvt, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 97 USE_CKSUM(APPLET(cksum, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 98 USE_CLEAR(APPLET(clear, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 99 USE_CMP(APPLET(cmp, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 100 USE_COMM(APPLET(comm, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 101 USE_CP(APPLET_NOEXEC(cp, cp, _BB_DIR_BIN, _BB_SUID_NEVER, cp)) 102 USE_CPIO(APPLET(cpio, _BB_DIR_BIN, _BB_SUID_NEVER)) 103 USE_CROND(APPLET(crond, _BB_DIR_USR_SBIN, _BB_SUID_NEVER)) 104 USE_CRONTAB(APPLET(crontab, _BB_DIR_USR_BIN, _BB_SUID_ALWAYS)) 105 USE_CRYPTPW(APPLET(cryptpw, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 106 USE_CTTYHACK(APPLET_NOUSAGE(cttyhack, cttyhack, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 107 USE_CUT(APPLET_NOEXEC(cut, cut, _BB_DIR_USR_BIN, _BB_SUID_NEVER, cut)) 108 USE_DATE(APPLET(date, _BB_DIR_BIN, _BB_SUID_NEVER)) 109 USE_DC(APPLET(dc, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 110 USE_DD(APPLET_NOEXEC(dd, dd, _BB_DIR_BIN, _BB_SUID_NEVER, dd)) 111 USE_DEALLOCVT(APPLET(deallocvt, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 112 USE_DELGROUP(APPLET_ODDNAME(delgroup, deluser, _BB_DIR_BIN, _BB_SUID_NEVER, delgroup)) 113 USE_DELUSER(APPLET(deluser, _BB_DIR_BIN, _BB_SUID_NEVER)) 114 USE_DEVFSD(APPLET(devfsd, _BB_DIR_SBIN, _BB_SUID_NEVER)) 115 USE_DF(APPLET(df, _BB_DIR_BIN, _BB_SUID_NEVER)) 116 USE_APP_DHCPRELAY(APPLET(dhcprelay, _BB_DIR_USR_SBIN, _BB_SUID_NEVER)) 117 USE_DIFF(APPLET(diff, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 118 USE_DIRNAME(APPLET_NOFORK(dirname, dirname, _BB_DIR_USR_BIN, _BB_SUID_NEVER, dirname)) 119 USE_DMESG(APPLET(dmesg, _BB_DIR_BIN, _BB_SUID_NEVER)) 120 USE_DNSD(APPLET(dnsd, _BB_DIR_USR_SBIN, _BB_SUID_ALWAYS)) 121 USE_DOS2UNIX(APPLET(dos2unix, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 122 USE_DPKG(APPLET(dpkg, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 123 USE_DPKG_DEB(APPLET_ODDNAME(dpkg-deb, dpkg_deb, _BB_DIR_USR_BIN, _BB_SUID_NEVER, dpkg_deb)) 124 USE_DU(APPLET(du, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 125 USE_DUMPKMAP(APPLET(dumpkmap, _BB_DIR_BIN, _BB_SUID_NEVER)) 126 USE_APP_DUMPLEASES(APPLET(dumpleases, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 127 //USE_E2FSCK(APPLET(e2fsck, _BB_DIR_SBIN, _BB_SUID_NEVER)) 128 //USE_E2LABEL(APPLET_NOUSAGE(e2label, tune2fs, _BB_DIR_SBIN, _BB_SUID_NEVER)) 129 USE_ECHO(APPLET_NOFORK(echo, echo, _BB_DIR_BIN, _BB_SUID_NEVER, echo)) 130 USE_ED(APPLET(ed, _BB_DIR_BIN, _BB_SUID_NEVER)) 131 USE_FEATURE_GREP_EGREP_ALIAS(APPLET_NOUSAGE(egrep, grep, _BB_DIR_BIN, _BB_SUID_NEVER)) 132 USE_EJECT(APPLET(eject, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 133 USE_ENV(APPLET(env, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 134 USE_ENVDIR(APPLET_ODDNAME(envdir, chpst, _BB_DIR_USR_BIN, _BB_SUID_NEVER, envdir)) 135 USE_ENVUIDGID(APPLET_ODDNAME(envuidgid, chpst, _BB_DIR_USR_BIN, _BB_SUID_NEVER, envuidgid)) 136 USE_ETHER_WAKE(APPLET_ODDNAME(ether-wake, ether_wake, _BB_DIR_USR_BIN, _BB_SUID_NEVER, ether_wake)) 137 USE_EXPAND(APPLET(expand, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 138 USE_EXPR(APPLET(expr, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 139 USE_FAKEIDENTD(APPLET(fakeidentd, _BB_DIR_USR_SBIN, _BB_SUID_NEVER)) 140 USE_FALSE(APPLET_NOFORK(false, false, _BB_DIR_BIN, _BB_SUID_NEVER, false)) 141 USE_FBSET(APPLET(fbset, _BB_DIR_USR_SBIN, _BB_SUID_NEVER)) 142 USE_FDFLUSH(APPLET_ODDNAME(fdflush, freeramdisk, _BB_DIR_BIN, _BB_SUID_NEVER, fdflush)) 143 USE_FDFORMAT(APPLET(fdformat, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 144 USE_FDISK(APPLET(fdisk, _BB_DIR_SBIN, _BB_SUID_NEVER)) 145 USE_FEATURE_GREP_FGREP_ALIAS(APPLET_NOUSAGE(fgrep, grep, _BB_DIR_BIN, _BB_SUID_NEVER)) 146 USE_FIND(APPLET_NOEXEC(find, find, _BB_DIR_USR_BIN, _BB_SUID_NEVER, find)) 147 //USE_FINDFS(APPLET_NOUSAGE(findfs, tune2fs, _BB_DIR_SBIN, _BB_SUID_NEVER)) 148 USE_FOLD(APPLET(fold, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 149 USE_FREE(APPLET(free, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 150 USE_FREERAMDISK(APPLET(freeramdisk, _BB_DIR_SBIN, _BB_SUID_NEVER)) 151 USE_FSCK(APPLET(fsck, _BB_DIR_SBIN, _BB_SUID_NEVER)) 152 //USE_E2FSCK(APPLET_NOUSAGE(fsck.ext2, e2fsck, _BB_DIR_SBIN, _BB_SUID_NEVER)) 153 //USE_E2FSCK(APPLET_NOUSAGE(fsck.ext3, e2fsck, _BB_DIR_SBIN, _BB_SUID_NEVER)) 154 USE_FSCK_MINIX(APPLET_ODDNAME(fsck.minix, fsck_minix, _BB_DIR_SBIN, _BB_SUID_NEVER, fsck_minix)) 155 USE_FTPGET(APPLET_ODDNAME(ftpget, ftpgetput, _BB_DIR_USR_BIN, _BB_SUID_NEVER, ftpget)) 156 USE_FTPPUT(APPLET_ODDNAME(ftpput, ftpgetput, _BB_DIR_USR_BIN, _BB_SUID_NEVER, ftpput)) 157 USE_FUSER(APPLET(fuser, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 158 USE_GETENFORCE(APPLET(getenforce, _BB_DIR_USR_SBIN, _BB_SUID_NEVER)) 159 USE_GETOPT(APPLET(getopt, _BB_DIR_BIN, _BB_SUID_NEVER)) 160 USE_GETSEBOOL(APPLET(getsebool, _BB_DIR_USR_SBIN, _BB_SUID_NEVER)) 161 USE_GETTY(APPLET(getty, _BB_DIR_SBIN, _BB_SUID_NEVER)) 162 USE_GREP(APPLET(grep, _BB_DIR_BIN, _BB_SUID_NEVER)) 163 USE_GUNZIP(APPLET(gunzip, _BB_DIR_BIN, _BB_SUID_NEVER)) 164 USE_GZIP(APPLET(gzip, _BB_DIR_BIN, _BB_SUID_NEVER)) 165 USE_HALT(APPLET(halt, _BB_DIR_SBIN, _BB_SUID_NEVER)) 166 USE_HDPARM(APPLET(hdparm, _BB_DIR_SBIN, _BB_SUID_NEVER)) 167 USE_HEAD(APPLET(head, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 168 USE_HEXDUMP(APPLET_NOEXEC(hexdump, hexdump, _BB_DIR_USR_BIN, _BB_SUID_NEVER, hexdump)) 169 USE_HOSTID(APPLET_NOFORK(hostid, hostid, _BB_DIR_USR_BIN, _BB_SUID_NEVER, hostid)) 170 USE_HOSTNAME(APPLET(hostname, _BB_DIR_BIN, _BB_SUID_NEVER)) 171 USE_HTTPD(APPLET(httpd, _BB_DIR_USR_SBIN, _BB_SUID_NEVER)) 172 USE_HUSH(APPLET_NOUSAGE(hush, hush, _BB_DIR_BIN, _BB_SUID_NEVER)) 173 USE_HWCLOCK(APPLET(hwclock, _BB_DIR_SBIN, _BB_SUID_NEVER)) 174 USE_ID(APPLET(id, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 175 USE_IFCONFIG(APPLET(ifconfig, _BB_DIR_SBIN, _BB_SUID_NEVER)) 176 USE_IFUPDOWN(APPLET_ODDNAME(ifdown, ifupdown, _BB_DIR_SBIN, _BB_SUID_NEVER, ifdown)) 177 USE_IFUPDOWN(APPLET_ODDNAME(ifup, ifupdown, _BB_DIR_SBIN, _BB_SUID_NEVER, ifup)) 178 USE_INETD(APPLET(inetd, _BB_DIR_USR_SBIN, _BB_SUID_NEVER)) 179 USE_INIT(APPLET(init, _BB_DIR_SBIN, _BB_SUID_NEVER)) 180 USE_INSMOD(APPLET(insmod, _BB_DIR_SBIN, _BB_SUID_NEVER)) 181 USE_INSTALL(APPLET(install, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 66 IF_BUNZIP2(APPLET(bunzip2, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 67 IF_BUNZIP2(APPLET_ODDNAME(bzcat, bunzip2, _BB_DIR_USR_BIN, _BB_SUID_DROP, bzcat)) 68 IF_DATE(APPLET(date, _BB_DIR_BIN, _BB_SUID_DROP)) 69 IF_BASE64(APPLET(base64, _BB_DIR_BIN, _BB_SUID_DROP)) 70 IF_PATCH(APPLET(patch, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 71 IF_FIND(APPLET_NOEXEC(find, find, _BB_DIR_USR_BIN, _BB_SUID_DROP, find)) 72 IF_GREP(APPLET(grep, _BB_DIR_BIN, _BB_SUID_DROP)) 73 IF_FEATURE_GREP_EGREP_ALIAS(APPLET_ODDNAME(egrep, grep, _BB_DIR_BIN, _BB_SUID_DROP, egrep)) 74 IF_FEATURE_GREP_FGREP_ALIAS(APPLET_ODDNAME(fgrep, grep, _BB_DIR_BIN, _BB_SUID_DROP, fgrep)) 75 IF_XARGS(APPLET_NOEXEC(xargs, xargs, _BB_DIR_USR_BIN, _BB_SUID_DROP, xargs)) 76 IF_BOOTCHARTD(APPLET(bootchartd, _BB_DIR_SBIN, _BB_SUID_DROP)) 77 IF_HALT(APPLET(halt, _BB_DIR_SBIN, _BB_SUID_DROP)) 78 IF_HALT(APPLET_ODDNAME(poweroff, halt, _BB_DIR_SBIN, _BB_SUID_DROP, poweroff)) 79 IF_HALT(APPLET_ODDNAME(reboot, halt, _BB_DIR_SBIN, _BB_SUID_DROP, reboot)) 80 IF_INIT(APPLET(init, _BB_DIR_SBIN, _BB_SUID_DROP)) 81 IF_FEATURE_INITRD(APPLET_ODDNAME(linuxrc, init, _BB_DIR_ROOT, _BB_SUID_DROP, linuxrc)) 82 IF_MESG(APPLET(mesg, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 83 IF_ADD_SHELL( APPLET_ODDNAME(add-shell , add_remove_shell, _BB_DIR_USR_BIN, _BB_SUID_DROP, add_shell )) 84 IF_REMOVE_SHELL(APPLET_ODDNAME(remove-shell, add_remove_shell, _BB_DIR_USR_BIN, _BB_SUID_DROP, remove_shell)) 85 IF_CONSPY(APPLET(conspy, _BB_DIR_BIN, _BB_SUID_DROP)) 86 IF_NANDWRITE(APPLET(nandwrite, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 87 IF_NANDWRITE(APPLET_ODDNAME(nanddump, nandwrite, _BB_DIR_USR_SBIN, _BB_SUID_DROP, nanddump)) 88 IF_UBIATTACH(APPLET_ODDNAME(ubiattach, ubi_attach_detach, _BB_DIR_USR_SBIN, _BB_SUID_DROP, ubiattach)) 89 IF_UBIDETACH(APPLET_ODDNAME(ubidetach, ubi_attach_detach, _BB_DIR_USR_SBIN, _BB_SUID_DROP, ubidetach)) 90 IF_DEPMOD(APPLET(depmod, _BB_DIR_SBIN, _BB_SUID_DROP)) 91 IF_INSMOD(APPLET(insmod, _BB_DIR_SBIN, _BB_SUID_DROP)) 92 IF_LSMOD(APPLET(lsmod, _BB_DIR_SBIN, _BB_SUID_DROP)) 93 IF_MODINFO(APPLET(modinfo, _BB_DIR_SBIN, _BB_SUID_DROP)) 94 IF_MODPROBE(APPLET(modprobe, _BB_DIR_SBIN, _BB_SUID_DROP)) 95 IF_MODPROBE_SMALL(APPLET(modprobe, _BB_DIR_SBIN, _BB_SUID_DROP)) 96 IF_MODPROBE_SMALL(APPLET_ODDNAME(depmod, modprobe, _BB_DIR_SBIN, _BB_SUID_DROP, modprobe)) 97 IF_MODPROBE_SMALL(APPLET_ODDNAME(insmod, modprobe, _BB_DIR_SBIN, _BB_SUID_DROP, modprobe)) 98 IF_MODPROBE_SMALL(APPLET_ODDNAME(lsmod, modprobe, _BB_DIR_SBIN, _BB_SUID_DROP, modprobe)) 99 IF_MODPROBE_SMALL(APPLET_ODDNAME(rmmod, modprobe, _BB_DIR_SBIN, _BB_SUID_DROP, modprobe)) 100 IF_RMMOD(APPLET(rmmod, _BB_DIR_SBIN, _BB_SUID_DROP)) 101 IF_NBDCLIENT(APPLET_ODDNAME(nbd-client, nbdclient, _BB_DIR_USR_SBIN, _BB_SUID_DROP, nbdclient)) 102 IF_IOSTAT(APPLET(iostat, _BB_DIR_BIN, _BB_SUID_DROP)) 103 IF_MPSTAT(APPLET(mpstat, _BB_DIR_BIN, _BB_SUID_DROP)) 104 IF_PMAP(APPLET(pmap, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 105 IF_POWERTOP(APPLET(powertop, _BB_DIR_BIN, _BB_SUID_DROP)) 106 IF_SMEMCAP(APPLET(smemcap, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 107 IF_ASH(APPLET(ash, _BB_DIR_BIN, _BB_SUID_DROP)) 108 IF_FEATURE_SH_IS_ASH(APPLET_ODDNAME(sh, ash, _BB_DIR_BIN, _BB_SUID_DROP, sh)) 109 IF_FEATURE_BASH_IS_ASH(APPLET_ODDNAME(bash, ash, _BB_DIR_BIN, _BB_SUID_DROP, bash)) 110 IF_CTTYHACK(APPLET(cttyhack, _BB_DIR_BIN, _BB_SUID_DROP)) 111 IF_HUSH(APPLET(hush, _BB_DIR_BIN, _BB_SUID_DROP)) 112 IF_MSH(APPLET(msh, _BB_DIR_BIN, _BB_SUID_DROP)) 113 IF_FEATURE_SH_IS_HUSH(APPLET_ODDNAME(sh, hush, _BB_DIR_BIN, _BB_SUID_DROP, sh)) 114 IF_FEATURE_BASH_IS_HUSH(APPLET_ODDNAME(bash, hush, _BB_DIR_BIN, _BB_SUID_DROP, bash)) 115 IF_BLOCKDEV(APPLET(blockdev, _BB_DIR_SBIN, _BB_SUID_DROP)) 116 IF_REV(APPLET(rev, _BB_DIR_BIN, _BB_SUID_DROP)) 117 IF_TEST(APPLET_NOFORK([, test, _BB_DIR_USR_BIN, _BB_SUID_DROP, test)) 118 IF_TEST(APPLET_NOFORK([[, test, _BB_DIR_USR_BIN, _BB_SUID_DROP, test)) 119 IF_ACPID(APPLET(acpid, _BB_DIR_SBIN, _BB_SUID_DROP)) 120 IF_ADDGROUP(APPLET(addgroup, _BB_DIR_BIN, _BB_SUID_DROP)) 121 IF_ADDUSER(APPLET(adduser, _BB_DIR_BIN, _BB_SUID_DROP)) 122 IF_ADJTIMEX(APPLET(adjtimex, _BB_DIR_SBIN, _BB_SUID_DROP)) 123 IF_AR(APPLET(ar, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 124 IF_ARP(APPLET(arp, _BB_DIR_SBIN, _BB_SUID_DROP)) 125 IF_ARPING(APPLET(arping, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 126 IF_AWK(APPLET_NOEXEC(awk, awk, _BB_DIR_USR_BIN, _BB_SUID_DROP, awk)) 127 IF_BASENAME(APPLET_NOFORK(basename, basename, _BB_DIR_USR_BIN, _BB_SUID_DROP, basename)) 128 IF_BBCONFIG(APPLET(bbconfig, _BB_DIR_BIN, _BB_SUID_DROP)) 129 IF_BEEP(APPLET(beep, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 130 IF_BLKID(APPLET(blkid, _BB_DIR_SBIN, _BB_SUID_DROP)) 131 IF_BRCTL(APPLET(brctl, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 132 IF_BZIP2(APPLET(bzip2, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 133 IF_CAL(APPLET(cal, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 134 IF_CAT(APPLET_NOFORK(cat, cat, _BB_DIR_BIN, _BB_SUID_DROP, cat)) 135 IF_CATV(APPLET(catv, _BB_DIR_BIN, _BB_SUID_DROP)) 136 IF_CHAT(APPLET(chat, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 137 IF_CHATTR(APPLET(chattr, _BB_DIR_BIN, _BB_SUID_DROP)) 138 IF_CHCON(APPLET(chcon, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 139 IF_CHGRP(APPLET_NOEXEC(chgrp, chgrp, _BB_DIR_BIN, _BB_SUID_DROP, chgrp)) 140 IF_CHMOD(APPLET_NOEXEC(chmod, chmod, _BB_DIR_BIN, _BB_SUID_DROP, chmod)) 141 IF_CHOWN(APPLET_NOEXEC(chown, chown, _BB_DIR_BIN, _BB_SUID_DROP, chown)) 142 IF_CHPASSWD(APPLET(chpasswd, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 143 IF_CHPST(APPLET(chpst, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 144 IF_CHROOT(APPLET(chroot, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 145 IF_CHRT(APPLET(chrt, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 146 IF_CHVT(APPLET(chvt, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 147 IF_CKSUM(APPLET_NOEXEC(cksum, cksum, _BB_DIR_USR_BIN, _BB_SUID_DROP, cksum)) 148 IF_CLEAR(APPLET(clear, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 149 IF_CMP(APPLET(cmp, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 150 IF_COMM(APPLET(comm, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 151 IF_CP(APPLET_NOEXEC(cp, cp, _BB_DIR_BIN, _BB_SUID_DROP, cp)) 152 IF_CPIO(APPLET(cpio, _BB_DIR_BIN, _BB_SUID_DROP)) 153 IF_CROND(APPLET(crond, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 154 IF_CRONTAB(APPLET(crontab, _BB_DIR_USR_BIN, _BB_SUID_REQUIRE)) 155 IF_CRYPTPW(APPLET(cryptpw, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 156 IF_CUT(APPLET_NOEXEC(cut, cut, _BB_DIR_USR_BIN, _BB_SUID_DROP, cut)) 157 IF_DC(APPLET(dc, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 158 IF_DD(APPLET_NOEXEC(dd, dd, _BB_DIR_BIN, _BB_SUID_DROP, dd)) 159 IF_DEALLOCVT(APPLET(deallocvt, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 160 IF_DELGROUP(APPLET_ODDNAME(delgroup, deluser, _BB_DIR_BIN, _BB_SUID_DROP, delgroup)) 161 IF_DELUSER(APPLET(deluser, _BB_DIR_BIN, _BB_SUID_DROP)) 162 IF_DEVFSD(APPLET(devfsd, _BB_DIR_SBIN, _BB_SUID_DROP)) 163 IF_DEVMEM(APPLET(devmem, _BB_DIR_SBIN, _BB_SUID_DROP)) 164 IF_DF(APPLET(df, _BB_DIR_BIN, _BB_SUID_DROP)) 165 IF_DHCPRELAY(APPLET(dhcprelay, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 166 IF_DIFF(APPLET(diff, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 167 IF_DIRNAME(APPLET_NOFORK(dirname, dirname, _BB_DIR_USR_BIN, _BB_SUID_DROP, dirname)) 168 IF_DMESG(APPLET(dmesg, _BB_DIR_BIN, _BB_SUID_DROP)) 169 IF_DNSD(APPLET(dnsd, _BB_DIR_USR_SBIN, _BB_SUID_REQUIRE)) 170 IF_HOSTNAME(APPLET_ODDNAME(dnsdomainname, hostname, _BB_DIR_BIN, _BB_SUID_DROP, dnsdomainname)) 171 IF_DOS2UNIX(APPLET_NOEXEC(dos2unix, dos2unix, _BB_DIR_USR_BIN, _BB_SUID_DROP, dos2unix)) 172 IF_DPKG(APPLET(dpkg, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 173 IF_DPKG_DEB(APPLET_ODDNAME(dpkg-deb, dpkg_deb, _BB_DIR_USR_BIN, _BB_SUID_DROP, dpkg_deb)) 174 IF_DU(APPLET(du, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 175 IF_DUMPKMAP(APPLET(dumpkmap, _BB_DIR_BIN, _BB_SUID_DROP)) 176 IF_DUMPLEASES(APPLET(dumpleases, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 177 //IF_E2FSCK(APPLET(e2fsck, _BB_DIR_SBIN, _BB_SUID_DROP)) 178 //IF_E2LABEL(APPLET_ODDNAME(e2label, tune2fs, _BB_DIR_SBIN, _BB_SUID_DROP, e2label)) 179 IF_ECHO(APPLET_NOFORK(echo, echo, _BB_DIR_BIN, _BB_SUID_DROP, echo)) 180 IF_ED(APPLET(ed, _BB_DIR_BIN, _BB_SUID_DROP)) 181 IF_EJECT(APPLET(eject, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 182 IF_ENV(APPLET_NOEXEC(env, env, _BB_DIR_USR_BIN, _BB_SUID_DROP, env)) 183 IF_ENVDIR(APPLET_ODDNAME(envdir, chpst, _BB_DIR_USR_BIN, _BB_SUID_DROP, envdir)) 184 IF_ENVUIDGID(APPLET_ODDNAME(envuidgid, chpst, _BB_DIR_USR_BIN, _BB_SUID_DROP, envuidgid)) 185 IF_ETHER_WAKE(APPLET_ODDNAME(ether-wake, ether_wake, _BB_DIR_USR_BIN, _BB_SUID_DROP, ether_wake)) 186 IF_EXPAND(APPLET(expand, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 187 IF_EXPR(APPLET(expr, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 188 IF_FAKEIDENTD(APPLET(fakeidentd, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 189 IF_FALSE(APPLET_NOFORK(false, false, _BB_DIR_BIN, _BB_SUID_DROP, false)) 190 IF_FBSET(APPLET(fbset, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 191 IF_FBSPLASH(APPLET(fbsplash, _BB_DIR_SBIN, _BB_SUID_DROP)) 192 IF_FDFLUSH(APPLET_ODDNAME(fdflush, freeramdisk, _BB_DIR_BIN, _BB_SUID_DROP, fdflush)) 193 IF_FDFORMAT(APPLET(fdformat, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 194 IF_FDISK(APPLET(fdisk, _BB_DIR_SBIN, _BB_SUID_DROP)) 195 IF_FGCONSOLE(APPLET(fgconsole, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 196 IF_FINDFS(APPLET(findfs, _BB_DIR_SBIN, _BB_SUID_MAYBE)) 197 IF_FLASH_ERASEALL(APPLET(flash_eraseall, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 198 IF_FLASH_LOCK(APPLET_ODDNAME(flash_lock, flash_lock_unlock, _BB_DIR_USR_SBIN, _BB_SUID_DROP, flash_lock)) 199 IF_FLASH_UNLOCK(APPLET_ODDNAME(flash_unlock, flash_lock_unlock, _BB_DIR_USR_SBIN, _BB_SUID_DROP, flash_unlock)) 200 IF_FLASHCP(APPLET(flashcp, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 201 IF_FLOCK(APPLET(flock, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 202 IF_FOLD(APPLET_NOEXEC(fold, fold, _BB_DIR_USR_BIN, _BB_SUID_DROP, fold)) 203 IF_FREE(APPLET(free, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 204 IF_FREERAMDISK(APPLET(freeramdisk, _BB_DIR_SBIN, _BB_SUID_DROP)) 205 IF_FSCK(APPLET(fsck, _BB_DIR_SBIN, _BB_SUID_DROP)) 206 //IF_E2FSCK(APPLET_ODDNAME(fsck.ext2, e2fsck, _BB_DIR_SBIN, _BB_SUID_DROP, fsck_ext2)) 207 //IF_E2FSCK(APPLET_ODDNAME(fsck.ext3, e2fsck, _BB_DIR_SBIN, _BB_SUID_DROP, fsck_ext3)) 208 IF_FSCK_MINIX(APPLET_ODDNAME(fsck.minix, fsck_minix, _BB_DIR_SBIN, _BB_SUID_DROP, fsck_minix)) 209 IF_FSYNC(APPLET_NOFORK(fsync, fsync, _BB_DIR_BIN, _BB_SUID_DROP, fsync)) 210 IF_FTPD(APPLET(ftpd, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 211 IF_FTPGET(APPLET_ODDNAME(ftpget, ftpgetput, _BB_DIR_USR_BIN, _BB_SUID_DROP, ftpget)) 212 IF_FTPPUT(APPLET_ODDNAME(ftpput, ftpgetput, _BB_DIR_USR_BIN, _BB_SUID_DROP, ftpput)) 213 IF_FUSER(APPLET(fuser, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 214 IF_GETENFORCE(APPLET(getenforce, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 215 IF_GETOPT(APPLET(getopt, _BB_DIR_BIN, _BB_SUID_DROP)) 216 IF_GETSEBOOL(APPLET(getsebool, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 217 IF_GETTY(APPLET(getty, _BB_DIR_SBIN, _BB_SUID_DROP)) 218 IF_GUNZIP(APPLET(gunzip, _BB_DIR_BIN, _BB_SUID_DROP)) 219 IF_GZIP(APPLET(gzip, _BB_DIR_BIN, _BB_SUID_DROP)) 220 IF_HD(APPLET_NOEXEC(hd, hexdump, _BB_DIR_USR_BIN, _BB_SUID_DROP, hd)) 221 IF_HDPARM(APPLET(hdparm, _BB_DIR_SBIN, _BB_SUID_DROP)) 222 IF_HEAD(APPLET_NOEXEC(head, head, _BB_DIR_USR_BIN, _BB_SUID_DROP, head)) 223 IF_HEXDUMP(APPLET_NOEXEC(hexdump, hexdump, _BB_DIR_USR_BIN, _BB_SUID_DROP, hexdump)) 224 IF_HOSTID(APPLET_NOFORK(hostid, hostid, _BB_DIR_USR_BIN, _BB_SUID_DROP, hostid)) 225 IF_HOSTNAME(APPLET(hostname, _BB_DIR_BIN, _BB_SUID_DROP)) 226 IF_HTTPD(APPLET(httpd, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 227 IF_HWCLOCK(APPLET(hwclock, _BB_DIR_SBIN, _BB_SUID_DROP)) 228 IF_ID(APPLET_NOEXEC(id, id, _BB_DIR_USR_BIN, _BB_SUID_DROP, id)) 229 IF_IFCONFIG(APPLET(ifconfig, _BB_DIR_SBIN, _BB_SUID_DROP)) 230 IF_IFUPDOWN(APPLET_ODDNAME(ifdown, ifupdown, _BB_DIR_SBIN, _BB_SUID_DROP, ifdown)) 231 IF_IFENSLAVE(APPLET(ifenslave, _BB_DIR_SBIN, _BB_SUID_DROP)) 232 IF_IFPLUGD(APPLET(ifplugd, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 233 IF_IFUPDOWN(APPLET_ODDNAME(ifup, ifupdown, _BB_DIR_SBIN, _BB_SUID_DROP, ifup)) 234 IF_INETD(APPLET(inetd, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 235 IF_INOTIFYD(APPLET(inotifyd, _BB_DIR_SBIN, _BB_SUID_DROP)) 236 IF_INSTALL(APPLET(install, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 237 IF_IONICE(APPLET(ionice, _BB_DIR_BIN, _BB_SUID_DROP)) 182 238 #if ENABLE_FEATURE_IP_ADDRESS \ 183 239 || ENABLE_FEATURE_IP_ROUTE \ … … 185 241 || ENABLE_FEATURE_IP_TUNNEL \ 186 242 || ENABLE_FEATURE_IP_RULE 187 USE_IP(APPLET(ip, _BB_DIR_BIN, _BB_SUID_NEVER))243 IF_IP(APPLET(ip, _BB_DIR_BIN, _BB_SUID_DROP)) 188 244 #endif 189 USE_IPADDR(APPLET(ipaddr, _BB_DIR_BIN, _BB_SUID_NEVER)) 190 USE_IPCALC(APPLET(ipcalc, _BB_DIR_BIN, _BB_SUID_NEVER)) 191 USE_IPCRM(APPLET(ipcrm, _BB_DIR_USR_BIN, _BB_SUID_ALWAYS)) 192 USE_IPCS(APPLET(ipcs, _BB_DIR_USR_BIN, _BB_SUID_ALWAYS)) 193 USE_IPLINK(APPLET(iplink, _BB_DIR_BIN, _BB_SUID_NEVER)) 194 USE_IPROUTE(APPLET(iproute, _BB_DIR_BIN, _BB_SUID_NEVER)) 195 USE_IPRULE(APPLET(iprule, _BB_DIR_BIN, _BB_SUID_NEVER)) 196 USE_IPTUNNEL(APPLET(iptunnel, _BB_DIR_BIN, _BB_SUID_NEVER)) 197 USE_KILL(APPLET(kill, _BB_DIR_BIN, _BB_SUID_NEVER)) 198 USE_KILLALL(APPLET_ODDNAME(killall, kill, _BB_DIR_USR_BIN, _BB_SUID_NEVER, killall)) 199 USE_KILLALL5(APPLET_ODDNAME(killall5, kill, _BB_DIR_USR_BIN, _BB_SUID_NEVER, killall5)) 200 USE_KLOGD(APPLET(klogd, _BB_DIR_SBIN, _BB_SUID_NEVER)) 201 USE_LASH(APPLET(lash, _BB_DIR_BIN, _BB_SUID_NEVER)) 202 USE_LAST(APPLET(last, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 203 USE_LENGTH(APPLET_NOFORK(length, length, _BB_DIR_USR_BIN, _BB_SUID_NEVER, length)) 204 USE_LESS(APPLET(less, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 205 USE_SETARCH(APPLET_NOUSAGE(linux32, setarch, _BB_DIR_BIN, _BB_SUID_NEVER)) 206 USE_SETARCH(APPLET_NOUSAGE(linux64, setarch, _BB_DIR_BIN, _BB_SUID_NEVER)) 207 USE_FEATURE_INITRD(APPLET_NOUSAGE(linuxrc, init, _BB_DIR_ROOT, _BB_SUID_NEVER)) 208 USE_LN(APPLET_NOEXEC(ln, ln, _BB_DIR_BIN, _BB_SUID_NEVER, ln)) 209 USE_LOAD_POLICY(APPLET(load_policy, _BB_DIR_USR_SBIN, _BB_SUID_NEVER)) 210 USE_LOADFONT(APPLET(loadfont, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 211 USE_LOADKMAP(APPLET(loadkmap, _BB_DIR_SBIN, _BB_SUID_NEVER)) 212 USE_LOGGER(APPLET(logger, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 213 USE_LOGIN(APPLET(login, _BB_DIR_BIN, _BB_SUID_ALWAYS)) 214 USE_LOGNAME(APPLET_NOFORK(logname, logname, _BB_DIR_USR_BIN, _BB_SUID_NEVER, logname)) 215 USE_LOGREAD(APPLET(logread, _BB_DIR_SBIN, _BB_SUID_NEVER)) 216 USE_LOSETUP(APPLET(losetup, _BB_DIR_SBIN, _BB_SUID_NEVER)) 217 USE_LS(APPLET_NOEXEC(ls, ls, _BB_DIR_BIN, _BB_SUID_NEVER, ls)) 218 USE_LSATTR(APPLET(lsattr, _BB_DIR_BIN, _BB_SUID_NEVER)) 219 USE_LSMOD(APPLET(lsmod, _BB_DIR_SBIN, _BB_SUID_NEVER)) 220 USE_UNLZMA(APPLET_ODDNAME(lzmacat, unlzma, _BB_DIR_USR_BIN, _BB_SUID_NEVER, lzmacat)) 221 USE_MAKEDEVS(APPLET(makedevs, _BB_DIR_SBIN, _BB_SUID_NEVER)) 222 USE_MATCHPATHCON(APPLET(matchpathcon, _BB_DIR_USR_SBIN, _BB_SUID_NEVER)) 223 USE_MD5SUM(APPLET_ODDNAME(md5sum, md5_sha1_sum, _BB_DIR_USR_BIN, _BB_SUID_NEVER, md5sum)) 224 USE_MDEV(APPLET(mdev, _BB_DIR_SBIN, _BB_SUID_NEVER)) 225 USE_MESG(APPLET(mesg, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 226 USE_MKDIR(APPLET_NOFORK(mkdir, mkdir, _BB_DIR_BIN, _BB_SUID_NEVER, mkdir)) 227 //USE_MKE2FS(APPLET(mke2fs, _BB_DIR_SBIN, _BB_SUID_NEVER)) 228 USE_MKFIFO(APPLET(mkfifo, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 229 //USE_MKE2FS(APPLET_NOUSAGE(mkfs.ext2, mke2fs, _BB_DIR_SBIN, _BB_SUID_NEVER)) 230 //USE_MKE2FS(APPLET_NOUSAGE(mkfs.ext3, mke2fs, _BB_DIR_SBIN, _BB_SUID_NEVER)) 231 USE_MKFS_MINIX(APPLET_ODDNAME(mkfs.minix, mkfs_minix, _BB_DIR_SBIN, _BB_SUID_NEVER, mkfs_minix)) 232 USE_MKNOD(APPLET(mknod, _BB_DIR_BIN, _BB_SUID_NEVER)) 233 USE_MKSWAP(APPLET(mkswap, _BB_DIR_SBIN, _BB_SUID_NEVER)) 234 USE_MKTEMP(APPLET(mktemp, _BB_DIR_BIN, _BB_SUID_NEVER)) 235 USE_MODPROBE(APPLET(modprobe, _BB_DIR_SBIN, _BB_SUID_NEVER)) 236 USE_MORE(APPLET(more, _BB_DIR_BIN, _BB_SUID_NEVER)) 237 USE_MOUNT(APPLET(mount, _BB_DIR_BIN, USE_DESKTOP(_BB_SUID_MAYBE) SKIP_DESKTOP(_BB_SUID_NEVER))) 238 USE_MOUNTPOINT(APPLET(mountpoint, _BB_DIR_BIN, _BB_SUID_NEVER)) 239 USE_MSH(APPLET_NOUSAGE(msh, msh, _BB_DIR_BIN, _BB_SUID_NEVER)) 240 USE_MT(APPLET(mt, _BB_DIR_BIN, _BB_SUID_NEVER)) 241 USE_MV(APPLET(mv, _BB_DIR_BIN, _BB_SUID_NEVER)) 242 USE_NAMEIF(APPLET(nameif, _BB_DIR_SBIN, _BB_SUID_NEVER)) 243 USE_NC(APPLET(nc, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 244 USE_NETSTAT(APPLET(netstat, _BB_DIR_BIN, _BB_SUID_NEVER)) 245 USE_NICE(APPLET(nice, _BB_DIR_BIN, _BB_SUID_NEVER)) 246 USE_NMETER(APPLET(nmeter, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 247 USE_NOHUP(APPLET(nohup, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 248 USE_NSLOOKUP(APPLET(nslookup, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 249 USE_OD(APPLET(od, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 250 USE_OPENVT(APPLET(openvt, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 251 USE_PASSWD(APPLET(passwd, _BB_DIR_USR_BIN, _BB_SUID_ALWAYS)) 252 USE_PATCH(APPLET(patch, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 253 USE_PIDOF(APPLET(pidof, _BB_DIR_BIN, _BB_SUID_NEVER)) 254 USE_PING(APPLET(ping, _BB_DIR_BIN, _BB_SUID_MAYBE)) 255 USE_PING6(APPLET(ping6, _BB_DIR_BIN, _BB_SUID_NEVER)) 256 USE_PIPE_PROGRESS(APPLET_NOUSAGE(pipe_progress, pipe_progress, _BB_DIR_BIN, _BB_SUID_NEVER)) 257 USE_PIVOT_ROOT(APPLET(pivot_root, _BB_DIR_SBIN, _BB_SUID_NEVER)) 258 USE_HALT(APPLET_ODDNAME(poweroff, halt, _BB_DIR_SBIN, _BB_SUID_NEVER, poweroff)) 259 USE_PRINTENV(APPLET(printenv, _BB_DIR_BIN, _BB_SUID_NEVER)) 260 USE_PRINTF(APPLET(printf, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 261 USE_PS(APPLET(ps, _BB_DIR_BIN, _BB_SUID_NEVER)) 262 USE_PSCAN(APPLET(pscan, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 263 USE_PWD(APPLET_NOFORK(pwd, pwd, _BB_DIR_BIN, _BB_SUID_NEVER, pwd)) 264 USE_RAIDAUTORUN(APPLET(raidautorun, _BB_DIR_SBIN, _BB_SUID_NEVER)) 265 USE_RDATE(APPLET(rdate, _BB_DIR_USR_SBIN, _BB_SUID_NEVER)) 266 USE_READAHEAD(APPLET(readahead, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 267 USE_READLINK(APPLET(readlink, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 268 USE_READPROFILE(APPLET(readprofile, _BB_DIR_USR_SBIN, _BB_SUID_NEVER)) 269 USE_REALPATH(APPLET(realpath, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 270 USE_HALT(APPLET_ODDNAME(reboot, halt, _BB_DIR_SBIN, _BB_SUID_NEVER, reboot)) 271 USE_RENICE(APPLET(renice, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 272 USE_RESET(APPLET(reset, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 273 USE_RESIZE(APPLET(resize, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 274 USE_RESTORECON(APPLET_ODDNAME(restorecon, setfiles, _BB_DIR_SBIN, _BB_SUID_NEVER, restorecon)) 275 USE_RM(APPLET_NOFORK(rm, rm, _BB_DIR_BIN, _BB_SUID_NEVER, rm)) 276 USE_RMDIR(APPLET_NOFORK(rmdir, rmdir, _BB_DIR_BIN, _BB_SUID_NEVER, rmdir)) 277 USE_RMMOD(APPLET(rmmod, _BB_DIR_SBIN, _BB_SUID_NEVER)) 278 USE_ROUTE(APPLET(route, _BB_DIR_SBIN, _BB_SUID_NEVER)) 279 USE_RPM(APPLET(rpm, _BB_DIR_BIN, _BB_SUID_NEVER)) 280 USE_RPM2CPIO(APPLET(rpm2cpio, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 281 USE_RUN_PARTS(APPLET_ODDNAME(run-parts, run_parts, _BB_DIR_BIN, _BB_SUID_NEVER, run_parts)) 282 USE_RUNCON(APPLET(runcon, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 283 USE_RUNLEVEL(APPLET(runlevel, _BB_DIR_SBIN, _BB_SUID_NEVER)) 284 USE_RUNSV(APPLET(runsv, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 285 USE_RUNSVDIR(APPLET(runsvdir, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 286 USE_RX(APPLET(rx, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 287 USE_SED(APPLET(sed, _BB_DIR_BIN, _BB_SUID_NEVER)) 288 USE_SELINUXENABLED(APPLET(selinuxenabled, _BB_DIR_USR_SBIN, _BB_SUID_NEVER)) 289 USE_SEQ(APPLET_NOFORK(seq, seq, _BB_DIR_USR_BIN, _BB_SUID_NEVER, seq)) 290 USE_SETARCH(APPLET(setarch, _BB_DIR_BIN, _BB_SUID_NEVER)) 291 USE_SETCONSOLE(APPLET(setconsole, _BB_DIR_SBIN, _BB_SUID_NEVER)) 292 USE_SETENFORCE(APPLET(setenforce, _BB_DIR_USR_SBIN, _BB_SUID_NEVER)) 293 USE_SETFILES(APPLET(setfiles, _BB_DIR_SBIN, _BB_SUID_NEVER)) 294 USE_SETKEYCODES(APPLET(setkeycodes, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 295 USE_SETLOGCONS(APPLET(setlogcons, _BB_DIR_USR_SBIN, _BB_SUID_NEVER)) 296 USE_SETSID(APPLET(setsid, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 297 USE_SETUIDGID(APPLET_ODDNAME(setuidgid, chpst, _BB_DIR_USR_BIN, _BB_SUID_NEVER, setuidgid)) 298 USE_FEATURE_SH_IS_ASH(APPLET_NOUSAGE(sh, ash, _BB_DIR_BIN, _BB_SUID_NEVER)) 299 USE_FEATURE_SH_IS_HUSH(APPLET_NOUSAGE(sh, hush, _BB_DIR_BIN, _BB_SUID_NEVER)) 300 USE_FEATURE_SH_IS_LASH(APPLET_NOUSAGE(sh, lash, _BB_DIR_BIN, _BB_SUID_NEVER)) 301 USE_FEATURE_SH_IS_MSH(APPLET_NOUSAGE(sh, msh, _BB_DIR_BIN, _BB_SUID_NEVER)) 302 USE_SHA1SUM(APPLET_ODDNAME(sha1sum, md5_sha1_sum, _BB_DIR_USR_BIN, _BB_SUID_NEVER, sha1sum)) 303 USE_SLATTACH(APPLET(slattach, _BB_DIR_SBIN, _BB_SUID_NEVER)) 304 USE_SLEEP(APPLET_NOFORK(sleep, sleep, _BB_DIR_BIN, _BB_SUID_NEVER, sleep)) 305 USE_SOFTLIMIT(APPLET_ODDNAME(softlimit, chpst, _BB_DIR_USR_BIN, _BB_SUID_NEVER, softlimit)) 306 USE_SORT(APPLET_NOEXEC(sort, sort, _BB_DIR_USR_BIN, _BB_SUID_NEVER, sort)) 307 USE_SPLIT(APPLET(split, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 308 USE_START_STOP_DAEMON(APPLET_ODDNAME(start-stop-daemon, start_stop_daemon, _BB_DIR_SBIN, _BB_SUID_NEVER, start_stop_daemon)) 309 USE_STAT(APPLET(stat, _BB_DIR_BIN, _BB_SUID_NEVER)) 310 USE_STRINGS(APPLET(strings, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 311 USE_STTY(APPLET(stty, _BB_DIR_BIN, _BB_SUID_NEVER)) 312 USE_SU(APPLET(su, _BB_DIR_BIN, _BB_SUID_ALWAYS)) 313 USE_SULOGIN(APPLET(sulogin, _BB_DIR_SBIN, _BB_SUID_NEVER)) 314 USE_SUM(APPLET(sum, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 315 USE_SV(APPLET(sv, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 316 USE_SVLOGD(APPLET(svlogd, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 317 USE_SWAPONOFF(APPLET_ODDNAME(swapoff, swap_on_off, _BB_DIR_SBIN, _BB_SUID_NEVER,swapoff)) 318 USE_SWAPONOFF(APPLET_ODDNAME(swapon, swap_on_off, _BB_DIR_SBIN, _BB_SUID_NEVER, swapon)) 319 USE_SWITCH_ROOT(APPLET(switch_root, _BB_DIR_SBIN, _BB_SUID_NEVER)) 320 USE_SYNC(APPLET_NOFORK(sync, sync, _BB_DIR_BIN, _BB_SUID_NEVER, sync)) 321 USE_BB_SYSCTL(APPLET(sysctl, _BB_DIR_SBIN, _BB_SUID_NEVER)) 322 USE_SYSLOGD(APPLET(syslogd, _BB_DIR_SBIN, _BB_SUID_NEVER)) 323 USE_TAIL(APPLET(tail, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 324 USE_TAR(APPLET(tar, _BB_DIR_BIN, _BB_SUID_NEVER)) 325 USE_TASKSET(APPLET(taskset, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 326 USE_TCPSVD(APPLET_ODDNAME(tcpsvd, tcpudpsvd, _BB_DIR_USR_BIN, _BB_SUID_NEVER, tcpsvd)) 327 USE_TEE(APPLET(tee, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 328 USE_TELNET(APPLET(telnet, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 329 USE_TELNETD(APPLET(telnetd, _BB_DIR_USR_SBIN, _BB_SUID_NEVER)) 330 USE_TEST(APPLET_NOEXEC(test, test, _BB_DIR_USR_BIN, _BB_SUID_NEVER, test)) 245 IF_IPADDR(APPLET(ipaddr, _BB_DIR_BIN, _BB_SUID_DROP)) 246 IF_IPCALC(APPLET(ipcalc, _BB_DIR_BIN, _BB_SUID_DROP)) 247 IF_IPCRM(APPLET(ipcrm, _BB_DIR_USR_BIN, _BB_SUID_REQUIRE)) 248 IF_IPCS(APPLET(ipcs, _BB_DIR_USR_BIN, _BB_SUID_REQUIRE)) 249 IF_IPLINK(APPLET(iplink, _BB_DIR_BIN, _BB_SUID_DROP)) 250 IF_IPROUTE(APPLET(iproute, _BB_DIR_BIN, _BB_SUID_DROP)) 251 IF_IPRULE(APPLET(iprule, _BB_DIR_BIN, _BB_SUID_DROP)) 252 IF_IPTUNNEL(APPLET(iptunnel, _BB_DIR_BIN, _BB_SUID_DROP)) 253 IF_KBD_MODE(APPLET(kbd_mode, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 254 IF_KILL(APPLET(kill, _BB_DIR_BIN, _BB_SUID_DROP)) 255 IF_KILLALL(APPLET_ODDNAME(killall, kill, _BB_DIR_USR_BIN, _BB_SUID_DROP, killall)) 256 IF_KILLALL5(APPLET_ODDNAME(killall5, kill, _BB_DIR_USR_BIN, _BB_SUID_DROP, killall5)) 257 IF_KLOGD(APPLET(klogd, _BB_DIR_SBIN, _BB_SUID_DROP)) 258 IF_LAST(APPLET(last, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 259 IF_LENGTH(APPLET_NOFORK(length, length, _BB_DIR_USR_BIN, _BB_SUID_DROP, length)) 260 IF_LESS(APPLET(less, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 261 IF_SETARCH(APPLET_ODDNAME(linux32, setarch, _BB_DIR_BIN, _BB_SUID_DROP, linux32)) 262 IF_SETARCH(APPLET_ODDNAME(linux64, setarch, _BB_DIR_BIN, _BB_SUID_DROP, linux64)) 263 IF_LN(APPLET_NOEXEC(ln, ln, _BB_DIR_BIN, _BB_SUID_DROP, ln)) 264 IF_LOAD_POLICY(APPLET(load_policy, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 265 IF_LOADFONT(APPLET(loadfont, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 266 IF_LOADKMAP(APPLET(loadkmap, _BB_DIR_SBIN, _BB_SUID_DROP)) 267 IF_LOGGER(APPLET(logger, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 268 IF_LOGIN(APPLET(login, _BB_DIR_BIN, _BB_SUID_REQUIRE)) 269 IF_LOGNAME(APPLET_NOFORK(logname, logname, _BB_DIR_USR_BIN, _BB_SUID_DROP, logname)) 270 IF_LOGREAD(APPLET(logread, _BB_DIR_SBIN, _BB_SUID_DROP)) 271 IF_LOSETUP(APPLET(losetup, _BB_DIR_SBIN, _BB_SUID_DROP)) 272 IF_LPD(APPLET(lpd, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 273 IF_LPQ(APPLET_ODDNAME(lpq, lpqr, _BB_DIR_USR_BIN, _BB_SUID_DROP, lpq)) 274 IF_LPR(APPLET_ODDNAME(lpr, lpqr, _BB_DIR_USR_BIN, _BB_SUID_DROP, lpr)) 275 IF_LS(APPLET_NOEXEC(ls, ls, _BB_DIR_BIN, _BB_SUID_DROP, ls)) 276 IF_LSATTR(APPLET(lsattr, _BB_DIR_BIN, _BB_SUID_DROP)) 277 IF_LSPCI(APPLET(lspci, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 278 IF_LSUSB(APPLET(lsusb, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 279 IF_UNLZMA(APPLET_ODDNAME(lzcat, unlzma, _BB_DIR_USR_BIN, _BB_SUID_DROP, lzcat)) 280 IF_LZMA(APPLET_ODDNAME(lzma, unlzma, _BB_DIR_USR_BIN, _BB_SUID_DROP, lzma)) 281 IF_LZOP(APPLET(lzop, _BB_DIR_BIN, _BB_SUID_DROP)) 282 IF_LZOP(APPLET_ODDNAME(lzopcat, lzop, _BB_DIR_USR_BIN, _BB_SUID_DROP, lzopcat)) 283 IF_MAKEDEVS(APPLET(makedevs, _BB_DIR_SBIN, _BB_SUID_DROP)) 284 IF_MAKEMIME(APPLET(makemime, _BB_DIR_BIN, _BB_SUID_DROP)) 285 IF_MAN(APPLET(man, _BB_DIR_SBIN, _BB_SUID_DROP)) 286 IF_MATCHPATHCON(APPLET(matchpathcon, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 287 IF_MD5SUM(APPLET_NOEXEC(md5sum, md5_sha1_sum, _BB_DIR_USR_BIN, _BB_SUID_DROP, md5sum)) 288 IF_MDEV(APPLET(mdev, _BB_DIR_SBIN, _BB_SUID_DROP)) 289 IF_MICROCOM(APPLET(microcom, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 290 IF_MKDIR(APPLET_NOFORK(mkdir, mkdir, _BB_DIR_BIN, _BB_SUID_DROP, mkdir)) 291 IF_MKFS_VFAT(APPLET_ODDNAME(mkdosfs, mkfs_vfat, _BB_DIR_SBIN, _BB_SUID_DROP, mkfs_vfat)) 292 IF_MKFS_EXT2(APPLET_ODDNAME(mke2fs, mkfs_ext2, _BB_DIR_SBIN, _BB_SUID_DROP, mkfs_ext2)) 293 IF_MKFIFO(APPLET_NOEXEC(mkfifo, mkfifo, _BB_DIR_USR_BIN, _BB_SUID_DROP, mkfifo)) 294 IF_MKFS_EXT2(APPLET_ODDNAME(mkfs.ext2, mkfs_ext2, _BB_DIR_SBIN, _BB_SUID_DROP, mkfs_ext2)) 295 //IF_MKE2FS(APPLET_ODDNAME(mkfs.ext3, mke2fs, _BB_DIR_SBIN, _BB_SUID_DROP, mkfs_ext3)) 296 IF_MKFS_MINIX(APPLET_ODDNAME(mkfs.minix, mkfs_minix, _BB_DIR_SBIN, _BB_SUID_DROP, mkfs_minix)) 297 IF_MKFS_REISER(APPLET_ODDNAME(mkfs.reiser, mkfs_reiser, _BB_DIR_SBIN, _BB_SUID_DROP, mkfs_reiser)) 298 IF_MKFS_VFAT(APPLET_ODDNAME(mkfs.vfat, mkfs_vfat, _BB_DIR_SBIN, _BB_SUID_DROP, mkfs_vfat)) 299 IF_MKNOD(APPLET_NOEXEC(mknod, mknod, _BB_DIR_BIN, _BB_SUID_DROP, mknod)) 300 IF_CRYPTPW(APPLET_ODDNAME(mkpasswd, cryptpw, _BB_DIR_USR_BIN, _BB_SUID_DROP, mkpasswd)) 301 IF_MKSWAP(APPLET(mkswap, _BB_DIR_SBIN, _BB_SUID_DROP)) 302 IF_MKTEMP(APPLET(mktemp, _BB_DIR_BIN, _BB_SUID_DROP)) 303 IF_MORE(APPLET(more, _BB_DIR_BIN, _BB_SUID_DROP)) 304 IF_MOUNT(APPLET(mount, _BB_DIR_BIN, IF_DESKTOP(_BB_SUID_MAYBE) IF_NOT_DESKTOP(_BB_SUID_DROP))) 305 IF_MOUNTPOINT(APPLET(mountpoint, _BB_DIR_BIN, _BB_SUID_DROP)) 306 IF_MT(APPLET(mt, _BB_DIR_BIN, _BB_SUID_DROP)) 307 IF_MV(APPLET(mv, _BB_DIR_BIN, _BB_SUID_DROP)) 308 IF_NAMEIF(APPLET(nameif, _BB_DIR_SBIN, _BB_SUID_DROP)) 309 IF_NC(APPLET(nc, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 310 IF_NETSTAT(APPLET(netstat, _BB_DIR_BIN, _BB_SUID_DROP)) 311 IF_NICE(APPLET(nice, _BB_DIR_BIN, _BB_SUID_DROP)) 312 IF_NMETER(APPLET(nmeter, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 313 IF_NOHUP(APPLET(nohup, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 314 IF_NSLOOKUP(APPLET(nslookup, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 315 IF_NTPD(APPLET(ntpd, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 316 IF_OD(APPLET(od, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 317 IF_OPENVT(APPLET(openvt, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 318 //IF_PARSE(APPLET(parse, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 319 IF_PASSWD(APPLET(passwd, _BB_DIR_USR_BIN, _BB_SUID_REQUIRE)) 320 IF_PGREP(APPLET(pgrep, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 321 IF_PIDOF(APPLET(pidof, _BB_DIR_BIN, _BB_SUID_DROP)) 322 IF_PING(APPLET(ping, _BB_DIR_BIN, _BB_SUID_MAYBE)) 323 IF_PING6(APPLET(ping6, _BB_DIR_BIN, _BB_SUID_MAYBE)) 324 IF_PIPE_PROGRESS(APPLET(pipe_progress, _BB_DIR_BIN, _BB_SUID_DROP)) 325 IF_PIVOT_ROOT(APPLET(pivot_root, _BB_DIR_SBIN, _BB_SUID_DROP)) 326 IF_PKILL(APPLET_ODDNAME(pkill, pgrep, _BB_DIR_USR_BIN, _BB_SUID_DROP, pkill)) 327 IF_POPMAILDIR(APPLET(popmaildir, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 328 IF_PRINTENV(APPLET_NOFORK(printenv, printenv, _BB_DIR_BIN, _BB_SUID_DROP, printenv)) 329 IF_PRINTF(APPLET_NOFORK(printf, printf, _BB_DIR_USR_BIN, _BB_SUID_DROP, printf)) 330 IF_PS(APPLET(ps, _BB_DIR_BIN, _BB_SUID_DROP)) 331 IF_PSCAN(APPLET(pscan, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 332 IF_PWD(APPLET_NOFORK(pwd, pwd, _BB_DIR_BIN, _BB_SUID_DROP, pwd)) 333 IF_RAIDAUTORUN(APPLET(raidautorun, _BB_DIR_SBIN, _BB_SUID_DROP)) 334 IF_RDATE(APPLET(rdate, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 335 IF_RDEV(APPLET(rdev, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 336 IF_READAHEAD(APPLET(readahead, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 337 IF_READLINK(APPLET(readlink, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 338 IF_READPROFILE(APPLET(readprofile, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 339 IF_REALPATH(APPLET(realpath, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 340 IF_REFORMIME(APPLET(reformime, _BB_DIR_BIN, _BB_SUID_DROP)) 341 IF_RENICE(APPLET(renice, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 342 IF_RESET(APPLET(reset, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 343 IF_RESIZE(APPLET(resize, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 344 IF_RESTORECON(APPLET_ODDNAME(restorecon, setfiles, _BB_DIR_SBIN, _BB_SUID_DROP, restorecon)) 345 IF_RFKILL(APPLET(rfkill, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 346 IF_RM(APPLET_NOFORK(rm, rm, _BB_DIR_BIN, _BB_SUID_DROP, rm)) 347 IF_RMDIR(APPLET_NOFORK(rmdir, rmdir, _BB_DIR_BIN, _BB_SUID_DROP, rmdir)) 348 IF_ROUTE(APPLET(route, _BB_DIR_SBIN, _BB_SUID_DROP)) 349 IF_RPM(APPLET(rpm, _BB_DIR_BIN, _BB_SUID_DROP)) 350 IF_RPM2CPIO(APPLET(rpm2cpio, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 351 IF_RTCWAKE(APPLET(rtcwake, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 352 IF_RUN_PARTS(APPLET_ODDNAME(run-parts, run_parts, _BB_DIR_BIN, _BB_SUID_DROP, run_parts)) 353 IF_RUNCON(APPLET(runcon, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 354 IF_RUNLEVEL(APPLET(runlevel, _BB_DIR_SBIN, _BB_SUID_DROP)) 355 IF_RUNSV(APPLET(runsv, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 356 IF_RUNSVDIR(APPLET(runsvdir, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 357 IF_RX(APPLET(rx, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 358 IF_SCRIPT(APPLET(script, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 359 IF_SCRIPTREPLAY(APPLET(scriptreplay, _BB_DIR_BIN, _BB_SUID_DROP)) 360 IF_SED(APPLET(sed, _BB_DIR_BIN, _BB_SUID_DROP)) 361 IF_SELINUXENABLED(APPLET(selinuxenabled, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 362 IF_SENDMAIL(APPLET(sendmail, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 363 IF_SEQ(APPLET_NOFORK(seq, seq, _BB_DIR_USR_BIN, _BB_SUID_DROP, seq)) 364 IF_SESTATUS(APPLET(sestatus, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 365 IF_SETARCH(APPLET(setarch, _BB_DIR_BIN, _BB_SUID_DROP)) 366 IF_SETCONSOLE(APPLET(setconsole, _BB_DIR_SBIN, _BB_SUID_DROP)) 367 IF_SETENFORCE(APPLET(setenforce, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 368 IF_SETFILES(APPLET(setfiles, _BB_DIR_SBIN, _BB_SUID_DROP)) 369 IF_SETFONT(APPLET(setfont, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 370 IF_SETKEYCODES(APPLET(setkeycodes, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 371 IF_SETLOGCONS(APPLET(setlogcons, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 372 IF_SETSEBOOL(APPLET(setsebool, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 373 IF_SETSID(APPLET(setsid, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 374 IF_SETUIDGID(APPLET_ODDNAME(setuidgid, chpst, _BB_DIR_USR_BIN, _BB_SUID_DROP, setuidgid)) 375 IF_SHA1SUM(APPLET_NOEXEC(sha1sum, md5_sha1_sum, _BB_DIR_USR_BIN, _BB_SUID_DROP, sha1sum)) 376 IF_SHA256SUM(APPLET_NOEXEC(sha256sum, md5_sha1_sum, _BB_DIR_USR_BIN, _BB_SUID_DROP, sha256sum)) 377 IF_SHA512SUM(APPLET_NOEXEC(sha512sum, md5_sha1_sum, _BB_DIR_USR_BIN, _BB_SUID_DROP, sha512sum)) 378 IF_SHOWKEY(APPLET(showkey, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 379 IF_SLATTACH(APPLET(slattach, _BB_DIR_SBIN, _BB_SUID_DROP)) 380 /* Do not make this applet NOFORK. It breaks ^C-ing of pauses in shells */ 381 IF_SLEEP(APPLET(sleep, _BB_DIR_BIN, _BB_SUID_DROP)) 382 IF_SOFTLIMIT(APPLET_ODDNAME(softlimit, chpst, _BB_DIR_USR_BIN, _BB_SUID_DROP, softlimit)) 383 IF_SORT(APPLET_NOEXEC(sort, sort, _BB_DIR_USR_BIN, _BB_SUID_DROP, sort)) 384 IF_SPLIT(APPLET(split, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 385 IF_START_STOP_DAEMON(APPLET_ODDNAME(start-stop-daemon, start_stop_daemon, _BB_DIR_SBIN, _BB_SUID_DROP, start_stop_daemon)) 386 IF_STAT(APPLET(stat, _BB_DIR_BIN, _BB_SUID_DROP)) 387 IF_STRINGS(APPLET(strings, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 388 IF_STTY(APPLET(stty, _BB_DIR_BIN, _BB_SUID_DROP)) 389 IF_SU(APPLET(su, _BB_DIR_BIN, _BB_SUID_REQUIRE)) 390 IF_SULOGIN(APPLET(sulogin, _BB_DIR_SBIN, _BB_SUID_DROP)) 391 IF_SUM(APPLET(sum, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 392 IF_SV(APPLET(sv, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 393 IF_SVLOGD(APPLET(svlogd, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 394 IF_SWAPONOFF(APPLET_ODDNAME(swapoff, swap_on_off, _BB_DIR_SBIN, _BB_SUID_DROP, swapoff)) 395 IF_SWAPONOFF(APPLET_ODDNAME(swapon, swap_on_off, _BB_DIR_SBIN, _BB_SUID_DROP, swapon)) 396 IF_SWITCH_ROOT(APPLET(switch_root, _BB_DIR_SBIN, _BB_SUID_DROP)) 397 IF_SYNC(APPLET_NOFORK(sync, sync, _BB_DIR_BIN, _BB_SUID_DROP, sync)) 398 IF_BB_SYSCTL(APPLET(sysctl, _BB_DIR_SBIN, _BB_SUID_DROP)) 399 IF_SYSLOGD(APPLET(syslogd, _BB_DIR_SBIN, _BB_SUID_DROP)) 400 IF_TAC(APPLET_NOEXEC(tac, tac, _BB_DIR_USR_BIN, _BB_SUID_DROP, tac)) 401 IF_TAIL(APPLET(tail, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 402 IF_TAR(APPLET(tar, _BB_DIR_BIN, _BB_SUID_DROP)) 403 IF_TASKSET(APPLET(taskset, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 404 /* IF_TC(APPLET(tc, _BB_DIR_SBIN, _BB_SUID_DROP)) */ 405 IF_TCPSVD(APPLET_ODDNAME(tcpsvd, tcpudpsvd, _BB_DIR_USR_BIN, _BB_SUID_DROP, tcpsvd)) 406 IF_TEE(APPLET(tee, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 407 IF_TELNET(APPLET(telnet, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 408 IF_TELNETD(APPLET(telnetd, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 409 IF_TEST(APPLET_NOFORK(test, test, _BB_DIR_USR_BIN, _BB_SUID_DROP, test)) 331 410 #if ENABLE_FEATURE_TFTP_GET || ENABLE_FEATURE_TFTP_PUT 332 USE_TFTP(APPLET(tftp, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 411 IF_TFTP(APPLET(tftp, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 412 IF_TFTPD(APPLET(tftpd, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 333 413 #endif 334 USE_TIME(APPLET(time, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 335 USE_TOP(APPLET(top, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 336 USE_TOUCH(APPLET_NOFORK(touch, touch, _BB_DIR_BIN, _BB_SUID_NEVER, touch)) 337 USE_TR(APPLET(tr, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 338 USE_TRACEROUTE(APPLET(traceroute, _BB_DIR_USR_BIN, _BB_SUID_MAYBE)) 339 USE_TRUE(APPLET_NOFORK(true, true, _BB_DIR_BIN, _BB_SUID_NEVER, true)) 340 USE_TTY(APPLET(tty, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 341 USE_TTYSIZE(APPLET(ttysize, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 342 //USE_TUNE2FS(APPLET(tune2fs, _BB_DIR_SBIN, _BB_SUID_NEVER)) 343 USE_APP_UDHCPC(APPLET(udhcpc, _BB_DIR_SBIN, _BB_SUID_NEVER)) 344 USE_APP_UDHCPD(APPLET(udhcpd, _BB_DIR_USR_SBIN, _BB_SUID_NEVER)) 345 USE_UDPSVD(APPLET_ODDNAME(udpsvd, tcpudpsvd, _BB_DIR_USR_BIN, _BB_SUID_NEVER, udpsvd)) 346 USE_UMOUNT(APPLET(umount, _BB_DIR_BIN, _BB_SUID_NEVER)) 347 USE_UNAME(APPLET(uname, _BB_DIR_BIN, _BB_SUID_NEVER)) 348 USE_UNCOMPRESS(APPLET(uncompress, _BB_DIR_BIN, _BB_SUID_NEVER)) 349 USE_UNEXPAND(APPLET_ODDNAME(unexpand, expand, _BB_DIR_USR_BIN, _BB_SUID_NEVER, unexpand)) 350 USE_UNIQ(APPLET(uniq, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 351 USE_UNIX2DOS(APPLET_ODDNAME(unix2dos, dos2unix, _BB_DIR_USR_BIN, _BB_SUID_NEVER, unix2dos)) 352 USE_UNLZMA(APPLET(unlzma, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 353 USE_UNZIP(APPLET(unzip, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 354 USE_UPTIME(APPLET(uptime, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 355 USE_USLEEP(APPLET_NOFORK(usleep, usleep, _BB_DIR_BIN, _BB_SUID_NEVER, usleep)) 356 USE_UUDECODE(APPLET(uudecode, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 357 USE_UUENCODE(APPLET(uuencode, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 358 USE_VCONFIG(APPLET(vconfig, _BB_DIR_SBIN, _BB_SUID_NEVER)) 359 USE_VI(APPLET(vi, _BB_DIR_BIN, _BB_SUID_NEVER)) 360 USE_VLOCK(APPLET(vlock, _BB_DIR_USR_BIN, _BB_SUID_ALWAYS)) 361 USE_WATCH(APPLET(watch, _BB_DIR_BIN, _BB_SUID_NEVER)) 362 USE_WATCHDOG(APPLET(watchdog, _BB_DIR_SBIN, _BB_SUID_NEVER)) 363 USE_WC(APPLET(wc, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 364 USE_WGET(APPLET(wget, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 365 USE_WHICH(APPLET(which, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 366 USE_WHO(APPLET(who, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) 367 USE_WHOAMI(APPLET_NOFORK(whoami, whoami, _BB_DIR_USR_BIN, _BB_SUID_NEVER, whoami)) 368 USE_XARGS(APPLET_NOEXEC(xargs, xargs, _BB_DIR_USR_BIN, _BB_SUID_NEVER, xargs)) 369 USE_YES(APPLET_NOFORK(yes, yes, _BB_DIR_USR_BIN, _BB_SUID_NEVER, yes)) 370 USE_GUNZIP(APPLET_ODDNAME(zcat, gunzip, _BB_DIR_BIN, _BB_SUID_NEVER, zcat)) 371 USE_ZCIP(APPLET(zcip, _BB_DIR_SBIN, _BB_SUID_NEVER)) 372 373 #if !defined(PROTOTYPES) && !defined(MAKE_USAGE) 374 { NULL } 414 IF_TIME(APPLET(time, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 415 IF_TIMEOUT(APPLET(timeout, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 416 IF_TOP(APPLET(top, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 417 IF_TOUCH(APPLET_NOFORK(touch, touch, _BB_DIR_BIN, _BB_SUID_DROP, touch)) 418 IF_TR(APPLET(tr, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 419 IF_TRACEROUTE(APPLET(traceroute, _BB_DIR_USR_BIN, _BB_SUID_MAYBE)) 420 IF_TRACEROUTE6(APPLET(traceroute6, _BB_DIR_USR_BIN, _BB_SUID_MAYBE)) 421 IF_TRUE(APPLET_NOFORK(true, true, _BB_DIR_BIN, _BB_SUID_DROP, true)) 422 IF_TTY(APPLET(tty, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 423 IF_TTYSIZE(APPLET(ttysize, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 424 IF_TUNCTL(APPLET(tunctl, _BB_DIR_SBIN, _BB_SUID_DROP)) 425 IF_TUNE2FS(APPLET(tune2fs, _BB_DIR_SBIN, _BB_SUID_DROP)) 426 IF_UDHCPC(APPLET(udhcpc, _BB_DIR_SBIN, _BB_SUID_DROP)) 427 IF_UDHCPD(APPLET(udhcpd, _BB_DIR_USR_SBIN, _BB_SUID_DROP)) 428 IF_UDPSVD(APPLET_ODDNAME(udpsvd, tcpudpsvd, _BB_DIR_USR_BIN, _BB_SUID_DROP, udpsvd)) 429 IF_UMOUNT(APPLET(umount, _BB_DIR_BIN, _BB_SUID_DROP)) 430 IF_UNAME(APPLET(uname, _BB_DIR_BIN, _BB_SUID_DROP)) 431 IF_UNCOMPRESS(APPLET(uncompress, _BB_DIR_BIN, _BB_SUID_DROP)) 432 IF_UNEXPAND(APPLET_ODDNAME(unexpand, expand, _BB_DIR_USR_BIN, _BB_SUID_DROP, unexpand)) 433 IF_UNIQ(APPLET(uniq, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 434 IF_UNIX2DOS(APPLET_NOEXEC(unix2dos, dos2unix, _BB_DIR_USR_BIN, _BB_SUID_DROP, unix2dos)) 435 IF_UNXZ(APPLET(unxz, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 436 IF_UNLZMA(APPLET(unlzma, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 437 IF_LZOP(APPLET_ODDNAME(unlzop, lzop, _BB_DIR_USR_BIN, _BB_SUID_DROP, unlzop)) 438 IF_UNZIP(APPLET(unzip, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 439 IF_UPTIME(APPLET(uptime, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 440 IF_USLEEP(APPLET_NOFORK(usleep, usleep, _BB_DIR_BIN, _BB_SUID_DROP, usleep)) 441 IF_UUDECODE(APPLET(uudecode, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 442 IF_UUENCODE(APPLET(uuencode, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 443 IF_VCONFIG(APPLET(vconfig, _BB_DIR_SBIN, _BB_SUID_DROP)) 444 IF_VI(APPLET(vi, _BB_DIR_BIN, _BB_SUID_DROP)) 445 IF_VLOCK(APPLET(vlock, _BB_DIR_USR_BIN, _BB_SUID_REQUIRE)) 446 IF_VOLNAME(APPLET(volname, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 447 IF_WALL(APPLET(wall, _BB_DIR_USR_BIN, _BB_SUID_REQUIRE)) 448 IF_WATCH(APPLET(watch, _BB_DIR_BIN, _BB_SUID_DROP)) 449 IF_WATCHDOG(APPLET(watchdog, _BB_DIR_SBIN, _BB_SUID_DROP)) 450 IF_WC(APPLET(wc, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 451 IF_WGET(APPLET(wget, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 452 IF_WHICH(APPLET(which, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 453 IF_WHO(APPLET(who, _BB_DIR_USR_BIN, _BB_SUID_DROP)) 454 IF_WHOAMI(APPLET_NOFORK(whoami, whoami, _BB_DIR_USR_BIN, _BB_SUID_DROP, whoami)) 455 IF_UNXZ(APPLET_ODDNAME(xzcat, unxz, _BB_DIR_USR_BIN, _BB_SUID_DROP, xzcat)) 456 IF_XZ(APPLET_ODDNAME(xz, unxz, _BB_DIR_USR_BIN, _BB_SUID_DROP, xz)) 457 IF_YES(APPLET_NOFORK(yes, yes, _BB_DIR_USR_BIN, _BB_SUID_DROP, yes)) 458 IF_GUNZIP(APPLET_ODDNAME(zcat, gunzip, _BB_DIR_BIN, _BB_SUID_DROP, zcat)) 459 IF_ZCIP(APPLET(zcip, _BB_DIR_SBIN, _BB_SUID_DROP)) 460 461 #if !defined(PROTOTYPES) && !defined(NAME_MAIN_CNAME) && !defined(MAKE_USAGE) 375 462 }; 376 463 #endif 377 464 378 465 #undef APPLET 379 #undef APPLET_NOUSAGE380 466 #undef APPLET_ODDNAME 381 467 #undef APPLET_NOEXEC -
branches/2.2.9/mindi-busybox/include/busybox.h
r1765 r2725 3 3 * Busybox main internal header file 4 4 * 5 * Licensed under the GPL v2 or later, see the file LICENSE in this tarball.5 * Licensed under GPLv2 or later, see file LICENSE in this source tree. 6 6 */ 7 #ifndef _BB_INTERNAL_H_8 #define _BB_INTERNAL_H_17 #ifndef BUSYBOX_H 8 #define BUSYBOX_H 1 9 9 10 10 #include "libbb.h" 11 11 12 #if ENABLE_FEATURE_INSTALLER 13 /* order matters: used as index into "install_dir[]" in busybox.c */ 12 PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN 13 14 /* order matters: used as index into "install_dir[]" in appletlib.c */ 14 15 typedef enum bb_install_loc_t { 15 16 _BB_DIR_ROOT = 0, 16 17 _BB_DIR_BIN, 17 18 _BB_DIR_SBIN, 19 #if ENABLE_INSTALL_NO_USR 20 _BB_DIR_USR_BIN = _BB_DIR_BIN, 21 _BB_DIR_USR_SBIN = _BB_DIR_SBIN, 22 #else 18 23 _BB_DIR_USR_BIN, 19 _BB_DIR_USR_SBIN 24 _BB_DIR_USR_SBIN, 25 #endif 20 26 } bb_install_loc_t; 27 28 typedef enum bb_suid_t { 29 _BB_SUID_DROP = 0, 30 _BB_SUID_MAYBE, 31 _BB_SUID_REQUIRE 32 } bb_suid_t; 33 34 35 /* Defined in appletlib.c (by including generated applet_tables.h) */ 36 /* Keep in sync with applets/applet_tables.c! */ 37 extern const char applet_names[]; 38 extern int (*const applet_main[])(int argc, char **argv); 39 extern const uint16_t applet_nameofs[]; 40 extern const uint8_t applet_install_loc[]; 41 42 #if ENABLE_FEATURE_SUID || ENABLE_FEATURE_PREFER_APPLETS 43 # define APPLET_NAME(i) (applet_names + (applet_nameofs[i] & 0x0fff)) 44 #else 45 # define APPLET_NAME(i) (applet_names + applet_nameofs[i]) 46 #endif 47 48 #if ENABLE_FEATURE_PREFER_APPLETS 49 # define APPLET_IS_NOFORK(i) (applet_nameofs[i] & (1 << 12)) 50 # define APPLET_IS_NOEXEC(i) (applet_nameofs[i] & (1 << 13)) 51 #else 52 # define APPLET_IS_NOFORK(i) 0 53 # define APPLET_IS_NOEXEC(i) 0 21 54 #endif 22 55 23 56 #if ENABLE_FEATURE_SUID 24 typedef enum bb_suid_t { 25 _BB_SUID_NEVER = 0, 26 _BB_SUID_MAYBE, 27 _BB_SUID_ALWAYS 28 } bb_suid_t; 57 # define APPLET_SUID(i) ((applet_nameofs[i] >> 14) & 0x3) 29 58 #endif 30 59 31 struct bb_applet {32 const char *name;33 int (*main) (int argc, char **argv);34 60 #if ENABLE_FEATURE_INSTALLER 35 __extension__ enum bb_install_loc_t install_loc:8; 61 #define APPLET_INSTALL_LOC(i) ({ \ 62 unsigned v = (i); \ 63 if (v & 1) v = applet_install_loc[v/2] >> 4; \ 64 else v = applet_install_loc[v/2] & 0xf; \ 65 v; }) 36 66 #endif 37 #if ENABLE_FEATURE_SUID 38 __extension__ enum bb_suid_t need_suid:8; 67 68 69 /* Length of these names has effect on size of libbusybox 70 * and "individual" binaries. Keep them short. 71 */ 72 #if ENABLE_BUILD_LIBBUSYBOX 73 #if ENABLE_FEATURE_SHARED_BUSYBOX 74 int lbb_main(char **argv) EXTERNALLY_VISIBLE; 75 #else 76 int lbb_main(char **argv); 39 77 #endif 40 #if ENABLE_FEATURE_PREFER_APPLETS41 /* true if instead of fork(); exec("applet"); waitpid();42 * one can do fork(); exit(applet_main(argc,argv)); waitpid(); */43 unsigned char noexec;44 /* Even nicer */45 /* true if instead of fork(); exec("applet"); waitpid();46 * one can simply call applet_main(argc,argv); */47 unsigned char nofork;48 78 #endif 49 };50 79 51 /* Defined in applet.c */ 52 extern const struct bb_applet applets[]; 53 extern const unsigned short NUM_APPLETS; 80 POP_SAVED_FUNCTION_VISIBILITY 54 81 55 #endif /* _BB_INTERNAL_H_ */82 #endif -
branches/2.2.9/mindi-busybox/include/dump.h
r1765 r2725 1 1 /* vi: set sw=4 ts=4: */ 2 3 PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN 4 2 5 #define F_IGNORE 0x01 /* %_A */ 3 6 #define F_SETREP 0x02 /* rep count set, not default */ … … 14 17 #define F_TEXT 0x400 /* no conversions */ 15 18 16 enum _vflag{ ALL, DUP, FIRST, WAIT }; /* -v values */19 enum dump_vflag_t { ALL, DUP, FIRST, WAIT }; /* -v values */ 17 20 18 typedef struct _pr{19 struct _pr*nextpr; /* next print unit */20 unsigned intflags; /* flag values */21 typedef struct PR { 22 struct PR *nextpr; /* next print unit */ 23 unsigned flags; /* flag values */ 21 24 int bcnt; /* byte count */ 22 25 char *cchar; /* conversion character */ … … 25 28 } PR; 26 29 27 typedef struct _fu{28 struct _fu*nextfu; /* next format unit */29 struct _pr*nextpr; /* next print unit */30 unsigned intflags; /* flag values */30 typedef struct FU { 31 struct FU *nextfu; /* next format unit */ 32 struct PR *nextpr; /* next print unit */ 33 unsigned flags; /* flag values */ 31 34 int reps; /* repetition count */ 32 35 int bcnt; /* byte count */ … … 34 37 } FU; 35 38 36 typedef struct _fs{ /* format strings */37 struct _fs*nextfs; /* linked list of format strings */38 struct _fu*nextfu; /* linked list of format units */39 typedef struct FS { /* format strings */ 40 struct FS *nextfs; /* linked list of format strings */ 41 struct FU *nextfu; /* linked list of format units */ 39 42 int bcnt; 40 43 } FS; 41 44 42 extern void bb_dump_add(const char *fmt); 43 extern int bb_dump_dump(char **argv); 44 extern int bb_dump_size(FS * fs); 45 typedef struct dumper_t { 46 off_t dump_skip; /* bytes to skip */ 47 int dump_length; /* max bytes to read */ 48 smallint dump_vflag; /*enum dump_vflag_t*/ 49 FS *fshead; 50 } dumper_t; 45 51 46 extern FS *bb_dump_fshead; /* head of format strings */ 47 extern int bb_dump_blocksize; /* data block size */48 extern int bb_dump_ length; /* max bytes to read */49 extern enum _vflag bb_dump_vflag; 50 extern off_t bb_dump_skip; /* bytes to skip */ 52 dumper_t* alloc_dumper(void) FAST_FUNC; 53 extern void bb_dump_add(dumper_t *dumper, const char *fmt) FAST_FUNC; 54 extern int bb_dump_dump(dumper_t *dumper, char **argv) FAST_FUNC; 55 56 POP_SAVED_FUNCTION_VISIBILITY -
branches/2.2.9/mindi-busybox/include/grp_.h
r1765 r2725 16 16 License along with the GNU C Library; if not, write to the Free 17 17 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 18 02111-1307 USA. */ 18 02111-1307 USA. 19 */ 20 /* 21 * POSIX Standard: 9.2.1 Group Database Access <grp.h> 22 */ 23 #ifndef BB_GRP_H 24 #define BB_GRP_H 1 19 25 20 /* 21 * POSIX Standard: 9.2.1 Group Database Access <grp.h> 26 PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN 27 28 /* This file is #included after #include <grp.h> 29 * We will use libc-defined structures, but will #define function names 30 * so that function calls are directed to bb_internal_XXX replacements 22 31 */ 23 24 #if !ENABLE_USE_BB_PWD_GRP25 26 #include <grp.h>27 28 #else29 30 #ifndef _GRP_H31 #define _GRP_H 132 33 /* The group structure. */34 struct group {35 char *gr_name; /* Group name. */36 char *gr_passwd; /* Password. */37 gid_t gr_gid; /* Group ID. */38 char **gr_mem; /* Member list. */39 };40 41 /* We don't reimplement this, just supplying prototype */42 /* The function itself is in libc */43 /* Set the group set for the current user to GROUPS (N of them). */44 extern int setgroups(size_t __n, __const gid_t *__groups);45 46 32 47 33 #define setgrent bb_internal_setgrent … … 61 47 62 48 /* All function names below should be remapped by #defines above 63 * in order to not collide with libc names. 64 * In theory it isn't necessary, but I saw weird interactions at link time. 65 * Let's play safe */ 49 * in order to not collide with libc names. */ 66 50 67 51 … … 72 56 extern void endgrent(void); 73 57 58 #ifdef UNUSED_SINCE_WE_AVOID_STATIC_BUFS 74 59 /* Read an entry from the group-file stream, opening it if necessary. */ 75 60 extern struct group *getgrent(void); … … 79 64 80 65 /* Write the given entry onto the given stream. */ 81 extern int putgrent( __const struct group *__restrict __p,66 extern int putgrent(const struct group *__restrict __p, 82 67 FILE *__restrict __f); 68 #endif 83 69 84 70 /* Search for an entry with a matching group ID. */ … … 86 72 87 73 /* Search for an entry with a matching group name. */ 88 extern struct group *getgrnam( __const char *__name);74 extern struct group *getgrnam(const char *__name); 89 75 90 76 /* Reentrant versions of some of the functions above. … … 106 92 107 93 /* Search for an entry with a matching group name. */ 108 extern int getgrnam_r( __const char *__restrict __name,94 extern int getgrnam_r(const char *__restrict __name, 109 95 struct group *__restrict __resultbuf, 110 96 char *__restrict __buffer, size_t __buflen, … … 121 107 *GROUPS. Also include GROUP. The actual number of groups found is 122 108 returned in *NGROUPS. Return -1 if the if *NGROUPS is too small. */ 123 extern int getgrouplist( __const char *__user, gid_t __group,109 extern int getgrouplist(const char *__user, gid_t __group, 124 110 gid_t *__groups, int *__ngroups); 125 111 … … 127 113 by reading the group database and using all groups 128 114 of which USER is a member. Also include GROUP. */ 129 extern int initgroups( __const char *__user, gid_t __group);115 extern int initgroups(const char *__user, gid_t __group); 130 116 117 POP_SAVED_FUNCTION_VISIBILITY 131 118 132 #endif /* grp.h */133 119 #endif -
branches/2.2.9/mindi-busybox/include/inet_common.h
r1765 r2725 7 7 * 8 8 */ 9 #ifndef INET_COMMON_H 10 #define INET_COMMON_H 1 9 11 10 #include "platform.h" 12 PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN 11 13 12 14 /* hostfirst!=0 If we expect this to be a hostname, 13 15 try hostname database first 14 16 */ 15 int INET_resolve(const char *name, struct sockaddr_in *s_in, int hostfirst) ;17 int INET_resolve(const char *name, struct sockaddr_in *s_in, int hostfirst) FAST_FUNC; 16 18 17 19 /* numeric: & 0x8000: "default" instead of "*", … … 20 22 */ 21 23 22 int INET6_resolve(const char *name, struct sockaddr_in6 *sin6) ;24 int INET6_resolve(const char *name, struct sockaddr_in6 *sin6) FAST_FUNC; 23 25 24 26 /* These return malloced string */ 25 char *INET_rresolve(struct sockaddr_in *s_in, int numeric, uint32_t netmask); 26 char *INET6_rresolve(struct sockaddr_in6 *sin6, int numeric); 27 char *INET_rresolve(struct sockaddr_in *s_in, int numeric, uint32_t netmask) FAST_FUNC; 28 char *INET6_rresolve(struct sockaddr_in6 *sin6, int numeric) FAST_FUNC; 29 30 POP_SAVED_FUNCTION_VISIBILITY 31 32 #endif -
branches/2.2.9/mindi-busybox/include/libbb.h
r1772 r2725 4 4 * 5 5 * Based in part on code from sash, Copyright (c) 1999 by David I. Bell 6 * Permission has been granted to redistribute this code under theGPL.6 * Permission has been granted to redistribute this code under GPL. 7 7 * 8 * Licensed under the GPL version 2, see the file LICENSE in this tarball.8 * Licensed under GPLv2, see file LICENSE in this source tree. 9 9 */ 10 #ifndef __LIBBUSYBOX_H__11 #define __LIBBUSYBOX_H__110 #ifndef LIBBB_H 11 #define LIBBB_H 1 12 12 13 13 #include "platform.h" … … 18 18 #include <fcntl.h> 19 19 #include <inttypes.h> 20 #include <mntent.h>21 20 #include <netdb.h> 22 21 #include <setjmp.h> 23 22 #include <signal.h> 23 #include <stdint.h> 24 24 #include <stdio.h> 25 25 #include <stdlib.h> … … 27 27 #include <stddef.h> 28 28 #include <string.h> 29 /* #include <strings.h> - said to be obsolete */ 29 #include <sys/poll.h> 30 30 #include <sys/ioctl.h> 31 31 #include <sys/mman.h> 32 32 #include <sys/socket.h> 33 33 #include <sys/stat.h> 34 #include <sys/statfs.h>35 34 #include <sys/time.h> 36 35 #include <sys/types.h> … … 39 38 #include <time.h> 40 39 #include <unistd.h> 41 #include <utime.h> 42 40 #include <sys/param.h> 41 #ifdef HAVE_MNTENT_H 42 # include <mntent.h> 43 #endif 44 #ifdef HAVE_SYS_STATFS_H 45 # include <sys/statfs.h> 46 #endif 43 47 #if ENABLE_SELINUX 44 #include <selinux/selinux.h> 45 #include <selinux/context.h> 46 #endif 47 48 # include <selinux/selinux.h> 49 # include <selinux/context.h> 50 # include <selinux/flask.h> 51 # include <selinux/av_permissions.h> 52 #endif 48 53 #if ENABLE_LOCALE_SUPPORT 49 # include <locale.h>50 #else 51 # define setlocale(x,y) ((void)0)52 #endif 53 54 # include "pwd_.h"55 # include "grp_.h"56 /* ifdef it out, because it may include <shadow.h> */ 57 /* and we may not even _have_ <shadow.h>! */ 54 # include <locale.h> 55 #else 56 # define setlocale(x,y) ((void)0) 57 #endif 58 #ifdef DMALLOC 59 # include <dmalloc.h> 60 #endif 61 #include <pwd.h> 62 #include <grp.h> 58 63 #if ENABLE_FEATURE_SHADOWPASSWDS 59 #include "shadow_.h" 60 #endif 61 62 /* Try to pull in PATH_MAX */ 63 #include <limits.h> 64 #include <sys/param.h> 65 #ifndef PATH_MAX 66 #define PATH_MAX 256 67 #endif 68 69 /* Tested to work correctly (IIRC :]) */ 70 #define MAXINT(T) (T)( \ 71 ((T)-1) > 0 \ 72 ? (T)-1 \ 73 : (T)~((T)1 << (sizeof(T)*8-1)) \ 74 ) 75 76 #define MININT(T) (T)( \ 77 ((T)-1) > 0 \ 78 ? (T)0 \ 79 : ((T)1 << (sizeof(T)*8-1)) \ 80 ) 81 82 /* Large file support */ 83 /* Note that CONFIG_LFS forces bbox to be built with all common ops 84 * (stat, lseek etc) mapped to "largefile" variants by libc. 85 * Practically it means that open() automatically has O_LARGEFILE added 86 * and all filesize/file_offset parameters and struct members are "large" 87 * (in today's world - signed 64bit). For full support of large files, 88 * we need a few helper #defines (below) and careful use of off_t 89 * instead of int/ssize_t. No lseek64(), O_LARGEFILE etc necessary */ 90 #if ENABLE_LFS 91 /* CONFIG_LFS is on */ 92 # if ULONG_MAX > 0xffffffff 93 /* "long" is long enough on this system */ 94 # define XATOOFF(a) xatoul_range(a, 0, LONG_MAX) 95 /* usage: sz = BB_STRTOOFF(s, NULL, 10); if (errno || sz < 0) die(); */ 96 # define BB_STRTOOFF bb_strtoul 97 # define STRTOOFF strtoul 98 /* usage: printf("size: %"OFF_FMT"d (%"OFF_FMT"x)\n", sz, sz); */ 99 # define OFF_FMT "l" 100 # else 101 /* "long" is too short, need "long long" */ 102 # define XATOOFF(a) xatoull_range(a, 0, LLONG_MAX) 103 # define BB_STRTOOFF bb_strtoull 104 # define STRTOOFF strtoull 105 # define OFF_FMT "ll" 64 # if !ENABLE_USE_BB_SHADOW 65 /* If using busybox's shadow implementation, do not include the shadow.h 66 * header as the toolchain may not provide it at all. 67 */ 68 # include <shadow.h> 106 69 # endif 107 #else 108 /* CONFIG_LFS is off */ 109 # if UINT_MAX == 0xffffffff 110 /* While sizeof(off_t) == sizeof(int), off_t is typedef'ed to long anyway. 111 * gcc will throw warnings on printf("%d", off_t). Crap... */ 112 # define XATOOFF(a) xatoi_u(a) 113 # define BB_STRTOOFF bb_strtou 114 # define STRTOOFF strtol 115 # define OFF_FMT "l" 116 # else 117 # define XATOOFF(a) xatoul_range(a, 0, LONG_MAX) 118 # define BB_STRTOOFF bb_strtoul 119 # define STRTOOFF strtol 120 # define OFF_FMT "l" 70 #endif 71 #if defined __FreeBSD__ || defined __OpenBSD__ 72 # include <netinet/in.h> 73 # include <arpa/inet.h> 74 #elif defined __APPLE__ 75 # include <netinet/in.h> 76 #else 77 # include <arpa/inet.h> 78 # if !defined(__socklen_t_defined) && !defined(_SOCKLEN_T_DECLARED) 79 /* We #define socklen_t *after* includes, otherwise we get 80 * typedef redefinition errors from system headers 81 * (in case "is it defined already" detection above failed) 82 */ 83 # define socklen_t bb_socklen_t 84 typedef unsigned socklen_t; 121 85 # endif 122 86 #endif 123 /* scary. better ideas? (but do *test* them first!) */ 124 #define OFF_T_MAX ((off_t)~((off_t)1 << (sizeof(off_t)*8-1))) 125 126 /* Some useful definitions */ 127 #undef FALSE 128 #define FALSE ((int) 0) 129 #undef TRUE 130 #define TRUE ((int) 1) 131 #undef SKIP 132 #define SKIP ((int) 2) 133 134 /* for mtab.c */ 135 #define MTAB_GETMOUNTPT '1' 136 #define MTAB_GETDEVICE '2' 137 138 #define BUF_SIZE 8192 139 #define EXPAND_ALLOC 1024 140 141 /* Macros for min/max. */ 142 #ifndef MIN 143 #define MIN(a,b) (((a)<(b))?(a):(b)) 144 #endif 145 146 #ifndef MAX 147 #define MAX(a,b) (((a)>(b))?(a):(b)) 148 #endif 149 150 /* buffer allocation schemes */ 151 #if ENABLE_FEATURE_BUFFERS_GO_ON_STACK 152 #define RESERVE_CONFIG_BUFFER(buffer,len) char buffer[len] 153 #define RESERVE_CONFIG_UBUFFER(buffer,len) unsigned char buffer[len] 154 #define RELEASE_CONFIG_BUFFER(buffer) ((void)0) 155 #else 156 #if ENABLE_FEATURE_BUFFERS_GO_IN_BSS 157 #define RESERVE_CONFIG_BUFFER(buffer,len) static char buffer[len] 158 #define RESERVE_CONFIG_UBUFFER(buffer,len) static unsigned char buffer[len] 159 #define RELEASE_CONFIG_BUFFER(buffer) ((void)0) 160 #else 161 #define RESERVE_CONFIG_BUFFER(buffer,len) char *buffer = xmalloc(len) 162 #define RESERVE_CONFIG_UBUFFER(buffer,len) unsigned char *buffer = xmalloc(len) 163 #define RELEASE_CONFIG_BUFFER(buffer) free(buffer) 164 #endif 165 #endif 166 167 168 #if defined(__GLIBC__) 169 /* glibc uses __errno_location() to get a ptr to errno */ 170 /* We can just memorize it once - no multithreading in busybox :) */ 171 extern int *const bb_errno; 172 #undef errno 173 #define errno (*bb_errno) 174 #endif 175 87 88 89 /* Some libc's forget to declare these, do it ourself */ 90 91 extern char **environ; 176 92 #if defined(__GLIBC__) && __GLIBC__ < 2 177 93 int vdprintf(int d, const char *format, va_list ap); 178 94 #endif 179 // This is declared here rather than #including <libgen.h> in order to avoid 180 // confusing the two versions of basename. See the dirname/basename man page 181 // for details. 95 /* klogctl is in libc's klog.h, but we cheat and not #include that */ 96 int klogctl(int type, char *b, int len); 97 /* This is declared here rather than #including <libgen.h> in order to avoid 98 * confusing the two versions of basename. See the dirname/basename man page 99 * for details. */ 100 #if !defined __FreeBSD__ 182 101 char *dirname(char *path); 102 #endif 183 103 /* Include our own copy of struct sysinfo to avoid binary compatibility 184 104 * problems with Linux 2.4, which changed things. Grumble, grumble. */ … … 197 117 unsigned long freehigh; /* Available high memory size */ 198 118 unsigned int mem_unit; /* Memory unit size in bytes */ 199 char _f[20 -2*sizeof(long)-sizeof(int)];/* Padding: libc5 uses this.. */119 char _f[20 - 2 * sizeof(long) - sizeof(int)]; /* Padding: libc5 uses this.. */ 200 120 }; 201 121 int sysinfo(struct sysinfo* info); 202 203 unsigned long long monotonic_us(void); 204 unsigned monotonic_sec(void); 205 206 extern void chomp(char *s); 207 extern void trim(char *s); 208 extern char *skip_whitespace(const char *); 209 extern char *skip_non_whitespace(const char *); 122 #ifndef PATH_MAX 123 # define PATH_MAX 256 124 #endif 125 #ifndef BUFSIZ 126 # define BUFSIZ 4096 127 #endif 128 129 130 /* Make all declarations hidden (-fvisibility flag only affects definitions) */ 131 /* (don't include system headers after this until corresponding pop!) */ 132 PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN 133 134 135 #if ENABLE_USE_BB_PWD_GRP 136 # include "pwd_.h" 137 # include "grp_.h" 138 #endif 139 #if ENABLE_FEATURE_SHADOWPASSWDS 140 # if ENABLE_USE_BB_SHADOW 141 # include "shadow_.h" 142 # endif 143 #endif 144 145 /* Tested to work correctly with all int types (IIRC :]) */ 146 #define MAXINT(T) (T)( \ 147 ((T)-1) > 0 \ 148 ? (T)-1 \ 149 : (T)~((T)1 << (sizeof(T)*8-1)) \ 150 ) 151 152 #define MININT(T) (T)( \ 153 ((T)-1) > 0 \ 154 ? (T)0 \ 155 : ((T)1 << (sizeof(T)*8-1)) \ 156 ) 157 158 /* Large file support */ 159 /* Note that CONFIG_LFS=y forces bbox to be built with all common ops 160 * (stat, lseek etc) mapped to "largefile" variants by libc. 161 * Practically it means that open() automatically has O_LARGEFILE added 162 * and all filesize/file_offset parameters and struct members are "large" 163 * (in today's world - signed 64bit). For full support of large files, 164 * we need a few helper #defines (below) and careful use of off_t 165 * instead of int/ssize_t. No lseek64(), O_LARGEFILE etc necessary */ 166 #if ENABLE_LFS 167 /* CONFIG_LFS is on */ 168 # if ULONG_MAX > 0xffffffff 169 /* "long" is long enough on this system */ 170 typedef unsigned long uoff_t; 171 # define XATOOFF(a) xatoul_range(a, 0, LONG_MAX) 172 /* usage: sz = BB_STRTOOFF(s, NULL, 10); if (errno || sz < 0) die(); */ 173 # define BB_STRTOOFF bb_strtoul 174 # define STRTOOFF strtoul 175 /* usage: printf("size: %"OFF_FMT"d (%"OFF_FMT"x)\n", sz, sz); */ 176 # define OFF_FMT "l" 177 # else 178 /* "long" is too short, need "long long" */ 179 typedef unsigned long long uoff_t; 180 # define XATOOFF(a) xatoull_range(a, 0, LLONG_MAX) 181 # define BB_STRTOOFF bb_strtoull 182 # define STRTOOFF strtoull 183 # define OFF_FMT "ll" 184 # endif 185 #else 186 /* CONFIG_LFS is off */ 187 # if UINT_MAX == 0xffffffff 188 /* While sizeof(off_t) == sizeof(int), off_t is typedef'ed to long anyway. 189 * gcc will throw warnings on printf("%d", off_t). Crap... */ 190 typedef unsigned long uoff_t; 191 # define XATOOFF(a) xatoi_positive(a) 192 # define BB_STRTOOFF bb_strtou 193 # define STRTOOFF strtol 194 # define OFF_FMT "l" 195 # else 196 typedef unsigned long uoff_t; 197 # define XATOOFF(a) xatoul_range(a, 0, LONG_MAX) 198 # define BB_STRTOOFF bb_strtoul 199 # define STRTOOFF strtol 200 # define OFF_FMT "l" 201 # endif 202 #endif 203 /* scary. better ideas? (but do *test* them first!) */ 204 #define OFF_T_MAX ((off_t)~((off_t)1 << (sizeof(off_t)*8-1))) 205 206 /* Some useful definitions */ 207 #undef FALSE 208 #define FALSE ((int) 0) 209 #undef TRUE 210 #define TRUE ((int) 1) 211 #undef SKIP 212 #define SKIP ((int) 2) 213 214 /* for mtab.c */ 215 #define MTAB_GETMOUNTPT '1' 216 #define MTAB_GETDEVICE '2' 217 218 #define BUF_SIZE 8192 219 #define EXPAND_ALLOC 1024 220 221 /* Macros for min/max. */ 222 #ifndef MIN 223 #define MIN(a,b) (((a)<(b))?(a):(b)) 224 #endif 225 226 #ifndef MAX 227 #define MAX(a,b) (((a)>(b))?(a):(b)) 228 #endif 229 230 /* buffer allocation schemes */ 231 #if ENABLE_FEATURE_BUFFERS_GO_ON_STACK 232 #define RESERVE_CONFIG_BUFFER(buffer,len) char buffer[len] 233 #define RESERVE_CONFIG_UBUFFER(buffer,len) unsigned char buffer[len] 234 #define RELEASE_CONFIG_BUFFER(buffer) ((void)0) 235 #else 236 #if ENABLE_FEATURE_BUFFERS_GO_IN_BSS 237 #define RESERVE_CONFIG_BUFFER(buffer,len) static char buffer[len] 238 #define RESERVE_CONFIG_UBUFFER(buffer,len) static unsigned char buffer[len] 239 #define RELEASE_CONFIG_BUFFER(buffer) ((void)0) 240 #else 241 #define RESERVE_CONFIG_BUFFER(buffer,len) char *buffer = xmalloc(len) 242 #define RESERVE_CONFIG_UBUFFER(buffer,len) unsigned char *buffer = xmalloc(len) 243 #define RELEASE_CONFIG_BUFFER(buffer) free(buffer) 244 #endif 245 #endif 246 247 #if defined(__GLIBC__) 248 /* glibc uses __errno_location() to get a ptr to errno */ 249 /* We can just memorize it once - no multithreading in busybox :) */ 250 extern int *const bb_errno; 251 #undef errno 252 #define errno (*bb_errno) 253 #endif 254 255 #if !(ULONG_MAX > 0xffffffff) 256 /* Only 32-bit CPUs need this, 64-bit ones use inlined version */ 257 uint64_t bb_bswap_64(uint64_t x) FAST_FUNC; 258 #endif 259 260 unsigned long long monotonic_ns(void) FAST_FUNC; 261 unsigned long long monotonic_us(void) FAST_FUNC; 262 unsigned long long monotonic_ms(void) FAST_FUNC; 263 unsigned monotonic_sec(void) FAST_FUNC; 264 265 extern void chomp(char *s) FAST_FUNC; 266 extern void trim(char *s) FAST_FUNC; 267 extern char *skip_whitespace(const char *) FAST_FUNC; 268 extern char *skip_non_whitespace(const char *) FAST_FUNC; 269 extern char *skip_dev_pfx(const char *tty_name) FAST_FUNC; 270 271 extern char *strrstr(const char *haystack, const char *needle) FAST_FUNC; 210 272 211 273 //TODO: supply a pointer to char[11] buffer (avoid statics)? 212 extern const char *bb_mode_string(mode_t mode); 213 extern int is_directory(const char *name, int followLinks, struct stat *statBuf); 214 extern int remove_file(const char *path, int flags); 215 extern int copy_file(const char *source, const char *dest, int flags); 274 extern const char *bb_mode_string(mode_t mode) FAST_FUNC; 275 extern int is_directory(const char *name, int followLinks, struct stat *statBuf) FAST_FUNC; 276 enum { /* DO NOT CHANGE THESE VALUES! cp.c, mv.c, install.c depend on them. */ 277 FILEUTILS_PRESERVE_STATUS = 1 << 0, /* -p */ 278 FILEUTILS_DEREFERENCE = 1 << 1, /* !-d */ 279 FILEUTILS_RECUR = 1 << 2, /* -R */ 280 FILEUTILS_FORCE = 1 << 3, /* -f */ 281 FILEUTILS_INTERACTIVE = 1 << 4, /* -i */ 282 FILEUTILS_MAKE_HARDLINK = 1 << 5, /* -l */ 283 FILEUTILS_MAKE_SOFTLINK = 1 << 6, /* -s */ 284 FILEUTILS_DEREF_SOFTLINK = 1 << 7, /* -L */ 285 FILEUTILS_DEREFERENCE_L0 = 1 << 8, /* -H */ 286 #if ENABLE_SELINUX 287 FILEUTILS_PRESERVE_SECURITY_CONTEXT = 1 << 9, /* -c */ 288 FILEUTILS_SET_SECURITY_CONTEXT = 1 << 10, 289 #endif 290 }; 291 #define FILEUTILS_CP_OPTSTR "pdRfilsLH" IF_SELINUX("c") 292 extern int remove_file(const char *path, int flags) FAST_FUNC; 293 /* NB: without FILEUTILS_RECUR in flags, it will basically "cat" 294 * the source, not copy (unless "source" is a directory). 295 * This makes "cp /dev/null file" and "install /dev/null file" (!!!) 296 * work coreutils-compatibly. */ 297 extern int copy_file(const char *source, const char *dest, int flags) FAST_FUNC; 298 216 299 enum { 217 300 ACTION_RECURSE = (1 << 0), … … 220 303 ACTION_DEPTHFIRST = (1 << 3), 221 304 /*ACTION_REVERSE = (1 << 4), - unused */ 222 }; 305 ACTION_QUIET = (1 << 5), 306 ACTION_DANGLING_OK = (1 << 6), 307 }; 308 typedef uint8_t recurse_flags_t; 223 309 extern int recursive_action(const char *fileName, unsigned flags, 224 int (*fileAction) (const char *fileName, struct stat* statbuf, void* userData, int depth), 225 int (*dirAction) (const char *fileName, struct stat* statbuf, void* userData, int depth), 226 void* userData, unsigned depth); 227 extern int device_open(const char *device, int mode); 228 extern int get_console_fd(void); 229 extern char *find_block_device(const char *path); 310 int FAST_FUNC (*fileAction)(const char *fileName, struct stat* statbuf, void* userData, int depth), 311 int FAST_FUNC (*dirAction)(const char *fileName, struct stat* statbuf, void* userData, int depth), 312 void* userData, unsigned depth) FAST_FUNC; 313 extern int device_open(const char *device, int mode) FAST_FUNC; 314 enum { GETPTY_BUFSIZE = 16 }; /* more than enough for "/dev/ttyXXX" */ 315 extern int xgetpty(char *line) FAST_FUNC; 316 extern int get_console_fd_or_die(void) FAST_FUNC; 317 extern void console_make_active(int fd, const int vt_num) FAST_FUNC; 318 extern char *find_block_device(const char *path) FAST_FUNC; 230 319 /* bb_copyfd_XX print read/write errors and return -1 if they occur */ 231 extern off_t bb_copyfd_eof(int fd1, int fd2) ;232 extern off_t bb_copyfd_size(int fd1, int fd2, off_t size) ;233 extern void bb_copyfd_exact_size(int fd1, int fd2, off_t size) ;320 extern off_t bb_copyfd_eof(int fd1, int fd2) FAST_FUNC; 321 extern off_t bb_copyfd_size(int fd1, int fd2, off_t size) FAST_FUNC; 322 extern void bb_copyfd_exact_size(int fd1, int fd2, off_t size) FAST_FUNC; 234 323 /* "short" copy can be detected by return value < size */ 235 324 /* this helper yells "short read!" if param is not -1 */ 236 extern void complain_copyfd_and_die(off_t sz) ATTRIBUTE_NORETURN; 237 extern char bb_process_escape_sequence(const char **ptr); 238 /* TODO: sometimes modifies its parameter, which 239 * makes it rather inconvenient at times: */ 240 extern char *bb_get_last_path_component(char *path); 241 242 int ndelay_on(int fd); 243 int ndelay_off(int fd); 244 void xdup2(int, int); 245 void xmove_fd(int, int); 246 247 248 DIR *xopendir(const char *path); 249 DIR *warn_opendir(const char *path); 250 251 /* UNUSED: char *xmalloc_realpath(const char *path); */ 252 char *xmalloc_readlink(const char *path); 253 char *xmalloc_readlink_or_warn(const char *path); 254 char *xrealloc_getcwd_or_warn(char *cwd); 255 256 257 //TODO: signal(sid, f) is the same? then why? 258 extern void sig_catch(int,void (*)(int)); 259 //#define sig_ignore(s) (sig_catch((s), SIG_IGN)) 260 //#define sig_uncatch(s) (sig_catch((s), SIG_DFL)) 261 extern void sig_block(int); 262 extern void sig_unblock(int); 263 /* UNUSED: extern void sig_blocknone(void); */ 264 extern void sig_pause(void); 265 266 267 void xsetgid(gid_t gid); 268 void xsetuid(uid_t uid); 269 void xchdir(const char *path); 270 void xsetenv(const char *key, const char *value); 271 void xunlink(const char *pathname); 272 void xstat(const char *pathname, struct stat *buf); 273 int xopen(const char *pathname, int flags); 274 int xopen3(const char *pathname, int flags, int mode); 275 int open_or_warn(const char *pathname, int flags); 276 int open3_or_warn(const char *pathname, int flags, int mode); 277 void xpipe(int filedes[2]); 278 off_t xlseek(int fd, off_t offset, int whence); 279 off_t fdlength(int fd); 280 281 int xsocket(int domain, int type, int protocol); 282 void xbind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen); 283 void xlisten(int s, int backlog); 284 void xconnect(int s, const struct sockaddr *s_addr, socklen_t addrlen); 325 extern void complain_copyfd_and_die(off_t sz) NORETURN FAST_FUNC; 326 extern char bb_process_escape_sequence(const char **ptr) FAST_FUNC; 327 char* strcpy_and_process_escape_sequences(char *dst, const char *src) FAST_FUNC; 328 /* xxxx_strip version can modify its parameter: 329 * "/" -> "/" 330 * "abc" -> "abc" 331 * "abc/def" -> "def" 332 * "abc/def/" -> "def" !! 333 */ 334 extern char *bb_get_last_path_component_strip(char *path) FAST_FUNC; 335 /* "abc/def/" -> "" and it never modifies 'path' */ 336 extern char *bb_get_last_path_component_nostrip(const char *path) FAST_FUNC; 337 338 int ndelay_on(int fd) FAST_FUNC; 339 int ndelay_off(int fd) FAST_FUNC; 340 int close_on_exec_on(int fd) FAST_FUNC; 341 void xdup2(int, int) FAST_FUNC; 342 void xmove_fd(int, int) FAST_FUNC; 343 344 345 DIR *xopendir(const char *path) FAST_FUNC; 346 DIR *warn_opendir(const char *path) FAST_FUNC; 347 348 char *xmalloc_realpath(const char *path) FAST_FUNC RETURNS_MALLOC; 349 char *xmalloc_readlink(const char *path) FAST_FUNC RETURNS_MALLOC; 350 char *xmalloc_readlink_or_warn(const char *path) FAST_FUNC RETURNS_MALLOC; 351 /* !RETURNS_MALLOC: it's a realloc-like function */ 352 char *xrealloc_getcwd_or_warn(char *cwd) FAST_FUNC; 353 354 char *xmalloc_follow_symlinks(const char *path) FAST_FUNC RETURNS_MALLOC; 355 356 357 enum { 358 /* bb_signals(BB_FATAL_SIGS, handler) catches all signals which 359 * otherwise would kill us, except for those resulting from bugs: 360 * SIGSEGV, SIGILL, SIGFPE. 361 * Other fatal signals not included (TODO?): 362 * SIGBUS Bus error (bad memory access) 363 * SIGPOLL Pollable event. Synonym of SIGIO 364 * SIGPROF Profiling timer expired 365 * SIGSYS Bad argument to routine 366 * SIGTRAP Trace/breakpoint trap 367 * 368 * The only known arch with some of these sigs not fitting 369 * into 32 bits is parisc (SIGXCPU=33, SIGXFSZ=34, SIGSTKFLT=36). 370 * Dance around with long long to guard against that... 371 */ 372 BB_FATAL_SIGS = (int)(0 373 + (1LL << SIGHUP) 374 + (1LL << SIGINT) 375 + (1LL << SIGTERM) 376 + (1LL << SIGPIPE) // Write to pipe with no readers 377 + (1LL << SIGQUIT) // Quit from keyboard 378 + (1LL << SIGABRT) // Abort signal from abort(3) 379 + (1LL << SIGALRM) // Timer signal from alarm(2) 380 + (1LL << SIGVTALRM) // Virtual alarm clock 381 + (1LL << SIGXCPU) // CPU time limit exceeded 382 + (1LL << SIGXFSZ) // File size limit exceeded 383 + (1LL << SIGUSR1) // Yes kids, these are also fatal! 384 + (1LL << SIGUSR2) 385 + 0), 386 }; 387 void bb_signals(int sigs, void (*f)(int)) FAST_FUNC; 388 /* Unlike signal() and bb_signals, sets handler with sigaction() 389 * and in a way that while signal handler is run, no other signals 390 * will be blocked; syscalls will not be restarted: */ 391 void bb_signals_recursive_norestart(int sigs, void (*f)(int)) FAST_FUNC; 392 /* syscalls like read() will be interrupted with EINTR: */ 393 void signal_no_SA_RESTART_empty_mask(int sig, void (*handler)(int)) FAST_FUNC; 394 /* syscalls like read() won't be interrupted (though select/poll will be): */ 395 void signal_SA_RESTART_empty_mask(int sig, void (*handler)(int)) FAST_FUNC; 396 void wait_for_any_sig(void) FAST_FUNC; 397 void kill_myself_with_sig(int sig) NORETURN FAST_FUNC; 398 void sig_block(int sig) FAST_FUNC; 399 void sig_unblock(int sig) FAST_FUNC; 400 /* Will do sigaction(signum, act, NULL): */ 401 int sigaction_set(int sig, const struct sigaction *act) FAST_FUNC; 402 /* SIG_BLOCK/SIG_UNBLOCK all signals: */ 403 int sigprocmask_allsigs(int how) FAST_FUNC; 404 /* Standard handler which just records signo */ 405 extern smallint bb_got_signal; 406 void record_signo(int signo); /* not FAST_FUNC! */ 407 408 409 void xsetgid(gid_t gid) FAST_FUNC; 410 void xsetuid(uid_t uid) FAST_FUNC; 411 void xchdir(const char *path) FAST_FUNC; 412 void xchroot(const char *path) FAST_FUNC; 413 void xsetenv(const char *key, const char *value) FAST_FUNC; 414 void bb_unsetenv(const char *key) FAST_FUNC; 415 void bb_unsetenv_and_free(char *key) FAST_FUNC; 416 void xunlink(const char *pathname) FAST_FUNC; 417 void xstat(const char *pathname, struct stat *buf) FAST_FUNC; 418 void xfstat(int fd, struct stat *buf, const char *errmsg) FAST_FUNC; 419 int xopen(const char *pathname, int flags) FAST_FUNC; 420 int xopen_nonblocking(const char *pathname) FAST_FUNC; 421 int xopen3(const char *pathname, int flags, int mode) FAST_FUNC; 422 int open_or_warn(const char *pathname, int flags) FAST_FUNC; 423 int open3_or_warn(const char *pathname, int flags, int mode) FAST_FUNC; 424 int open_or_warn_stdin(const char *pathname) FAST_FUNC; 425 int xopen_stdin(const char *pathname) FAST_FUNC; 426 void xrename(const char *oldpath, const char *newpath) FAST_FUNC; 427 int rename_or_warn(const char *oldpath, const char *newpath) FAST_FUNC; 428 off_t xlseek(int fd, off_t offset, int whence) FAST_FUNC; 429 int xmkstemp(char *template) FAST_FUNC; 430 off_t fdlength(int fd) FAST_FUNC; 431 432 uoff_t FAST_FUNC get_volume_size_in_bytes(int fd, 433 const char *override, 434 unsigned override_units, 435 int extend); 436 437 void xpipe(int filedes[2]) FAST_FUNC; 438 /* In this form code with pipes is much more readable */ 439 struct fd_pair { int rd; int wr; }; 440 #define piped_pair(pair) pipe(&((pair).rd)) 441 #define xpiped_pair(pair) xpipe(&((pair).rd)) 442 443 /* Useful for having small structure members/global variables */ 444 typedef int8_t socktype_t; 445 typedef int8_t family_t; 446 struct BUG_too_small { 447 char BUG_socktype_t_too_small[(0 448 | SOCK_STREAM 449 | SOCK_DGRAM 450 | SOCK_RDM 451 | SOCK_SEQPACKET 452 | SOCK_RAW 453 ) <= 127 ? 1 : -1]; 454 char BUG_family_t_too_small[(0 455 | AF_UNSPEC 456 | AF_INET 457 | AF_INET6 458 | AF_UNIX 459 #ifdef AF_PACKET 460 | AF_PACKET 461 #endif 462 #ifdef AF_NETLINK 463 | AF_NETLINK 464 #endif 465 /* | AF_DECnet */ 466 /* | AF_IPX */ 467 ) <= 127 ? 1 : -1]; 468 }; 469 470 471 void parse_datestr(const char *date_str, struct tm *ptm) FAST_FUNC; 472 time_t validate_tm_time(const char *date_str, struct tm *ptm) FAST_FUNC; 473 474 475 int xsocket(int domain, int type, int protocol) FAST_FUNC; 476 void xbind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen) FAST_FUNC; 477 void xlisten(int s, int backlog) FAST_FUNC; 478 void xconnect(int s, const struct sockaddr *s_addr, socklen_t addrlen) FAST_FUNC; 285 479 ssize_t xsendto(int s, const void *buf, size_t len, const struct sockaddr *to, 286 socklen_t tolen) ;480 socklen_t tolen) FAST_FUNC; 287 481 /* SO_REUSEADDR allows a server to rebind to an address that is already 288 482 * "in use" by old connections to e.g. previous server instance which is … … 291 485 * regardless of SO_REUSEADDR (unlike some other flavors of Unix). 292 486 * Turn it on before you call bind(). */ 293 void setsockopt_reuseaddr(int fd); /* On Linux this never fails. */ 294 int setsockopt_broadcast(int fd); 487 void setsockopt_reuseaddr(int fd) FAST_FUNC; /* On Linux this never fails. */ 488 int setsockopt_broadcast(int fd) FAST_FUNC; 489 int setsockopt_bindtodevice(int fd, const char *iface) FAST_FUNC; 295 490 /* NB: returns port in host byte order */ 296 unsigned bb_lookup_port(const char *port, const char *protocol, unsigned default_port) ;491 unsigned bb_lookup_port(const char *port, const char *protocol, unsigned default_port) FAST_FUNC; 297 492 typedef struct len_and_sockaddr { 298 493 socklen_t len; … … 303 498 struct sockaddr_in6 sin6; 304 499 #endif 305 } ;500 } u; 306 501 } len_and_sockaddr; 307 502 enum { 503 LSA_LEN_SIZE = offsetof(len_and_sockaddr, u), 308 504 LSA_SIZEOF_SA = sizeof( 309 505 union { … … 319 515 * (lsa of correct size and lsa->sa.sa_family (AF_INET/AF_INET6)) 320 516 * af == AF_UNSPEC will result in trying to create IPv6 socket, 321 * and if kernel doesn't support it, IPv4. 517 * and if kernel doesn't support it, fall back to IPv4. 518 * This is useful if you plan to bind to resulting local lsa. 322 519 */ 323 int xsocket_type(len_and_sockaddr **lsap, USE_FEATURE_IPV6(int af,) int sock_type); 324 int xsocket_stream(len_and_sockaddr **lsap); 520 #if ENABLE_FEATURE_IPV6 521 int xsocket_type(len_and_sockaddr **lsap, int af, int sock_type) FAST_FUNC; 522 #else 523 int xsocket_type(len_and_sockaddr **lsap, int sock_type) FAST_FUNC; 524 #define xsocket_type(lsap, af, sock_type) xsocket_type((lsap), (sock_type)) 525 #endif 526 int xsocket_stream(len_and_sockaddr **lsap) FAST_FUNC; 325 527 /* Create server socket bound to bindaddr:port. bindaddr can be NULL, 326 528 * numeric IP ("N.N.N.N") or numeric IPv6 address, … … 328 530 * Only if there is no suffix, port argument is used */ 329 531 /* NB: these set SO_REUSEADDR before bind */ 330 int create_and_bind_stream_or_die(const char *bindaddr, int port) ;331 int create_and_bind_dgram_or_die(const char *bindaddr, int port) ;532 int create_and_bind_stream_or_die(const char *bindaddr, int port) FAST_FUNC; 533 int create_and_bind_dgram_or_die(const char *bindaddr, int port) FAST_FUNC; 332 534 /* Create client TCP socket connected to peer:port. Peer cannot be NULL. 333 535 * Peer can be numeric IP ("N.N.N.N"), numeric IPv6 address or hostname, 334 536 * and can have ":PORT" suffix (for IPv6 use "[X:X:...:X]:PORT"). 335 537 * If there is no suffix, port argument is used */ 336 int create_and_connect_stream_or_die(const char *peer, int port) ;538 int create_and_connect_stream_or_die(const char *peer, int port) FAST_FUNC; 337 539 /* Connect to peer identified by lsa */ 338 int xconnect_stream(const len_and_sockaddr *lsa); 540 int xconnect_stream(const len_and_sockaddr *lsa) FAST_FUNC; 541 /* Get local address of bound or accepted socket */ 542 len_and_sockaddr *get_sock_lsa(int fd) FAST_FUNC RETURNS_MALLOC; 543 /* Get remote address of connected or accepted socket */ 544 len_and_sockaddr *get_peer_lsa(int fd) FAST_FUNC RETURNS_MALLOC; 339 545 /* Return malloc'ed len_and_sockaddr with socket address of host:port 340 546 * Currently will return IPv4 or IPv6 sockaddrs only … … 342 548 * UNIX socket address being returned, IPX sockaddr etc... 343 549 * On error does bb_error_msg and returns NULL */ 344 len_and_sockaddr* host2sockaddr(const char *host, int port) ;550 len_and_sockaddr* host2sockaddr(const char *host, int port) FAST_FUNC RETURNS_MALLOC; 345 551 /* Version which dies on error */ 346 len_and_sockaddr* xhost2sockaddr(const char *host, int port); 347 len_and_sockaddr* xdotted2sockaddr(const char *host, int port); 348 #if ENABLE_FEATURE_IPV6 552 len_and_sockaddr* xhost2sockaddr(const char *host, int port) FAST_FUNC RETURNS_MALLOC; 553 len_and_sockaddr* xdotted2sockaddr(const char *host, int port) FAST_FUNC RETURNS_MALLOC; 349 554 /* Same, useful if you want to force family (e.g. IPv6) */ 350 len_and_sockaddr* host_and_af2sockaddr(const char *host, int port, sa_family_t af); 351 len_and_sockaddr* xhost_and_af2sockaddr(const char *host, int port, sa_family_t af); 352 # else353 /* [we evaluate af: think about "host_and_af2sockaddr(..., af++)"] */ 354 #define host_and_af2sockaddr(host, port, af) ((void)(af), host2sockaddr((host), (port))) 355 #define xhost_and_af2sockaddr(host, port, af) ((void)(af), xhost2sockaddr((host), (port))) 555 #if !ENABLE_FEATURE_IPV6 556 #define host_and_af2sockaddr(host, port, af) host2sockaddr((host), (port)) 557 #define xhost_and_af2sockaddr(host, port, af) xhost2sockaddr((host), (port)) 558 #else 559 len_and_sockaddr* host_and_af2sockaddr(const char *host, int port, sa_family_t af) FAST_FUNC RETURNS_MALLOC; 560 len_and_sockaddr* xhost_and_af2sockaddr(const char *host, int port, sa_family_t af) FAST_FUNC RETURNS_MALLOC; 356 561 #endif 357 562 /* Assign sin[6]_port member if the socket is an AF_INET[6] one, 358 563 * otherwise no-op. Useful for ftp. 359 564 * NB: does NOT do htons() internally, just direct assignment. */ 360 void set_nport(len_and_sockaddr *lsa, unsigned port) ;565 void set_nport(len_and_sockaddr *lsa, unsigned port) FAST_FUNC; 361 566 /* Retrieve sin[6]_port or return -1 for non-INET[6] lsa's */ 362 int get_nport(const struct sockaddr *sa) ;567 int get_nport(const struct sockaddr *sa) FAST_FUNC; 363 568 /* Reverse DNS. Returns NULL on failure. */ 364 char* xmalloc_sockaddr2host(const struct sockaddr *sa) ;569 char* xmalloc_sockaddr2host(const struct sockaddr *sa) FAST_FUNC RETURNS_MALLOC; 365 570 /* This one doesn't append :PORTNUM */ 366 char* xmalloc_sockaddr2host_noport(const struct sockaddr *sa) ;571 char* xmalloc_sockaddr2host_noport(const struct sockaddr *sa) FAST_FUNC RETURNS_MALLOC; 367 572 /* This one also doesn't fall back to dotted IP (returns NULL) */ 368 char* xmalloc_sockaddr2hostonly_noport(const struct sockaddr *sa) ;573 char* xmalloc_sockaddr2hostonly_noport(const struct sockaddr *sa) FAST_FUNC RETURNS_MALLOC; 369 574 /* inet_[ap]ton on steroids */ 370 char* xmalloc_sockaddr2dotted(const struct sockaddr *sa) ;371 char* xmalloc_sockaddr2dotted_noport(const struct sockaddr *sa) ;575 char* xmalloc_sockaddr2dotted(const struct sockaddr *sa) FAST_FUNC RETURNS_MALLOC; 576 char* xmalloc_sockaddr2dotted_noport(const struct sockaddr *sa) FAST_FUNC RETURNS_MALLOC; 372 577 // "old" (ipv4 only) API 373 578 // users: traceroute.c hostname.c - use _list_ of all IPs 374 struct hostent *xgethostbyname(const char *name) ;579 struct hostent *xgethostbyname(const char *name) FAST_FUNC; 375 580 // Also mount.c and inetd.c are using gethostbyname(), 376 581 // + inet_common.c has additional IPv4-only stuff 377 582 378 583 379 void socket_want_pktinfo(int fd) ;584 void socket_want_pktinfo(int fd) FAST_FUNC; 380 585 ssize_t send_to_from(int fd, void *buf, size_t len, int flags, 381 const struct sockaddr *from, const struct sockaddr *to, 382 socklen_t tolen); 586 const struct sockaddr *to, 587 const struct sockaddr *from, 588 socklen_t tolen) FAST_FUNC; 383 589 ssize_t recv_from_to(int fd, void *buf, size_t len, int flags, 384 struct sockaddr *from, struct sockaddr *to, 385 socklen_t sa_size); 386 387 388 extern char *xstrdup(const char *s); 389 extern char *xstrndup(const char *s, int n); 390 extern char *safe_strncpy(char *dst, const char *src, size_t size); 391 extern char *xasprintf(const char *format, ...) __attribute__ ((format (printf, 1, 2))); 590 struct sockaddr *from, 591 struct sockaddr *to, 592 socklen_t sa_size) FAST_FUNC; 593 594 595 char *xstrdup(const char *s) FAST_FUNC RETURNS_MALLOC; 596 char *xstrndup(const char *s, int n) FAST_FUNC RETURNS_MALLOC; 597 void overlapping_strcpy(char *dst, const char *src) FAST_FUNC; 598 char *safe_strncpy(char *dst, const char *src, size_t size) FAST_FUNC; 599 char *strncpy_IFNAMSIZ(char *dst, const char *src) FAST_FUNC; 600 /* Guaranteed to NOT be a macro (smallest code). Saves nearly 2k on uclibc. 601 * But potentially slow, don't use in one-billion-times loops */ 602 int bb_putchar(int ch) FAST_FUNC; 603 /* Note: does not use stdio, writes to fd 2 directly */ 604 int bb_putchar_stderr(char ch) FAST_FUNC; 605 char *xasprintf(const char *format, ...) __attribute__ ((format(printf, 1, 2))) FAST_FUNC RETURNS_MALLOC; 392 606 // gcc-4.1.1 still isn't good enough at optimizing it 393 607 // (+200 bytes compared to macro) … … 402 616 #define DOT_OR_DOTDOT(s) ((s)[0] == '.' && (!(s)[1] || ((s)[1] == '.' && !(s)[2]))) 403 617 618 typedef struct uni_stat_t { 619 unsigned byte_count; 620 unsigned unicode_count; 621 unsigned unicode_width; 622 } uni_stat_t; 623 /* Returns a string with unprintable chars replaced by '?' or 624 * SUBST_WCHAR. This function is unicode-aware. */ 625 const char* FAST_FUNC printable_string(uni_stat_t *stats, const char *str); 626 /* Prints unprintable char ch as ^C or M-c to file 627 * (M-c is used only if ch is ORed with PRINTABLE_META), 628 * else it is printed as-is (except for ch = 0x9b) */ 629 enum { PRINTABLE_META = 0x100 }; 630 void fputc_printable(int ch, FILE *file) FAST_FUNC; 631 404 632 /* dmalloc will redefine these to it's own implementation. It is safe 405 633 * to have the prototypes here unconditionally. */ 406 extern void *malloc_or_warn(size_t size); 407 extern void *xmalloc(size_t size); 408 extern void *xzalloc(size_t size); 409 extern void *xrealloc(void *old, size_t size); 410 411 extern ssize_t safe_read(int fd, void *buf, size_t count); 412 extern ssize_t full_read(int fd, void *buf, size_t count); 413 extern void xread(int fd, void *buf, size_t count); 414 extern unsigned char xread_char(int fd); 415 // Read one line a-la fgets. Uses one read(), works only on seekable streams 416 extern char *reads(int fd, char *buf, size_t count); 417 // Read one line a-la fgets. Reads byte-by-byte. 418 // Useful when it is important to not read ahead. 419 extern char *xmalloc_reads(int fd, char *pfx); 420 extern ssize_t read_close(int fd, void *buf, size_t count); 421 extern ssize_t open_read_close(const char *filename, void *buf, size_t count); 422 extern void *xmalloc_open_read_close(const char *filename, size_t *sizep); 423 424 extern ssize_t safe_write(int fd, const void *buf, size_t count); 425 extern ssize_t full_write(int fd, const void *buf, size_t count); 426 extern void xwrite(int fd, const void *buf, size_t count); 634 void *malloc_or_warn(size_t size) FAST_FUNC RETURNS_MALLOC; 635 void *xmalloc(size_t size) FAST_FUNC RETURNS_MALLOC; 636 void *xzalloc(size_t size) FAST_FUNC RETURNS_MALLOC; 637 void *xrealloc(void *old, size_t size) FAST_FUNC; 638 /* After xrealloc_vector(v, 4, idx) it's ok to use 639 * at least v[idx] and v[idx+1], for all idx values. 640 * shift specifies how many new elements are added (1: 2, 2: 4... 8: 256...) 641 * when all elements are used up. New elements are zeroed out. */ 642 #define xrealloc_vector(vector, shift, idx) \ 643 xrealloc_vector_helper((vector), (sizeof((vector)[0]) << 8) + (shift), (idx)) 644 void* xrealloc_vector_helper(void *vector, unsigned sizeof_and_shift, int idx) FAST_FUNC; 645 646 647 extern ssize_t safe_read(int fd, void *buf, size_t count) FAST_FUNC; 648 extern ssize_t nonblock_safe_read(int fd, void *buf, size_t count) FAST_FUNC; 649 // NB: will return short read on error, not -1, 650 // if some data was read before error occurred 651 extern ssize_t full_read(int fd, void *buf, size_t count) FAST_FUNC; 652 extern void xread(int fd, void *buf, size_t count) FAST_FUNC; 653 extern unsigned char xread_char(int fd) FAST_FUNC; 654 extern ssize_t read_close(int fd, void *buf, size_t maxsz) FAST_FUNC; 655 extern ssize_t open_read_close(const char *filename, void *buf, size_t maxsz) FAST_FUNC; 656 // Reads one line a-la fgets (but doesn't save terminating '\n'). 657 // Reads byte-by-byte. Useful when it is important to not read ahead. 658 // Bytes are appended to pfx (which must be malloced, or NULL). 659 extern char *xmalloc_reads(int fd, char *pfx, size_t *maxsz_p) FAST_FUNC; 660 /* Reads block up to *maxsz_p (default: INT_MAX - 4095) */ 661 extern void *xmalloc_read(int fd, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC; 662 /* Returns NULL if file can't be opened (default max size: INT_MAX - 4095) */ 663 extern void *xmalloc_open_read_close(const char *filename, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC; 664 /* Autodetects gzip/bzip2 formats. fd may be in the middle of the file! */ 665 #if ENABLE_FEATURE_SEAMLESS_LZMA \ 666 || ENABLE_FEATURE_SEAMLESS_BZ2 \ 667 || ENABLE_FEATURE_SEAMLESS_GZ \ 668 /* || ENABLE_FEATURE_SEAMLESS_Z */ 669 extern void setup_unzip_on_fd(int fd /*, int fail_if_not_detected*/) FAST_FUNC; 670 #else 671 # define setup_unzip_on_fd(...) ((void)0) 672 #endif 673 /* Autodetects .gz etc */ 674 extern int open_zipped(const char *fname) FAST_FUNC; 675 extern void *xmalloc_open_zipped_read_close(const char *fname, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC; 676 /* Never returns NULL */ 677 extern void *xmalloc_xopen_read_close(const char *filename, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC; 678 679 extern ssize_t safe_write(int fd, const void *buf, size_t count) FAST_FUNC; 680 // NB: will return short write on error, not -1, 681 // if some data was written before error occurred 682 extern ssize_t full_write(int fd, const void *buf, size_t count) FAST_FUNC; 683 extern void xwrite(int fd, const void *buf, size_t count) FAST_FUNC; 684 extern void xwrite_str(int fd, const char *str) FAST_FUNC; 685 extern ssize_t full_write1_str(const char *str) FAST_FUNC; 686 extern ssize_t full_write2_str(const char *str) FAST_FUNC; 687 extern void xopen_xwrite_close(const char* file, const char *str) FAST_FUNC; 688 689 /* Close fd, but check for failures (some types of write errors) */ 690 extern void xclose(int fd) FAST_FUNC; 427 691 428 692 /* Reads and prints to stdout till eof, then closes FILE. Exits on error: */ 429 extern void xprint_and_close_file(FILE *file); 430 extern char *xmalloc_fgets(FILE *file); 431 /* Read up to (and including) TERMINATING_STRING: */ 432 extern char *xmalloc_fgets_str(FILE *file, const char *terminating_string); 693 extern void xprint_and_close_file(FILE *file) FAST_FUNC; 694 695 extern char *bb_get_chunk_from_file(FILE *file, int *end) FAST_FUNC; 696 extern char *bb_get_chunk_with_continuation(FILE *file, int *end, int *lineno) FAST_FUNC; 697 /* Reads up to (and including) TERMINATING_STRING: */ 698 extern char *xmalloc_fgets_str(FILE *file, const char *terminating_string) FAST_FUNC RETURNS_MALLOC; 699 /* Same, with limited max size, and returns the length (excluding NUL): */ 700 extern char *xmalloc_fgets_str_len(FILE *file, const char *terminating_string, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC; 701 /* Chops off TERMINATING_STRING from the end: */ 702 extern char *xmalloc_fgetline_str(FILE *file, const char *terminating_string) FAST_FUNC RETURNS_MALLOC; 703 /* Reads up to (and including) "\n" or NUL byte: */ 704 extern char *xmalloc_fgets(FILE *file) FAST_FUNC RETURNS_MALLOC; 433 705 /* Chops off '\n' from the end, unlike fgets: */ 434 extern char *xmalloc_getline(FILE *file); 435 extern char *bb_get_chunk_from_file(FILE *file, int *end); 436 extern void die_if_ferror(FILE *file, const char *msg); 437 extern void die_if_ferror_stdout(void); 438 extern void xfflush_stdout(void); 439 extern void fflush_stdout_and_exit(int retval) ATTRIBUTE_NORETURN; 440 extern int fclose_if_not_stdin(FILE *file); 441 extern FILE *xfopen(const char *filename, const char *mode); 706 extern char *xmalloc_fgetline(FILE *file) FAST_FUNC RETURNS_MALLOC; 707 /* Same, but doesn't try to conserve space (may have some slack after the end) */ 708 /* extern char *xmalloc_fgetline_fast(FILE *file) FAST_FUNC RETURNS_MALLOC; */ 709 710 void die_if_ferror(FILE *file, const char *msg) FAST_FUNC; 711 void die_if_ferror_stdout(void) FAST_FUNC; 712 int fflush_all(void) FAST_FUNC; 713 void fflush_stdout_and_exit(int retval) NORETURN FAST_FUNC; 714 int fclose_if_not_stdin(FILE *file) FAST_FUNC; 715 FILE* xfopen(const char *filename, const char *mode) FAST_FUNC; 442 716 /* Prints warning to stderr and returns NULL on failure: */ 443 extern FILE *fopen_or_warn(const char *filename, const char *mode);717 FILE* fopen_or_warn(const char *filename, const char *mode) FAST_FUNC; 444 718 /* "Opens" stdin if filename is special, else just opens file: */ 445 extern FILE *fopen_or_warn_stdin(const char *filename); 719 FILE* xfopen_stdin(const char *filename) FAST_FUNC; 720 FILE* fopen_or_warn_stdin(const char *filename) FAST_FUNC; 721 FILE* fopen_for_read(const char *path) FAST_FUNC; 722 FILE* xfopen_for_read(const char *path) FAST_FUNC; 723 FILE* fopen_for_write(const char *path) FAST_FUNC; 724 FILE* xfopen_for_write(const char *path) FAST_FUNC; 725 FILE* xfdopen_for_read(int fd) FAST_FUNC; 726 FILE* xfdopen_for_write(int fd) FAST_FUNC; 727 728 int bb_pstrcmp(const void *a, const void *b) /* not FAST_FUNC! */; 729 void qsort_string_vector(char **sv, unsigned count) FAST_FUNC; 730 731 /* Wrapper which restarts poll on EINTR or ENOMEM. 732 * On other errors complains [perror("poll")] and returns. 733 * Warning! May take (much) longer than timeout_ms to return! 734 * If this is a problem, use bare poll and open-code EINTR/ENOMEM handling */ 735 int safe_poll(struct pollfd *ufds, nfds_t nfds, int timeout_ms) FAST_FUNC; 736 737 char *safe_gethostname(void) FAST_FUNC; 738 char *safe_getdomainname(void) FAST_FUNC; 446 739 447 740 /* Convert each alpha char in str to lower-case */ 448 extern char* str_tolower(char *str);449 450 char *utoa(unsigned n) ;451 char *itoa(int n) ;741 char* str_tolower(char *str) FAST_FUNC; 742 743 char *utoa(unsigned n) FAST_FUNC; 744 char *itoa(int n) FAST_FUNC; 452 745 /* Returns a pointer past the formatted number, does NOT null-terminate */ 453 char *utoa_to_buf(unsigned n, char *buf, unsigned buflen); 454 char *itoa_to_buf(int n, char *buf, unsigned buflen); 455 void smart_ulltoa5(unsigned long long ul, char buf[5]); 746 char *utoa_to_buf(unsigned n, char *buf, unsigned buflen) FAST_FUNC; 747 char *itoa_to_buf(int n, char *buf, unsigned buflen) FAST_FUNC; 748 /* Intelligent formatters of bignums */ 749 void smart_ulltoa4(unsigned long long ul, char buf[4], const char *scale) FAST_FUNC; 750 void smart_ulltoa5(unsigned long long ul, char buf[5], const char *scale) FAST_FUNC; 751 /* If block_size == 0, display size without fractional part, 752 * else display (size * block_size) with one decimal digit. 753 * If display_unit == 0, show value no bigger than 1024 with suffix (K,M,G...), 754 * else divide by display_unit and do not use suffix. */ 755 #define HUMAN_READABLE_MAX_WIDTH 7 /* "1024.0G" */ 756 #define HUMAN_READABLE_MAX_WIDTH_STR "7" 456 757 //TODO: provide pointer to buf (avoid statics)? 457 758 const char *make_human_readable_str(unsigned long long size, 458 unsigned long block_size, unsigned long display_unit) ;759 unsigned long block_size, unsigned long display_unit) FAST_FUNC; 459 760 /* Put a string of hex bytes ("1b2e66fe"...), return advanced pointer */ 460 char *bin2hex(char *buf, const char *cp, int count); 761 char *bin2hex(char *buf, const char *cp, int count) FAST_FUNC; 762 /* Reverse */ 763 char* hex2bin(char *dst, const char *str, int count) FAST_FUNC; 764 765 /* Generate a UUID */ 766 void generate_uuid(uint8_t *buf) FAST_FUNC; 461 767 462 768 /* Last element is marked by mult == 0 */ … … 467 773 #include "xatonum.h" 468 774 /* Specialized: */ 775 469 776 /* Using xatoi() instead of naive atoi() is not always convenient - 470 777 * in many places people want *non-negative* values, but store them 471 778 * in signed int. Therefore we need this one: 472 * dies if input is not in [0, INT_MAX] range. Also will reject '-0' etc */ 473 int xatoi_u(const char *numstr); 779 * dies if input is not in [0, INT_MAX] range. Also will reject '-0' etc. 780 * It should really be named xatoi_nonnegative (since it allows 0), 781 * but that would be too long. 782 */ 783 int xatoi_positive(const char *numstr) FAST_FUNC; 784 474 785 /* Useful for reading port numbers */ 475 uint16_t xatou16(const char *numstr) ;786 uint16_t xatou16(const char *numstr) FAST_FUNC; 476 787 477 788 … … 479 790 * for BusyBox since we want to avoid using the glibc NSS stuff, which 480 791 * increases target size and is often not needed on embedded systems. */ 481 long xuname2uid(const char *name) ;482 long xgroup2gid(const char *name) ;792 long xuname2uid(const char *name) FAST_FUNC; 793 long xgroup2gid(const char *name) FAST_FUNC; 483 794 /* wrapper: allows string to contain numeric uid or gid */ 484 unsigned long get_ug_id(const char *s, long (*xname2id)(const char *));795 unsigned long get_ug_id(const char *s, long FAST_FUNC (*xname2id)(const char *)) FAST_FUNC; 485 796 /* from chpst. Does not die, returns 0 on failure */ 486 797 struct bb_uidgid_t { … … 489 800 }; 490 801 /* always sets uid and gid */ 491 int get_uidgid(struct bb_uidgid_t*, const char*, int numeric_ok); 802 int get_uidgid(struct bb_uidgid_t*, const char*, int numeric_ok) FAST_FUNC; 803 /* always sets uid and gid, allows numeric; exits on failure */ 804 void xget_uidgid(struct bb_uidgid_t*, const char*) FAST_FUNC; 492 805 /* chown-like handling of "user[:[group]" */ 493 void parse_chown_usergroup_or_die(struct bb_uidgid_t *u, char *user_group); 494 /* bb_getpwuid, bb_getgrgid: 495 * bb_getXXXid(buf, bufsz, id) - copy user/group name or id 496 * as a string to buf, return user/group name or NULL 497 * bb_getXXXid(NULL, 0, id) - return user/group name or NULL 498 * bb_getXXXid(NULL, -1, id) - return user/group name or exit 499 */ 500 char *bb_getpwuid(char *name, int bufsize, long uid); 501 char *bb_getgrgid(char *group, int bufsize, long gid); 806 void parse_chown_usergroup_or_die(struct bb_uidgid_t *u, char *user_group) FAST_FUNC; 807 struct passwd* xgetpwnam(const char *name) FAST_FUNC; 808 struct group* xgetgrnam(const char *name) FAST_FUNC; 809 struct passwd* xgetpwuid(uid_t uid) FAST_FUNC; 810 struct group* xgetgrgid(gid_t gid) FAST_FUNC; 811 char* xuid2uname(uid_t uid) FAST_FUNC; 812 char* xgid2group(gid_t gid) FAST_FUNC; 813 char* uid2uname(uid_t uid) FAST_FUNC; 814 char* gid2group(gid_t gid) FAST_FUNC; 815 char* uid2uname_utoa(long uid) FAST_FUNC; 816 char* gid2group_utoa(long gid) FAST_FUNC; 502 817 /* versions which cache results (useful for ps, ls etc) */ 503 const char* get_cached_username(uid_t uid) ;504 const char* get_cached_groupname(gid_t gid) ;505 void clear_username_cache(void) ;818 const char* get_cached_username(uid_t uid) FAST_FUNC; 819 const char* get_cached_groupname(gid_t gid) FAST_FUNC; 820 void clear_username_cache(void) FAST_FUNC; 506 821 /* internally usernames are saved in fixed-sized char[] buffers */ 507 822 enum { USERNAME_MAX_SIZE = 16 - sizeof(int) }; 508 509 510 struct bb_applet; 511 int execable_file(const char *name); 512 char *find_execable(const char *filename); 513 int exists_execable(const char *filename); 514 823 #if ENABLE_FEATURE_CHECK_NAMES 824 void die_if_bad_username(const char* name) FAST_FUNC; 825 #else 826 #define die_if_bad_username(name) ((void)(name)) 827 #endif 828 829 #if ENABLE_FEATURE_UTMP 830 void FAST_FUNC write_new_utmp(pid_t pid, int new_type, const char *tty_name, const char *username, const char *hostname); 831 void FAST_FUNC update_utmp(pid_t pid, int new_type, const char *tty_name, const char *username, const char *hostname); 832 #else 833 # define write_new_utmp(pid, new_type, tty_name, username, hostname) ((void)0) 834 # define update_utmp(pid, new_type, tty_name, username, hostname) ((void)0) 835 #endif 836 837 int execable_file(const char *name) FAST_FUNC; 838 char *find_execable(const char *filename, char **PATHp) FAST_FUNC; 839 int exists_execable(const char *filename) FAST_FUNC; 840 841 /* BB_EXECxx always execs (it's not doing NOFORK/NOEXEC stuff), 842 * but it may exec busybox and call applet instead of searching PATH. 843 */ 515 844 #if ENABLE_FEATURE_PREFER_APPLETS 516 int bb_execvp(const char *file, char *const argv[]) ;845 int bb_execvp(const char *file, char *const argv[]) FAST_FUNC; 517 846 #define BB_EXECVP(prog,cmd) bb_execvp(prog,cmd) 518 847 #define BB_EXECLP(prog,cmd,...) \ 519 execlp((find_applet_by_name(prog) ) ? CONFIG_BUSYBOX_EXEC_PATH : prog, \848 execlp((find_applet_by_name(prog) >= 0) ? CONFIG_BUSYBOX_EXEC_PATH : prog, \ 520 849 cmd, __VA_ARGS__) 521 850 #else … … 523 852 #define BB_EXECLP(prog,cmd,...) execlp(prog,cmd, __VA_ARGS__) 524 853 #endif 525 526 /* NOMMU friendy fork+exec */ 527 pid_t spawn(char **argv); 528 pid_t xspawn(char **argv); 529 530 /* Unlike waitpid, waits ONLY for one process, 854 int BB_EXECVP_or_die(char **argv) NORETURN FAST_FUNC; 855 856 /* xvfork() can't be a _function_, return after vfork mangles stack 857 * in the parent. It must be a macro. */ 858 #define xvfork() \ 859 ({ \ 860 pid_t bb__xvfork_pid = vfork(); \ 861 if (bb__xvfork_pid < 0) \ 862 bb_perror_msg_and_die("vfork"); \ 863 bb__xvfork_pid; \ 864 }) 865 #if BB_MMU 866 pid_t xfork(void) FAST_FUNC; 867 #endif 868 869 /* NOMMU friendy fork+exec: */ 870 pid_t spawn(char **argv) FAST_FUNC; 871 pid_t xspawn(char **argv) FAST_FUNC; 872 873 pid_t safe_waitpid(pid_t pid, int *wstat, int options) FAST_FUNC; 874 pid_t wait_any_nohang(int *wstat) FAST_FUNC; 875 /* wait4pid: unlike waitpid, waits ONLY for one process. 876 * Returns sig + 0x180 if child is killed by signal. 531 877 * It's safe to pass negative 'pids' from failed [v]fork - 532 878 * wait4pid will return -1 (and will not clobber [v]fork's errno). 533 879 * IOW: rc = wait4pid(spawn(argv)); 534 880 * if (rc < 0) bb_perror_msg("%s", argv[0]); 535 * if (rc > 0) bb_error_msg("exit code: %d", rc );881 * if (rc > 0) bb_error_msg("exit code: %d", rc & 0xff); 536 882 */ 537 int wait4pid(int pid); 538 int wait_pid(int *wstat, int pid); 539 int wait_nohang(int *wstat); 540 #define wait_crashed(w) ((w) & 127) 541 #define wait_exitcode(w) ((w) >> 8) 542 #define wait_stopsig(w) ((w) >> 8) 543 #define wait_stopped(w) (((w) & 127) == 127) 544 /* wait4pid(spawn(argv)) + NOFORK/NOEXEC (if configured) */ 545 int spawn_and_wait(char **argv); 883 int wait4pid(pid_t pid) FAST_FUNC; 884 /* Same as wait4pid(spawn(argv)), but with NOFORK/NOEXEC if configured: */ 885 int spawn_and_wait(char **argv) FAST_FUNC; 546 886 struct nofork_save_area { 547 887 jmp_buf die_jmp; 548 const struct bb_applet *current_applet; 549 int xfunc_error_retval; 888 const char *applet_name; 550 889 uint32_t option_mask32; 551 890 int die_sleep; 891 uint8_t xfunc_error_retval; 552 892 smallint saved; 553 893 }; 554 void save_nofork_data(struct nofork_save_area *save) ;555 void restore_nofork_data(struct nofork_save_area *save) ;894 void save_nofork_data(struct nofork_save_area *save) FAST_FUNC; 895 void restore_nofork_data(struct nofork_save_area *save) FAST_FUNC; 556 896 /* Does NOT check that applet is NOFORK, just blindly runs it */ 557 int run_nofork_applet( const struct bb_applet *a, char **argv);558 int run_nofork_applet_prime(struct nofork_save_area *old, const struct bb_applet *a, char **argv);897 int run_nofork_applet(int applet_no, char **argv) FAST_FUNC; 898 int run_nofork_applet_prime(struct nofork_save_area *old, int applet_no, char **argv) FAST_FUNC; 559 899 560 900 /* Helpers for daemonization. … … 572 912 * (will do setsid()). 573 913 * 574 * fork exit_or_rexec(argv) = bare-bones "fork + parent exits"on MMU,914 * fork_or_rexec(argv) = bare-bones fork on MMU, 575 915 * "vfork + re-exec ourself" on NOMMU. No fd redirection, no setsid(). 576 * Currently used for openvt.On MMU ignores argv.916 * On MMU ignores argv. 577 917 * 578 918 * Helper for network daemons in foreground mode: … … 588 928 }; 589 929 #if BB_MMU 590 void forkexit_or_rexec(void);591 930 enum { re_execed = 0 }; 592 # define fork exit_or_rexec(argv) forkexit_or_rexec()931 # define fork_or_rexec(argv) xfork() 593 932 # define bb_daemonize_or_rexec(flags, argv) bb_daemonize_or_rexec(flags) 594 933 # define bb_daemonize(flags) bb_daemonize_or_rexec(flags, bogus) 595 934 #else 596 void re_exec(char **argv) ATTRIBUTE_NORETURN;597 void forkexit_or_rexec(char **argv);598 935 extern bool re_execed; 936 void re_exec(char **argv) NORETURN FAST_FUNC; 937 pid_t fork_or_rexec(char **argv) FAST_FUNC; 938 int BUG_fork_is_unavailable_on_nommu(void) FAST_FUNC; 939 int BUG_daemon_is_unavailable_on_nommu(void) FAST_FUNC; 940 void BUG_bb_daemonize_is_unavailable_on_nommu(void) FAST_FUNC; 599 941 # define fork() BUG_fork_is_unavailable_on_nommu() 942 # define xfork() BUG_fork_is_unavailable_on_nommu() 600 943 # define daemon(a,b) BUG_daemon_is_unavailable_on_nommu() 601 944 # define bb_daemonize(a) BUG_bb_daemonize_is_unavailable_on_nommu() 602 945 #endif 603 void bb_daemonize_or_rexec(int flags, char **argv); 604 void bb_sanitize_stdio(void); 605 606 946 void bb_daemonize_or_rexec(int flags, char **argv) FAST_FUNC; 947 void bb_sanitize_stdio(void) FAST_FUNC; 948 /* Clear dangerous stuff, set PATH. Return 1 if was run by different user. */ 949 int sanitize_env_if_suid(void) FAST_FUNC; 950 951 952 char* single_argv(char **argv) FAST_FUNC; 953 extern const char *const bb_argv_dash[]; /* "-", NULL */ 607 954 extern const char *opt_complementary; 608 #if ENABLE_ GETOPT_LONG955 #if ENABLE_LONG_OPTS || ENABLE_FEATURE_GETOPT_LONG 609 956 #define No_argument "\0" 610 957 #define Required_argument "\001" … … 613 960 #endif 614 961 extern uint32_t option_mask32; 615 extern uint32_t getopt32(char **argv, const char *applet_opts, ...) ;962 extern uint32_t getopt32(char **argv, const char *applet_opts, ...) FAST_FUNC; 616 963 617 964 … … 620 967 struct llist_t *link; 621 968 } llist_t; 622 void llist_add_to(llist_t **old_head, void *data); 623 void llist_add_to_end(llist_t **list_head, void *data); 624 void *llist_pop(llist_t **elm); 625 void llist_unlink(llist_t **head, llist_t *elm); 626 void llist_free(llist_t *elm, void (*freeit)(void *data)); 627 llist_t *llist_rev(llist_t *list); 969 void llist_add_to(llist_t **old_head, void *data) FAST_FUNC; 970 void llist_add_to_end(llist_t **list_head, void *data) FAST_FUNC; 971 void *llist_pop(llist_t **elm) FAST_FUNC; 972 void llist_unlink(llist_t **head, llist_t *elm) FAST_FUNC; 973 void llist_free(llist_t *elm, void (*freeit)(void *data)) FAST_FUNC; 974 llist_t *llist_rev(llist_t *list) FAST_FUNC; 975 llist_t *llist_find_str(llist_t *first, const char *str) FAST_FUNC; 628 976 /* BTW, surprisingly, changing API to 629 977 * llist_t *llist_add_to(llist_t *old_head, void *data) … … 635 983 /* True only if we created pidfile which is *file*, not /dev/null etc */ 636 984 extern smallint wrote_pidfile; 637 void write_pidfile(const char *path) ;985 void write_pidfile(const char *path) FAST_FUNC; 638 986 #define remove_pidfile(path) do { if (wrote_pidfile) unlink(path); } while (0) 639 987 #else … … 652 1000 extern smallint logmode; 653 1001 extern int die_sleep; 654 extern int xfunc_error_retval;1002 extern uint8_t xfunc_error_retval; 655 1003 extern jmp_buf die_jmp; 656 extern void xfunc_die(void) ATTRIBUTE_NORETURN; 657 extern void bb_show_usage(void) ATTRIBUTE_NORETURN ATTRIBUTE_EXTERNALLY_VISIBLE; 658 extern void bb_error_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))); 659 extern void bb_error_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2))); 660 extern void bb_perror_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))); 661 extern void bb_perror_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2))); 662 extern void bb_herror_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))); 663 extern void bb_herror_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2))); 664 extern void bb_perror_nomsg_and_die(void) ATTRIBUTE_NORETURN; 665 extern void bb_perror_nomsg(void); 666 extern void bb_info_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))); 667 extern void bb_verror_msg(const char *s, va_list p, const char *strerr); 668 669 670 /* applets which are useful from another applets */ 1004 extern void xfunc_die(void) NORETURN FAST_FUNC; 1005 extern void bb_show_usage(void) NORETURN FAST_FUNC; 1006 extern void bb_error_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))) FAST_FUNC; 1007 extern void bb_error_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2))) FAST_FUNC; 1008 extern void bb_perror_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))) FAST_FUNC; 1009 extern void bb_simple_perror_msg(const char *s) FAST_FUNC; 1010 extern void bb_perror_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2))) FAST_FUNC; 1011 extern void bb_simple_perror_msg_and_die(const char *s) NORETURN FAST_FUNC; 1012 extern void bb_herror_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))) FAST_FUNC; 1013 extern void bb_herror_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2))) FAST_FUNC; 1014 extern void bb_perror_nomsg_and_die(void) NORETURN FAST_FUNC; 1015 extern void bb_perror_nomsg(void) FAST_FUNC; 1016 extern void bb_info_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))) FAST_FUNC; 1017 extern void bb_verror_msg(const char *s, va_list p, const char *strerr) FAST_FUNC; 1018 1019 /* We need to export XXX_main from libbusybox 1020 * only if we build "individual" binaries 1021 */ 1022 #if ENABLE_FEATURE_INDIVIDUAL 1023 #define MAIN_EXTERNALLY_VISIBLE EXTERNALLY_VISIBLE 1024 #else 1025 #define MAIN_EXTERNALLY_VISIBLE 1026 #endif 1027 1028 1029 /* Applets which are useful from another applets */ 671 1030 int bb_cat(char** argv); 672 int bb_echo(char** argv); 673 int test_main(int argc, char** argv); 674 int kill_main(int argc, char **argv); 1031 /* If shell needs them, they exist even if not enabled as applets */ 1032 int echo_main(int argc, char** argv) IF_ECHO(MAIN_EXTERNALLY_VISIBLE); 1033 int printf_main(int argc, char **argv) IF_PRINTF(MAIN_EXTERNALLY_VISIBLE); 1034 int test_main(int argc, char **argv) IF_TEST(MAIN_EXTERNALLY_VISIBLE); 1035 int kill_main(int argc, char **argv) IF_KILL(MAIN_EXTERNALLY_VISIBLE); 1036 /* Similar, but used by chgrp, not shell */ 1037 int chown_main(int argc, char **argv) IF_CHOWN(MAIN_EXTERNALLY_VISIBLE); 1038 /* Used by ftpd */ 1039 int ls_main(int argc, char **argv) IF_LS(MAIN_EXTERNALLY_VISIBLE); 1040 /* Don't need IF_xxx() guard for these */ 1041 int gunzip_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 1042 int bunzip2_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 1043 675 1044 #if ENABLE_ROUTE 676 void bb_displayroutes(int noresolve, int netstatfmt); 677 #endif 678 int chown_main(int argc, char **argv); 679 #if ENABLE_GUNZIP 680 int gunzip_main(int argc, char **argv); 681 #endif 682 int bbunpack(char **argv, 683 char* (*make_new_name)(char *filename), 684 USE_DESKTOP(long long) int (*unpacker)(void) 685 ); 1045 void bb_displayroutes(int noresolve, int netstatfmt) FAST_FUNC; 1046 #endif 686 1047 687 1048 688 1049 /* Networking */ 689 int create_icmp_socket(void) ;690 int create_icmp6_socket(void) ;1050 int create_icmp_socket(void) FAST_FUNC; 1051 int create_icmp6_socket(void) FAST_FUNC; 691 1052 /* interface.c */ 692 1053 /* This structure defines protocol families and their handlers. */ … … 696 1057 int af; 697 1058 int alen; 698 char *(*print) (unsigned char *); 699 const char *(*sprint) (struct sockaddr *, int numeric); 700 int (*input) (/*int type,*/ const char *bufp, struct sockaddr *); 701 void (*herror) (char *text); 702 int (*rprint) (int options); 703 int (*rinput) (int typ, int ext, char **argv); 704 1059 char* FAST_FUNC (*print)(unsigned char *); 1060 const char* FAST_FUNC (*sprint)(struct sockaddr *, int numeric); 1061 int FAST_FUNC (*input)(/*int type,*/ const char *bufp, struct sockaddr *); 1062 void FAST_FUNC (*herror)(char *text); 1063 int FAST_FUNC (*rprint)(int options); 1064 int FAST_FUNC (*rinput)(int typ, int ext, char **argv); 705 1065 /* may modify src */ 706 int (*getmask) (char *src, struct sockaddr *mask, char *name);1066 int FAST_FUNC (*getmask)(char *src, struct sockaddr *mask, char *name); 707 1067 }; 708 1068 /* This structure defines hardware protocols and their handlers. */ … … 712 1072 int type; 713 1073 int alen; 714 char *(*print)(unsigned char *);715 int (*input)(const char *, struct sockaddr *);716 int (*activate)(int fd);1074 char* FAST_FUNC (*print)(unsigned char *); 1075 int FAST_FUNC (*input)(const char *, struct sockaddr *); 1076 int FAST_FUNC (*activate)(int fd); 717 1077 int suppress_null_addr; 718 1078 }; 719 1079 extern smallint interface_opt_a; 720 int display_interfaces(char *ifname); 721 const struct aftype *get_aftype(const char *name); 722 const struct hwtype *get_hwtype(const char *name); 723 const struct hwtype *get_hwntype(int type); 1080 int display_interfaces(char *ifname) FAST_FUNC; 1081 #if ENABLE_FEATURE_HWIB 1082 int in_ib(const char *bufp, struct sockaddr *sap) FAST_FUNC; 1083 #else 1084 #define in_ib(a, b) 1 /* fail */ 1085 #endif 1086 const struct aftype *get_aftype(const char *name) FAST_FUNC; 1087 const struct hwtype *get_hwtype(const char *name) FAST_FUNC; 1088 const struct hwtype *get_hwntype(int type) FAST_FUNC; 724 1089 725 1090 726 1091 #ifndef BUILD_INDIVIDUAL 727 extern const struct bb_applet *find_applet_by_name(const char *name);1092 extern int find_applet_by_name(const char *name) FAST_FUNC; 728 1093 /* Returns only if applet is not found. */ 729 extern void run_applet_and_exit(const char *name, char **argv); 730 extern void run_current_applet_and_exit(char **argv) ATTRIBUTE_NORETURN; 731 #endif 732 733 extern int match_fstype(const struct mntent *mt, const char *fstypes); 734 extern struct mntent *find_mount_point(const char *name, const char *table); 735 extern void erase_mtab(const char * name); 736 extern unsigned int tty_baud_to_value(speed_t speed); 737 extern speed_t tty_value_to_baud(unsigned int value); 738 extern void bb_warn_ignoring_args(int n); 739 740 extern int get_linux_version_code(void); 741 742 extern char *query_loop(const char *device); 743 extern int del_loop(const char *device); 1094 extern void run_applet_and_exit(const char *name, char **argv) FAST_FUNC; 1095 extern void run_applet_no_and_exit(int a, char **argv) NORETURN FAST_FUNC; 1096 #endif 1097 1098 #ifdef HAVE_MNTENT_H 1099 extern int match_fstype(const struct mntent *mt, const char *fstypes) FAST_FUNC; 1100 extern struct mntent *find_mount_point(const char *name, int subdir_too) FAST_FUNC; 1101 #endif 1102 extern void erase_mtab(const char * name) FAST_FUNC; 1103 extern unsigned int tty_baud_to_value(speed_t speed) FAST_FUNC; 1104 extern speed_t tty_value_to_baud(unsigned int value) FAST_FUNC; 1105 #if ENABLE_DESKTOP 1106 extern void bb_warn_ignoring_args(char *arg) FAST_FUNC; 1107 #else 1108 # define bb_warn_ignoring_args(arg) ((void)0) 1109 #endif 1110 1111 extern int get_linux_version_code(void) FAST_FUNC; 1112 1113 extern char *query_loop(const char *device) FAST_FUNC; 1114 extern int del_loop(const char *device) FAST_FUNC; 744 1115 /* If *devname is not NULL, use that name, otherwise try to find free one, 745 1116 * malloc and return it in *devname. 746 1117 * return value: 1: read-only loopdev was setup, 0: rw, < 0: error */ 747 extern int set_loop(char **devname, const char *file, unsigned long long offset); 748 749 1118 extern int set_loop(char **devname, const char *file, unsigned long long offset) FAST_FUNC; 1119 1120 /* Like bb_ask below, but asks on stdin with no timeout. */ 1121 char *bb_ask_stdin(const char * prompt) FAST_FUNC; 750 1122 //TODO: pass buf pointer or return allocated buf (avoid statics)? 751 char *bb_askpass(int timeout, const char * prompt); 752 int bb_ask_confirmation(void); 753 int klogctl(int type, char * b, int len); 754 755 extern int bb_parse_mode(const char* s, mode_t* theMode); 756 757 char *concat_path_file(const char *path, const char *filename); 758 char *concat_subpath_file(const char *path, const char *filename); 759 const char *bb_basename(const char *name); 1123 char *bb_ask(const int fd, int timeout, const char * prompt) FAST_FUNC; 1124 int bb_ask_confirmation(void) FAST_FUNC; 1125 1126 int bb_parse_mode(const char* s, mode_t* theMode) FAST_FUNC; 1127 1128 /* 1129 * Config file parser 1130 */ 1131 enum { 1132 PARSE_COLLAPSE = 0x00010000, // treat consecutive delimiters as one 1133 PARSE_TRIM = 0x00020000, // trim leading and trailing delimiters 1134 // TODO: COLLAPSE and TRIM seem to always go in pair 1135 PARSE_GREEDY = 0x00040000, // last token takes entire remainder of the line 1136 PARSE_MIN_DIE = 0x00100000, // die if < min tokens found 1137 // keep a copy of current line 1138 PARSE_KEEP_COPY = 0x00200000 * ENABLE_FEATURE_CROND_D, 1139 // PARSE_ESCAPE = 0x00400000, // process escape sequences in tokens 1140 // NORMAL is: 1141 // * remove leading and trailing delimiters and collapse 1142 // multiple delimiters into one 1143 // * warn and continue if less than mintokens delimiters found 1144 // * grab everything into last token 1145 PARSE_NORMAL = PARSE_COLLAPSE | PARSE_TRIM | PARSE_GREEDY, 1146 }; 1147 typedef struct parser_t { 1148 FILE *fp; 1149 char *line; 1150 char *data; 1151 int lineno; 1152 } parser_t; 1153 parser_t* config_open(const char *filename) FAST_FUNC; 1154 parser_t* config_open2(const char *filename, FILE* FAST_FUNC (*fopen_func)(const char *path)) FAST_FUNC; 1155 /* delims[0] is a comment char (use '\0' to disable), the rest are token delimiters */ 1156 int config_read(parser_t *parser, char **tokens, unsigned flags, const char *delims) FAST_FUNC; 1157 #define config_read(parser, tokens, max, min, str, flags) \ 1158 config_read(parser, tokens, ((flags) | (((min) & 0xFF) << 8) | ((max) & 0xFF)), str) 1159 void config_close(parser_t *parser) FAST_FUNC; 1160 1161 /* Concatenate path and filename to new allocated buffer. 1162 * Add "/" only as needed (no duplicate "//" are produced). 1163 * If path is NULL, it is assumed to be "/". 1164 * filename should not be NULL. */ 1165 char *concat_path_file(const char *path, const char *filename) FAST_FUNC; 1166 char *concat_subpath_file(const char *path, const char *filename) FAST_FUNC; 1167 const char *bb_basename(const char *name) FAST_FUNC; 760 1168 /* NB: can violate const-ness (similarly to strchr) */ 761 char *last_char_is(const char *s, int c); 762 763 764 USE_DESKTOP(long long) int uncompress(int fd_in, int fd_out); 765 int inflate(int in, int out); 766 767 768 int bb_make_directory(char *path, long mode, int flags); 769 770 int get_signum(const char *name); 771 const char *get_signame(int number); 772 773 char *bb_simplify_path(const char *path); 1169 char *last_char_is(const char *s, int c) FAST_FUNC; 1170 1171 1172 int bb_make_directory(char *path, long mode, int flags) FAST_FUNC; 1173 1174 int get_signum(const char *name) FAST_FUNC; 1175 const char *get_signame(int number) FAST_FUNC; 1176 void print_signames(void) FAST_FUNC; 1177 1178 char *bb_simplify_path(const char *path) FAST_FUNC; 1179 /* Returns ptr to NUL */ 1180 char *bb_simplify_abs_path_inplace(char *path) FAST_FUNC; 774 1181 775 1182 #define FAIL_DELAY 3 776 extern void bb_do_delay(int seconds); 777 extern void change_identity(const struct passwd *pw); 778 extern const char *change_identity_e2str(const struct passwd *pw); 779 extern void run_shell(const char *shell, int loginshell, const char *command, const char **additional_args) ATTRIBUTE_NORETURN; 1183 extern void bb_do_delay(int seconds) FAST_FUNC; 1184 extern void change_identity(const struct passwd *pw) FAST_FUNC; 1185 extern void run_shell(const char *shell, int loginshell, const char *command, const char **additional_args) NORETURN FAST_FUNC; 780 1186 #if ENABLE_SELINUX 781 extern void renew_current_security_context(void) ;782 extern void set_current_security_context(security_context_t sid) ;1187 extern void renew_current_security_context(void) FAST_FUNC; 1188 extern void set_current_security_context(security_context_t sid) FAST_FUNC; 783 1189 extern context_t set_security_context_component(security_context_t cur_context, 784 char *user, char *role, char *type, char *range); 785 extern void setfscreatecon_or_die(security_context_t scontext); 786 #endif 787 extern void selinux_or_die(void); 788 extern int restricted_shell(const char *shell); 789 extern void setup_environment(const char *shell, int loginshell, int changeenv, const struct passwd *pw); 790 extern int correct_password(const struct passwd *pw); 791 /* Returns a ptr to static storage */ 792 extern char *pw_encrypt(const char *clear, const char *salt); 793 extern int obscure(const char *old, const char *newval, const struct passwd *pwdp); 794 extern int index_in_str_array(const char *const string_array[], const char *key); 795 extern int index_in_strings(const char *strings, const char *key); 796 extern int index_in_substr_array(const char *const string_array[], const char *key); 797 extern int index_in_substrings(const char *strings, const char *key); 798 extern void print_login_issue(const char *issue_file, const char *tty); 799 extern void print_login_prompt(void); 800 1190 char *user, char *role, char *type, char *range) FAST_FUNC; 1191 extern void setfscreatecon_or_die(security_context_t scontext) FAST_FUNC; 1192 extern void selinux_preserve_fcontext(int fdesc) FAST_FUNC; 1193 #else 1194 #define selinux_preserve_fcontext(fdesc) ((void)0) 1195 #endif 1196 extern void selinux_or_die(void) FAST_FUNC; 1197 1198 /* setup_environment: 1199 * if chdir pw->pw_dir: ok: else if to_tmp == 1: goto /tmp else: goto / or die 1200 * if clear_env = 1: cd(pw->pw_dir), clear environment, then set 1201 * TERM=(old value) 1202 * USER=pw->pw_name, LOGNAME=pw->pw_name 1203 * PATH=bb_default_[root_]path 1204 * HOME=pw->pw_dir 1205 * SHELL=shell 1206 * else if change_env = 1: 1207 * if not root (if pw->pw_uid != 0): 1208 * USER=pw->pw_name, LOGNAME=pw->pw_name 1209 * HOME=pw->pw_dir 1210 * SHELL=shell 1211 * else does nothing 1212 */ 1213 #define SETUP_ENV_CHANGEENV (1 << 0) 1214 #define SETUP_ENV_CLEARENV (1 << 1) 1215 #define SETUP_ENV_TO_TMP (1 << 2) 1216 extern void setup_environment(const char *shell, int flags, const struct passwd *pw) FAST_FUNC; 1217 extern int correct_password(const struct passwd *pw) FAST_FUNC; 1218 /* Returns a malloced string */ 1219 #if !ENABLE_USE_BB_CRYPT 1220 #define pw_encrypt(clear, salt, cleanup) pw_encrypt(clear, salt) 1221 #endif 1222 extern char *pw_encrypt(const char *clear, const char *salt, int cleanup) FAST_FUNC; 1223 extern int obscure(const char *old, const char *newval, const struct passwd *pwdp) FAST_FUNC; 801 1224 /* rnd is additional random input. New one is returned. 802 1225 * Useful if you call crypt_make_salt many times in a row: … … 806 1229 * (otherwise we risk having same salt generated) 807 1230 */ 808 extern int crypt_make_salt(char *p, int cnt, int rnd) ;1231 extern int crypt_make_salt(char *p, int cnt, int rnd) FAST_FUNC; 809 1232 810 1233 /* Returns number of lines changed, or -1 on error */ 811 extern int update_passwd(const char *filename, const char *username, 812 const char *new_pw); 813 1234 #if !(ENABLE_FEATURE_ADDUSER_TO_GROUP || ENABLE_FEATURE_DEL_USER_FROM_GROUP) 1235 #define update_passwd(filename, username, data, member) \ 1236 update_passwd(filename, username, data) 1237 #endif 1238 extern int update_passwd(const char *filename, 1239 const char *username, 1240 const char *data, 1241 const char *member) FAST_FUNC; 1242 1243 int index_in_str_array(const char *const string_array[], const char *key) FAST_FUNC; 1244 int index_in_strings(const char *strings, const char *key) FAST_FUNC; 1245 int index_in_substr_array(const char *const string_array[], const char *key) FAST_FUNC; 1246 int index_in_substrings(const char *strings, const char *key) FAST_FUNC; 1247 const char *nth_string(const char *strings, int n) FAST_FUNC; 1248 1249 extern void print_login_issue(const char *issue_file, const char *tty) FAST_FUNC; 1250 extern void print_login_prompt(void) FAST_FUNC; 1251 1252 char *xmalloc_ttyname(int fd) FAST_FUNC RETURNS_MALLOC; 814 1253 /* NB: typically you want to pass fd 0, not 1. Think 'applet | grep something' */ 815 int get_terminal_width_height(int fd, int *width, int *height); 816 817 int ioctl_or_perror(int fd, int request, void *argp, const char *fmt,...) __attribute__ ((format (printf, 4, 5))); 818 void ioctl_or_perror_and_die(int fd, int request, void *argp, const char *fmt,...) __attribute__ ((format (printf, 4, 5))); 1254 int get_terminal_width_height(int fd, unsigned *width, unsigned *height) FAST_FUNC; 1255 1256 int tcsetattr_stdin_TCSANOW(const struct termios *tp) FAST_FUNC; 1257 1258 /* NB: "unsigned request" is crucial! "int request" will break some arches! */ 1259 int ioctl_or_perror(int fd, unsigned request, void *argp, const char *fmt,...) __attribute__ ((format (printf, 4, 5))) FAST_FUNC; 1260 int ioctl_or_perror_and_die(int fd, unsigned request, void *argp, const char *fmt,...) __attribute__ ((format (printf, 4, 5))) FAST_FUNC; 819 1261 #if ENABLE_IOCTL_HEX2STR_ERROR 820 int bb_ioctl_or_warn(int fd, int request, void *argp, const char *ioctl_name);821 void bb_xioctl(int fd, int request, void *argp, const char *ioctl_name);1262 int bb_ioctl_or_warn(int fd, unsigned request, void *argp, const char *ioctl_name) FAST_FUNC; 1263 int bb_xioctl(int fd, unsigned request, void *argp, const char *ioctl_name) FAST_FUNC; 822 1264 #define ioctl_or_warn(fd,request,argp) bb_ioctl_or_warn(fd,request,argp,#request) 823 1265 #define xioctl(fd,request,argp) bb_xioctl(fd,request,argp,#request) 824 1266 #else 825 int bb_ioctl_or_warn(int fd, int request, void *argp);826 void bb_xioctl(int fd, int request, void *argp);1267 int bb_ioctl_or_warn(int fd, unsigned request, void *argp) FAST_FUNC; 1268 int bb_xioctl(int fd, unsigned request, void *argp) FAST_FUNC; 827 1269 #define ioctl_or_warn(fd,request,argp) bb_ioctl_or_warn(fd,request,argp) 828 1270 #define xioctl(fd,request,argp) bb_xioctl(fd,request,argp) 829 1271 #endif 830 1272 831 char *is_in_ino_dev_hashtable(const struct stat *statbuf) ;832 void add_to_ino_dev_hashtable(const struct stat *statbuf, const char *name) ;833 void reset_ino_dev_hashtable(void) ;1273 char *is_in_ino_dev_hashtable(const struct stat *statbuf) FAST_FUNC; 1274 void add_to_ino_dev_hashtable(const struct stat *statbuf, const char *name) FAST_FUNC; 1275 void reset_ino_dev_hashtable(void) FAST_FUNC; 834 1276 #ifdef __GLIBC__ 835 1277 /* At least glibc has horrendously large inline for this, so wrap it */ 836 unsigned long long bb_makedev(unsigned int major, unsigned int minor) ;1278 unsigned long long bb_makedev(unsigned int major, unsigned int minor) FAST_FUNC; 837 1279 #undef makedev 838 1280 #define makedev(a,b) bb_makedev(a,b) … … 840 1282 841 1283 1284 /* "Keycodes" that report an escape sequence. 1285 * We use something which fits into signed char, 1286 * yet doesn't represent any valid Unicode character. 1287 * Also, -1 is reserved for error indication and we don't use it. */ 1288 enum { 1289 KEYCODE_UP = -2, 1290 KEYCODE_DOWN = -3, 1291 KEYCODE_RIGHT = -4, 1292 KEYCODE_LEFT = -5, 1293 KEYCODE_HOME = -6, 1294 KEYCODE_END = -7, 1295 KEYCODE_INSERT = -8, 1296 KEYCODE_DELETE = -9, 1297 KEYCODE_PAGEUP = -10, 1298 KEYCODE_PAGEDOWN = -11, 1299 1300 KEYCODE_CTRL_UP = KEYCODE_UP & ~0x40, 1301 KEYCODE_CTRL_DOWN = KEYCODE_DOWN & ~0x40, 1302 KEYCODE_CTRL_RIGHT = KEYCODE_RIGHT & ~0x40, 1303 KEYCODE_CTRL_LEFT = KEYCODE_LEFT & ~0x40, 1304 #if 0 1305 KEYCODE_FUN1 = -12, 1306 KEYCODE_FUN2 = -13, 1307 KEYCODE_FUN3 = -14, 1308 KEYCODE_FUN4 = -15, 1309 KEYCODE_FUN5 = -16, 1310 KEYCODE_FUN6 = -17, 1311 KEYCODE_FUN7 = -18, 1312 KEYCODE_FUN8 = -19, 1313 KEYCODE_FUN9 = -20, 1314 KEYCODE_FUN10 = -21, 1315 KEYCODE_FUN11 = -22, 1316 KEYCODE_FUN12 = -23, 1317 #endif 1318 KEYCODE_CURSOR_POS = -0x100, /* 0xfff..fff00 */ 1319 /* How long is the longest ESC sequence we know? 1320 * We want it big enough to be able to contain 1321 * cursor position sequence "ESC [ 9999 ; 9999 R" 1322 */ 1323 KEYCODE_BUFFER_SIZE = 16 1324 }; 1325 /* Note: fd may be in blocking or non-blocking mode, both make sense. 1326 * For one, less uses non-blocking mode. 1327 * Only the first read syscall inside read_key may block indefinitely 1328 * (unless fd is in non-blocking mode), 1329 * subsequent reads will time out after a few milliseconds. 1330 * Return of -1 means EOF or error (errno == 0 on EOF). 1331 * buffer[0] is used as a counter of buffered chars and must be 0 1332 * on first call. 1333 * timeout: 1334 * -2: do not poll for input; 1335 * -1: poll(-1) (i.e. block); 1336 * >=0: poll for TIMEOUT milliseconds, return -1/EAGAIN on timeout 1337 */ 1338 int64_t read_key(int fd, char *buffer, int timeout) FAST_FUNC; 1339 void read_key_ungets(char *buffer, const char *str, unsigned len) FAST_FUNC; 1340 1341 842 1342 #if ENABLE_FEATURE_EDITING 843 1343 /* It's NOT just ENABLEd or disabled. It's a number: */ 844 # ifdef CONFIG_FEATURE_EDITING_HISTORY845 # define MAX_HISTORY (CONFIG_FEATURE_EDITING_HISTORY + 0)846 # else847 # define MAX_HISTORY 0848 # endif1344 # ifdef CONFIG_FEATURE_EDITING_HISTORY 1345 # define MAX_HISTORY (CONFIG_FEATURE_EDITING_HISTORY + 0) 1346 # else 1347 # define MAX_HISTORY 0 1348 # endif 849 1349 typedef struct line_input_t { 850 1350 int flags; 851 1351 const char *path_lookup; 852 # if MAX_HISTORY1352 # if MAX_HISTORY 853 1353 int cnt_history; 854 1354 int cur_history; 855 USE_FEATURE_EDITING_SAVEHISTORY(const char *hist_file;) 1355 # if ENABLE_FEATURE_EDITING_SAVEHISTORY 1356 unsigned cnt_history_in_file; 1357 const char *hist_file; 1358 # endif 856 1359 char *history[MAX_HISTORY + 1]; 857 # endif1360 # endif 858 1361 } line_input_t; 859 1362 enum { … … 866 1369 FOR_SHELL = DO_HISTORY | SAVE_HISTORY | TAB_COMPLETION | USERNAME_COMPLETION, 867 1370 }; 868 line_input_t *new_line_input_t(int flags); 869 int read_line_input(const char* prompt, char* command, int maxsize, line_input_t *state); 870 #else 871 int read_line_input(const char* prompt, char* command, int maxsize); 1371 line_input_t *new_line_input_t(int flags) FAST_FUNC; 1372 /* So far static: void free_line_input_t(line_input_t *n) FAST_FUNC; */ 1373 /* maxsize must be >= 2. 1374 * Returns: 1375 * -1 on read errors or EOF, or on bare Ctrl-D, 1376 * 0 on ctrl-C (the line entered is still returned in 'command'), 1377 * >0 length of input string, including terminating '\n' 1378 */ 1379 int read_line_input(const char* prompt, char* command, int maxsize, line_input_t *state) FAST_FUNC; 1380 #else 1381 #define MAX_HISTORY 0 1382 int read_line_input(const char* prompt, char* command, int maxsize) FAST_FUNC; 872 1383 #define read_line_input(prompt, command, maxsize, state) \ 873 1384 read_line_input(prompt, command, maxsize) … … 876 1387 877 1388 #ifndef COMM_LEN 878 # ifdef TASK_COMM_LEN1389 # ifdef TASK_COMM_LEN 879 1390 enum { COMM_LEN = TASK_COMM_LEN }; 880 # else1391 # else 881 1392 /* synchronize with sizeof(task_struct.comm) in /usr/include/linux/sched.h */ 882 1393 enum { COMM_LEN = 16 }; 883 #endif 884 #endif 885 typedef struct { 1394 # endif 1395 #endif 1396 1397 struct smaprec { 1398 unsigned long mapped_rw; 1399 unsigned long mapped_ro; 1400 unsigned long shared_clean; 1401 unsigned long shared_dirty; 1402 unsigned long private_clean; 1403 unsigned long private_dirty; 1404 unsigned long stack; 1405 unsigned long smap_pss, smap_swap; 1406 unsigned long smap_size; 1407 unsigned long smap_start; 1408 char smap_mode[5]; 1409 char *smap_name; 1410 }; 1411 1412 #if !ENABLE_PMAP 1413 #define procps_read_smaps(pid, total, cb, data) \ 1414 procps_read_smaps(pid, total) 1415 #endif 1416 int FAST_FUNC procps_read_smaps(pid_t pid, struct smaprec *total, 1417 void (*cb)(struct smaprec *, void *), void *data); 1418 1419 typedef struct procps_status_t { 886 1420 DIR *dir; 1421 IF_FEATURE_SHOW_THREADS(DIR *task_dir;) 1422 uint8_t shift_pages_to_bytes; 1423 uint8_t shift_pages_to_kb; 887 1424 /* Fields are set to 0/NULL if failed to determine (or not requested) */ 888 /*char *cmd;*/1425 uint16_t argv_len; 889 1426 char *argv0; 890 /*char *exe;*/891 USE_SELINUX(char *context;)1427 char *exe; 1428 IF_SELINUX(char *context;) 892 1429 /* Everything below must contain no ptrs to malloc'ed data: 893 1430 * it is memset(0) for each process in procps_scan() */ 894 unsigned vsz, rss; /* we round it to kbytes */1431 unsigned long vsz, rss; /* we round it to kbytes */ 895 1432 unsigned long stime, utime; 1433 unsigned long start_time; 896 1434 unsigned pid; 897 1435 unsigned ppid; … … 900 1438 unsigned uid; 901 1439 unsigned gid; 1440 #if ENABLE_FEATURE_PS_ADDITIONAL_COLUMNS 1441 unsigned ruid; 1442 unsigned rgid; 1443 int niceness; 1444 #endif 902 1445 unsigned tty_major,tty_minor; 1446 #if ENABLE_FEATURE_TOPMEM 1447 struct smaprec smaps; 1448 #endif 903 1449 char state[4]; 904 1450 /* basename of executable in exec(2), read from /proc/N/stat … … 907 1453 char comm[COMM_LEN]; 908 1454 /* user/group? - use passwd/group parsing functions */ 1455 #if ENABLE_FEATURE_TOP_SMP_PROCESS 1456 int last_seen_on_cpu; 1457 #endif 909 1458 } procps_status_t; 1459 /* flag bits for procps_scan(xx, flags) calls */ 910 1460 enum { 911 1461 PSSCAN_PID = 1 << 0, … … 917 1467 /* PSSCAN_CMD = 1 << 6, - use read_cmdline instead */ 918 1468 PSSCAN_ARGV0 = 1 << 7, 919 /* PSSCAN_EXE = 1 << 8, - not implemented */1469 PSSCAN_EXE = 1 << 8, 920 1470 PSSCAN_STATE = 1 << 9, 921 1471 PSSCAN_VSZ = 1 << 10, … … 924 1474 PSSCAN_UTIME = 1 << 13, 925 1475 PSSCAN_TTY = 1 << 14, 926 USE_SELINUX(PSSCAN_CONTEXT = 1 << 15,) 1476 PSSCAN_SMAPS = (1 << 15) * ENABLE_FEATURE_TOPMEM, 1477 /* NB: used by find_pid_by_name(). Any applet using it 1478 * needs to be mentioned here. */ 1479 PSSCAN_ARGVN = (1 << 16) * (ENABLE_KILLALL 1480 || ENABLE_PGREP || ENABLE_PKILL 1481 || ENABLE_PIDOF 1482 || ENABLE_SESTATUS 1483 ), 1484 PSSCAN_CONTEXT = (1 << 17) * ENABLE_SELINUX, 1485 PSSCAN_START_TIME = 1 << 18, 1486 PSSCAN_CPU = (1 << 19) * ENABLE_FEATURE_TOP_SMP_PROCESS, 1487 PSSCAN_NICE = (1 << 20) * ENABLE_FEATURE_PS_ADDITIONAL_COLUMNS, 1488 PSSCAN_RUIDGID = (1 << 21) * ENABLE_FEATURE_PS_ADDITIONAL_COLUMNS, 1489 PSSCAN_TASKS = (1 << 22) * ENABLE_FEATURE_SHOW_THREADS, 927 1490 /* These are all retrieved from proc/NN/stat in one go: */ 928 1491 PSSCAN_STAT = PSSCAN_PPID | PSSCAN_PGID | PSSCAN_SID 929 | PSSCAN_COMM | PSSCAN_STATE 930 | PSSCAN_VSZ | PSSCAN_RSS 931 | PSSCAN_STIME | PSSCAN_UTIME 932 | PSSCAN_TTY, 933 }; 934 procps_status_t* alloc_procps_scan(int flags); 935 void free_procps_scan(procps_status_t* sp); 936 procps_status_t* procps_scan(procps_status_t* sp, int flags); 937 /* Format cmdline (up to col chars) into char buf[col+1] */ 1492 /**/ | PSSCAN_COMM | PSSCAN_STATE 1493 /**/ | PSSCAN_VSZ | PSSCAN_RSS 1494 /**/ | PSSCAN_STIME | PSSCAN_UTIME | PSSCAN_START_TIME 1495 /**/ | PSSCAN_TTY | PSSCAN_NICE 1496 /**/ | PSSCAN_CPU 1497 }; 1498 //procps_status_t* alloc_procps_scan(void) FAST_FUNC; 1499 void free_procps_scan(procps_status_t* sp) FAST_FUNC; 1500 procps_status_t* procps_scan(procps_status_t* sp, int flags) FAST_FUNC; 1501 /* Format cmdline (up to col chars) into char buf[size] */ 938 1502 /* Puts [comm] if cmdline is empty (-> process is a kernel thread) */ 939 void read_cmdline(char *buf, int col, unsigned pid, const char *comm); 940 pid_t *find_pid_by_name(const char* procName); 941 pid_t *pidlist_reverse(pid_t *pidList); 1503 void read_cmdline(char *buf, int size, unsigned pid, const char *comm) FAST_FUNC; 1504 pid_t *find_pid_by_name(const char* procName) FAST_FUNC; 1505 pid_t *pidlist_reverse(pid_t *pidList) FAST_FUNC; 1506 int starts_with_cpu(const char *str) FAST_FUNC; 1507 unsigned get_cpu_count(void) FAST_FUNC; 942 1508 943 1509 944 1510 extern const char bb_uuenc_tbl_base64[]; 945 1511 extern const char bb_uuenc_tbl_std[]; 946 void bb_uuencode(char *store, const void *s, int length, const char *tbl); 947 948 typedef struct sha1_ctx_t { 949 uint32_t count[2]; 950 uint32_t hash[5]; 951 uint32_t wbuf[16]; 952 } sha1_ctx_t; 953 void sha1_begin(sha1_ctx_t *ctx); 954 void sha1_hash(const void *data, size_t length, sha1_ctx_t *ctx); 955 void *sha1_end(void *resbuf, sha1_ctx_t *ctx); 1512 void bb_uuencode(char *store, const void *s, int length, const char *tbl) FAST_FUNC; 1513 enum { 1514 BASE64_FLAG_UU_STOP = 0x100, 1515 /* Sign-extends to a value which never matches fgetc result: */ 1516 BASE64_FLAG_NO_STOP_CHAR = 0x80, 1517 }; 1518 void FAST_FUNC read_base64(FILE *src_stream, FILE *dst_stream, int flags); 956 1519 957 1520 typedef struct md5_ctx_t { 958 uint32_t A; 959 uint32_t B; 960 uint32_t C; 961 uint32_t D; 962 uint64_t total; 963 uint32_t buflen; 964 char buffer[128]; 1521 uint8_t wbuffer[64]; /* always correctly aligned for uint64_t */ 1522 void (*process_block)(struct md5_ctx_t*) FAST_FUNC; 1523 uint64_t total64; /* must be directly before hash[] */ 1524 uint32_t hash[8]; /* 4 elements for md5, 5 for sha1, 8 for sha256 */ 965 1525 } md5_ctx_t; 966 void md5_begin(md5_ctx_t *ctx); 967 void md5_hash(const void *data, size_t length, md5_ctx_t *ctx); 968 void *md5_end(void *resbuf, md5_ctx_t *ctx); 969 970 uint32_t *crc32_filltable(uint32_t *tbl256, int endian); 971 972 973 enum { /* DO NOT CHANGE THESE VALUES! cp.c, mv.c, install.c depend on them. */ 974 FILEUTILS_PRESERVE_STATUS = 1, 975 FILEUTILS_DEREFERENCE = 2, 976 FILEUTILS_RECUR = 4, 977 FILEUTILS_FORCE = 8, 978 FILEUTILS_INTERACTIVE = 0x10, 979 FILEUTILS_MAKE_HARDLINK = 0x20, 980 FILEUTILS_MAKE_SOFTLINK = 0x40, 981 #if ENABLE_SELINUX 982 FILEUTILS_PRESERVE_SECURITY_CONTEXT = 0x80, 983 FILEUTILS_SET_SECURITY_CONTEXT = 0x100 984 #endif 985 }; 986 987 #define FILEUTILS_CP_OPTSTR "pdRfils" USE_SELINUX("c") 988 extern const struct bb_applet *current_applet; 1526 typedef struct md5_ctx_t sha1_ctx_t; 1527 typedef struct md5_ctx_t sha256_ctx_t; 1528 typedef struct sha512_ctx_t { 1529 uint64_t total64[2]; /* must be directly before hash[] */ 1530 uint64_t hash[8]; 1531 uint8_t wbuffer[128]; /* always correctly aligned for uint64_t */ 1532 } sha512_ctx_t; 1533 void md5_begin(md5_ctx_t *ctx) FAST_FUNC; 1534 void md5_hash(md5_ctx_t *ctx, const void *data, size_t length) FAST_FUNC; 1535 void md5_end(md5_ctx_t *ctx, void *resbuf) FAST_FUNC; 1536 void sha1_begin(sha1_ctx_t *ctx) FAST_FUNC; 1537 #define sha1_hash md5_hash 1538 void sha1_end(sha1_ctx_t *ctx, void *resbuf) FAST_FUNC; 1539 void sha256_begin(sha256_ctx_t *ctx) FAST_FUNC; 1540 #define sha256_hash md5_hash 1541 #define sha256_end sha1_end 1542 void sha512_begin(sha512_ctx_t *ctx) FAST_FUNC; 1543 void sha512_hash(sha512_ctx_t *ctx, const void *buffer, size_t len) FAST_FUNC; 1544 void sha512_end(sha512_ctx_t *ctx, void *resbuf) FAST_FUNC; 1545 1546 extern uint32_t *global_crc32_table; 1547 uint32_t *crc32_filltable(uint32_t *tbl256, int endian) FAST_FUNC; 1548 uint32_t crc32_block_endian1(uint32_t val, const void *buf, unsigned len, uint32_t *crc_table) FAST_FUNC; 1549 uint32_t crc32_block_endian0(uint32_t val, const void *buf, unsigned len, uint32_t *crc_table) FAST_FUNC; 1550 1551 typedef struct masks_labels_t { 1552 const char *labels; 1553 const int masks[]; 1554 } masks_labels_t; 1555 int print_flags_separated(const int *masks, const char *labels, 1556 int flags, const char *separator) FAST_FUNC; 1557 int print_flags(const masks_labels_t *ml, int flags) FAST_FUNC; 1558 1559 typedef struct bb_progress_t { 1560 off_t lastsize; 1561 unsigned lastupdate_sec; 1562 unsigned start_sec; 1563 smallint inited; 1564 } bb_progress_t; 1565 1566 void bb_progress_init(bb_progress_t *p) FAST_FUNC; 1567 void bb_progress_update(bb_progress_t *p, const char *curfile, 1568 off_t beg_range, off_t transferred, 1569 off_t totalsize) FAST_FUNC; 1570 989 1571 extern const char *applet_name; 990 /* "BusyBox vN.N.N (timestamp or extra_vestion)" */ 1572 1573 /* Some older linkers don't perform string merging, we used to have common strings 1574 * as global arrays to do it by hand. But: 1575 * (1) newer linkers do it themselves, 1576 * (2) however, they DONT merge string constants with global arrays, 1577 * even if the value is the same (!). Thus global arrays actually 1578 * increased size a bit: for example, "/etc/passwd" string from libc 1579 * wasn't merged with bb_path_passwd_file[] array! 1580 * Therefore now we use #defines. 1581 */ 1582 /* "BusyBox vN.N.N (timestamp or extra_version)" */ 991 1583 extern const char bb_banner[]; 992 1584 extern const char bb_msg_memory_exhausted[]; 993 1585 extern const char bb_msg_invalid_date[]; 994 extern const char bb_msg_read_error[]; 995 extern const char bb_msg_write_error[]; 1586 #define bb_msg_read_error "read error" 1587 #define bb_msg_write_error "write error" 996 1588 extern const char bb_msg_unknown[]; 997 1589 extern const char bb_msg_can_not_create_raw_socket[]; 998 1590 extern const char bb_msg_perm_denied_are_you_root[]; 1591 extern const char bb_msg_you_must_be_root[]; 999 1592 extern const char bb_msg_requires_arg[]; 1000 1593 extern const char bb_msg_invalid_arg[]; … … 1002 1595 extern const char bb_msg_standard_output[]; 1003 1596 1004 extern const char bb_str_default[];1005 1597 /* NB: (bb_hexdigits_upcase[i] | 0x20) -> lowercase hex digit */ 1006 1598 extern const char bb_hexdigits_upcase[]; 1007 1599 1008 extern const char bb_path_mtab_file[];1009 extern const char bb_path_passwd_file[];1010 extern const char bb_path_shadow_file[];1011 extern const char bb_path_gshadow_file[];1012 extern const char bb_path_group_file[];1013 extern const char bb_path_motd_file[];1014 1600 extern const char bb_path_wtmp_file[]; 1015 extern const char bb_dev_null[]; 1601 1602 /* Busybox mount uses either /proc/mounts or /etc/mtab to 1603 * get the list of currently mounted filesystems */ 1604 #define bb_path_mtab_file IF_FEATURE_MTAB_SUPPORT("/etc/mtab")IF_NOT_FEATURE_MTAB_SUPPORT("/proc/mounts") 1605 1606 #define bb_path_passwd_file "/etc/passwd" 1607 #define bb_path_shadow_file "/etc/shadow" 1608 #define bb_path_gshadow_file "/etc/gshadow" 1609 #define bb_path_group_file "/etc/group" 1610 1611 #define bb_path_motd_file "/etc/motd" 1612 1613 #define bb_dev_null "/dev/null" 1016 1614 extern const char bb_busybox_exec_path[]; 1017 1615 /* util-linux manpage says /sbin:/bin:/usr/sbin:/usr/bin, … … 1025 1623 1026 1624 1027 #ifndef BUFSIZ1028 #define BUFSIZ 40961029 #endif1030 1625 /* Providing hard guarantee on minimum size (think of BUFSIZ == 128) */ 1031 1626 enum { COMMON_BUFSIZE = (BUFSIZ >= 256*sizeof(void*) ? BUFSIZ+1 : 256*sizeof(void*)) }; … … 1036 1631 /* '*const' ptr makes gcc optimize code much better. 1037 1632 * Magic prevents ptr_to_globals from going into rodata. 1038 * If you want to assign a value, use PTR_TO_GLOBALS = xxx*/1633 * If you want to assign a value, use SET_PTR_TO_GLOBALS(x) */ 1039 1634 extern struct globals *const ptr_to_globals; 1040 #define PTR_TO_GLOBALS (*(struct globals**)&ptr_to_globals) 1041 1635 /* At least gcc 3.4.6 on mipsel system needs optimization barrier */ 1636 #define barrier() __asm__ __volatile__("":::"memory") 1637 #define SET_PTR_TO_GLOBALS(x) do { \ 1638 (*(struct globals**)&ptr_to_globals) = (void*)(x); \ 1639 barrier(); \ 1640 } while (0) 1042 1641 1043 1642 /* You can change LIBBB_DEFAULT_LOGIN_SHELL, but don't use it, … … 1045 1644 * If you change LIBBB_DEFAULT_LOGIN_SHELL, 1046 1645 * don't forget to change increment constant. */ 1047 #define LIBBB_DEFAULT_LOGIN_SHELL 1646 #define LIBBB_DEFAULT_LOGIN_SHELL "-/bin/sh" 1048 1647 extern const char bb_default_login_shell[]; 1049 1648 /* "/bin/sh" */ 1050 #define DEFAULT_SHELL (bb_default_login_shell+1)1649 #define DEFAULT_SHELL (bb_default_login_shell+1) 1051 1650 /* "sh" */ 1052 #define DEFAULT_SHELL_SHORT_NAME (bb_default_login_shell+6) 1053 1054 1055 #if ENABLE_FEATURE_DEVFS 1651 #define DEFAULT_SHELL_SHORT_NAME (bb_default_login_shell+6) 1652 1653 /* The following devices are the same on all systems. */ 1654 #define CURRENT_TTY "/dev/tty" 1655 #define DEV_CONSOLE "/dev/console" 1656 1657 #if defined(__FreeBSD_kernel__) 1658 # define CURRENT_VC CURRENT_TTY 1659 # define VC_1 "/dev/ttyv0" 1660 # define VC_2 "/dev/ttyv1" 1661 # define VC_3 "/dev/ttyv2" 1662 # define VC_4 "/dev/ttyv3" 1663 # define VC_5 "/dev/ttyv4" 1664 # define VC_FORMAT "/dev/ttyv%d" 1665 #elif defined(__GNU__) 1666 # define CURRENT_VC CURRENT_TTY 1667 # define VC_1 "/dev/tty1" 1668 # define VC_2 "/dev/tty2" 1669 # define VC_3 "/dev/tty3" 1670 # define VC_4 "/dev/tty4" 1671 # define VC_5 "/dev/tty5" 1672 # define VC_FORMAT "/dev/tty%d" 1673 #elif ENABLE_FEATURE_DEVFS 1674 /*Linux, obsolete devfs names */ 1056 1675 # define CURRENT_VC "/dev/vc/0" 1057 1676 # define VC_1 "/dev/vc/1" … … 1060 1679 # define VC_4 "/dev/vc/4" 1061 1680 # define VC_5 "/dev/vc/5" 1062 #if defined(__sh__) || defined(__H8300H__) || defined(__H8300S__)1063 /* Yes, this sucks, but both SH (including sh64) and H8 have a SCI(F) for their1064 respective serial ports .. as such, we can't use the common device paths for1065 these. -- PFM */1066 # define SC_0 "/dev/ttsc/0"1067 # define SC_1 "/dev/ttsc/1"1068 # define SC_FORMAT "/dev/ttsc/%d"1069 #else1070 # define SC_0 "/dev/tts/0"1071 # define SC_1 "/dev/tts/1"1072 # define SC_FORMAT "/dev/tts/%d"1073 #endif1074 1681 # define VC_FORMAT "/dev/vc/%d" 1075 1682 # define LOOP_FORMAT "/dev/loop/%d" … … 1078 1685 # define FB_0 "/dev/fb/0" 1079 1686 #else 1687 /*Linux, normal names */ 1080 1688 # define CURRENT_VC "/dev/tty0" 1081 1689 # define VC_1 "/dev/tty1" … … 1084 1692 # define VC_4 "/dev/tty4" 1085 1693 # define VC_5 "/dev/tty5" 1086 #if defined(__sh__) || defined(__H8300H__) || defined(__H8300S__)1087 # define SC_0 "/dev/ttySC0"1088 # define SC_1 "/dev/ttySC1"1089 # define SC_FORMAT "/dev/ttySC%d"1090 #else1091 # define SC_0 "/dev/ttyS0"1092 # define SC_1 "/dev/ttyS1"1093 # define SC_FORMAT "/dev/ttyS%d"1094 #endif1095 1694 # define VC_FORMAT "/dev/tty%d" 1096 1695 # define LOOP_FORMAT "/dev/loop%d" … … 1100 1699 #endif 1101 1700 1102 /* The following devices are the same on devfs and non-devfs systems. */ 1103 #define CURRENT_TTY "/dev/tty" 1104 #define DEV_CONSOLE "/dev/console" 1105 1106 1107 #ifndef RB_POWER_OFF 1108 /* Stop system and switch power off if possible. */ 1109 #define RB_POWER_OFF 0x4321fedc 1110 #endif 1111 1112 /* Make sure we call functions instead of macros. */ 1701 1702 #define ARRAY_SIZE(x) ((unsigned)(sizeof(x) / sizeof((x)[0]))) 1703 1704 1705 /* We redefine ctype macros. Unicode-correct handling of char types 1706 * can't be done with such byte-oriented operations anyway, 1707 * we don't lose anything. 1708 */ 1113 1709 #undef isalnum 1114 1710 #undef isalpha … … 1116 1712 #undef isblank 1117 1713 #undef iscntrl 1714 #undef isdigit 1118 1715 #undef isgraph 1119 1716 #undef islower … … 1123 1720 #undef isupper 1124 1721 #undef isxdigit 1125 1126 /* This one is more efficient - we save ~400 bytes */ 1127 #undef isdigit 1128 #define isdigit(a) ((unsigned)((a) - '0') <= 9) 1129 1130 1131 #ifdef DMALLOC 1132 #include <dmalloc.h> 1133 #endif 1134 1135 1136 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) 1137 1138 #endif /* __LIBBUSYBOX_H__ */ 1722 #undef toupper 1723 #undef tolower 1724 1725 /* We save ~500 bytes on isdigit alone. 1726 * BTW, x86 likes (unsigned char) cast more than (unsigned). */ 1727 1728 /* These work the same for ASCII and Unicode, 1729 * assuming no one asks "is this a *Unicode* letter?" using isalpha(letter) */ 1730 #define isascii(a) ((unsigned char)(a) <= 0x7f) 1731 #define isdigit(a) ((unsigned char)((a) - '0') <= 9) 1732 #define isupper(a) ((unsigned char)((a) - 'A') <= ('Z' - 'A')) 1733 #define islower(a) ((unsigned char)((a) - 'a') <= ('z' - 'a')) 1734 #define isalpha(a) ((unsigned char)(((a)|0x20) - 'a') <= ('z' - 'a')) 1735 #define isblank(a) ({ unsigned char bb__isblank = (a); bb__isblank == ' ' || bb__isblank == '\t'; }) 1736 #define iscntrl(a) ({ unsigned char bb__iscntrl = (a); bb__iscntrl < ' ' || bb__iscntrl == 0x7f; }) 1737 /* In POSIX/C locale isspace is only these chars: "\t\n\v\f\r" and space. 1738 * "\t\n\v\f\r" happen to have ASCII codes 9,10,11,12,13. 1739 */ 1740 #define isspace(a) ({ unsigned char bb__isspace = (a) - 9; bb__isspace == (' ' - 9) || bb__isspace <= (13 - 9); }) 1741 // Unsafe wrt NUL: #define ispunct(a) (strchr("!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", (a)) != NULL) 1742 #define ispunct(a) (strchrnul("!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", (a))[0]) 1743 // Bigger code: #define isalnum(a) ({ unsigned char bb__isalnum = (a) - '0'; bb__isalnum <= 9 || ((bb__isalnum - ('A' - '0')) & 0xdf) <= 25; }) 1744 #define isalnum(a) bb_ascii_isalnum(a) 1745 static ALWAYS_INLINE int bb_ascii_isalnum(unsigned char a) 1746 { 1747 unsigned char b = a - '0'; 1748 if (b <= 9) 1749 return (b <= 9); 1750 b = (a|0x20) - 'a'; 1751 return b <= 'z' - 'a'; 1752 } 1753 #define isxdigit(a) bb_ascii_isxdigit(a) 1754 static ALWAYS_INLINE int bb_ascii_isxdigit(unsigned char a) 1755 { 1756 unsigned char b = a - '0'; 1757 if (b <= 9) 1758 return (b <= 9); 1759 b = (a|0x20) - 'a'; 1760 return b <= 'f' - 'a'; 1761 } 1762 #define toupper(a) bb_ascii_toupper(a) 1763 static ALWAYS_INLINE unsigned char bb_ascii_toupper(unsigned char a) 1764 { 1765 unsigned char b = a - 'a'; 1766 if (b <= ('z' - 'a')) 1767 a -= 'a' - 'A'; 1768 return a; 1769 } 1770 #define tolower(a) bb_ascii_tolower(a) 1771 static ALWAYS_INLINE unsigned char bb_ascii_tolower(unsigned char a) 1772 { 1773 unsigned char b = a - 'A'; 1774 if (b <= ('Z' - 'A')) 1775 a += 'a' - 'A'; 1776 return a; 1777 } 1778 1779 /* In ASCII and Unicode, these are likely to be very different. 1780 * Let's prevent ambiguous usage from the start */ 1781 #define isgraph(a) isgraph_is_ambiguous_dont_use(a) 1782 #define isprint(a) isprint_is_ambiguous_dont_use(a) 1783 /* NB: must not treat EOF as isgraph or isprint */ 1784 #define isgraph_asciionly(a) ((unsigned)((a) - 0x21) <= 0x7e - 0x21) 1785 #define isprint_asciionly(a) ((unsigned)((a) - 0x20) <= 0x7e - 0x20) 1786 1787 1788 POP_SAVED_FUNCTION_VISIBILITY 1789 1790 #endif -
branches/2.2.9/mindi-busybox/include/platform.h
r1765 r2725 1 1 /* vi: set sw=4 ts=4: */ 2 2 /* 3 Copyright 2006, Bernhard Fischer 4 5 Licensed under the GPL v2 or later, see the file LICENSE in this tarball. 6 */ 7 #ifndef __PLATFORM_H 8 #define __PLATFORM_H 1 3 * Copyright 2006, Bernhard Reutner-Fischer 4 * 5 * Licensed under GPLv2 or later, see file LICENSE in this source tree. 6 */ 7 #ifndef BB_PLATFORM_H 8 #define BB_PLATFORM_H 1 9 10 /* Assume all these functions exist by default. Platforms where it is not 11 * true will #undef them below. 12 */ 13 #define HAVE_FDPRINTF 1 14 #define HAVE_MEMRCHR 1 15 #define HAVE_MKDTEMP 1 16 #define HAVE_SETBIT 1 17 #define HAVE_STRCASESTR 1 18 #define HAVE_STRCHRNUL 1 19 #define HAVE_STRSEP 1 20 #define HAVE_STRSIGNAL 1 21 #define HAVE_VASPRINTF 1 9 22 10 23 /* Convenience macros to test the version of gcc. */ … … 18 31 19 32 /* __restrict is known in EGCS 1.2 and above. */ 20 #if !__GNUC_PREREQ 33 #if !__GNUC_PREREQ(2,92) 21 34 # ifndef __restrict 22 # define __restrict /* Ignore */35 # define __restrict 23 36 # endif 24 37 #endif … … 28 41 version of gcc in which they are supported. */ 29 42 30 #if !__GNUC_PREREQ 43 #if !__GNUC_PREREQ(2,7) 31 44 # ifndef __attribute__ 32 45 # define __attribute__(x) … … 37 50 #if defined(__STDC_VERSION__) && __STDC_VERSION__ > 199901L 38 51 /* it's a keyword */ 39 #else 40 # if __GNUC_PREREQ (2,7) 41 # define inline __inline__ 42 # else 43 # define inline 44 # endif 52 #elif __GNUC_PREREQ(2,7) 53 # define inline __inline__ 54 #else 55 # define inline 45 56 #endif 46 57 … … 49 60 #endif 50 61 51 # define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) 52 # define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__)) 53 # define ATTRIBUTE_PACKED __attribute__ ((__packed__)) 54 # define ATTRIBUTE_ALIGNED(m) __attribute__ ((__aligned__(m))) 55 # if __GNUC_PREREQ (3,0) 56 # define ALWAYS_INLINE __attribute__ ((always_inline)) inline 57 # if !ENABLE_WERROR 58 # define ATTRIBUTE_DEPRECATED __attribute__ ((__deprecated__)) 59 # define ATTRIBUTE_UNUSED_RESULT __attribute__ ((warn_unused_result)) 60 # else 61 # define ATTRIBUTE_DEPRECATED /* n/a */ 62 # define ATTRIBUTE_UNUSED_RESULT /* n/a */ 63 # endif 62 #define UNUSED_PARAM __attribute__ ((__unused__)) 63 #define NORETURN __attribute__ ((__noreturn__)) 64 /* "The malloc attribute is used to tell the compiler that a function 65 * may be treated as if any non-NULL pointer it returns cannot alias 66 * any other pointer valid when the function returns. This will often 67 * improve optimization. Standard functions with this property include 68 * malloc and calloc. realloc-like functions have this property as long 69 * as the old pointer is never referred to (including comparing it 70 * to the new pointer) after the function returns a non-NULL value." 71 */ 72 #define RETURNS_MALLOC __attribute__ ((malloc)) 73 #define PACKED __attribute__ ((__packed__)) 74 #define ALIGNED(m) __attribute__ ((__aligned__(m))) 75 76 /* __NO_INLINE__: some gcc's do not honor inlining! :( */ 77 #if __GNUC_PREREQ(3,0) && !defined(__NO_INLINE__) 78 # define ALWAYS_INLINE __attribute__ ((always_inline)) inline 79 /* I've seen a toolchain where I needed __noinline__ instead of noinline */ 80 # define NOINLINE __attribute__((__noinline__)) 81 # if !ENABLE_WERROR 82 # define DEPRECATED __attribute__ ((__deprecated__)) 83 # define UNUSED_PARAM_RESULT __attribute__ ((warn_unused_result)) 64 84 # else 65 # define ALWAYS_INLINE inline 66 # define ATTRIBUTE_DEPRECATED /* n/a */ 67 # define ATTRIBUTE_UNUSED_RESULT /* n/a */ 68 # endif 85 # define DEPRECATED 86 # define UNUSED_PARAM_RESULT 87 # endif 88 #else 89 # define ALWAYS_INLINE inline 90 # define NOINLINE 91 # define DEPRECATED 92 # define UNUSED_PARAM_RESULT 93 #endif 69 94 70 95 /* -fwhole-program makes all symbols local. The attribute externally_visible 71 96 forces a symbol global. */ 72 # if __GNUC_PREREQ (4,1) 73 # define ATTRIBUTE_EXTERNALLY_VISIBLE __attribute__ ((__externally_visible__)) 74 # else 75 # define ATTRIBUTE_EXTERNALLY_VISIBLE 76 # endif /* GNUC >= 4.1 */ 97 #if __GNUC_PREREQ(4,1) 98 # define EXTERNALLY_VISIBLE __attribute__(( visibility("default") )) 99 //__attribute__ ((__externally_visible__)) 100 #else 101 # define EXTERNALLY_VISIBLE 102 #endif 103 104 /* At 4.4 gcc become much more anal about this, need to use "aliased" types */ 105 #if __GNUC_PREREQ(4,4) 106 # define FIX_ALIASING __attribute__((__may_alias__)) 107 #else 108 # define FIX_ALIASING 109 #endif 77 110 78 111 /* We use __extension__ in some places to suppress -pedantic warnings 79 112 about GCC extensions. This feature didn't work properly before 80 113 gcc 2.8. */ 81 #if !__GNUC_PREREQ 114 #if !__GNUC_PREREQ(2,8) 82 115 # ifndef __extension__ 83 116 # define __extension__ … … 86 119 87 120 /* gcc-2.95 had no va_copy but only __va_copy. */ 88 #if !__GNUC_PREREQ 121 #if !__GNUC_PREREQ(3,0) 89 122 # include <stdarg.h> 90 123 # if !defined va_copy && defined __va_copy … … 93 126 #endif 94 127 128 /* FAST_FUNC is a qualifier which (possibly) makes function call faster 129 * and/or smaller by using modified ABI. It is usually only needed 130 * on non-static, busybox internal functions. Recent versions of gcc 131 * optimize statics automatically. FAST_FUNC on static is required 132 * only if you need to match a function pointer's type */ 133 #if __GNUC_PREREQ(3,0) && defined(i386) /* || defined(__x86_64__)? */ 134 /* stdcall makes callee to pop arguments from stack, not caller */ 135 # define FAST_FUNC __attribute__((regparm(3),stdcall)) 136 /* #elif ... - add your favorite arch today! */ 137 #else 138 # define FAST_FUNC 139 #endif 140 141 /* Make all declarations hidden (-fvisibility flag only affects definitions) */ 142 /* (don't include system headers after this until corresponding pop!) */ 143 #if __GNUC_PREREQ(4,1) 144 # define PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN _Pragma("GCC visibility push(hidden)") 145 # define POP_SAVED_FUNCTION_VISIBILITY _Pragma("GCC visibility pop") 146 #else 147 # define PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN 148 # define POP_SAVED_FUNCTION_VISIBILITY 149 #endif 150 95 151 /* ---- Endian Detection ------------------------------------ */ 96 152 97 #if (defined __digital__ && defined __unix__) 153 #include <limits.h> 154 #if defined(__digital__) && defined(__unix__) 98 155 # include <sex.h> 99 # define __BIG_ENDIAN__ (BYTE_ORDER == BIG_ENDIAN) 100 # define __BYTE_ORDER BYTE_ORDER 101 #elif !defined __APPLE__ 156 #elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) \ 157 || defined(__APPLE__) 158 # include <sys/resource.h> /* rlimit */ 159 # include <machine/endian.h> 160 # define bswap_64 __bswap64 161 # define bswap_32 __bswap32 162 # define bswap_16 __bswap16 163 #else 102 164 # include <byteswap.h> 103 165 # include <endian.h> 104 166 #endif 105 167 106 #if def __BIG_ENDIAN__168 #if defined(__BYTE_ORDER) && __BYTE_ORDER == __BIG_ENDIAN 107 169 # define BB_BIG_ENDIAN 1 108 170 # define BB_LITTLE_ENDIAN 0 109 #elif __BYTE_ORDER == __BIG_ENDIAN 171 #elif defined(__BYTE_ORDER) && __BYTE_ORDER == __LITTLE_ENDIAN 172 # define BB_BIG_ENDIAN 0 173 # define BB_LITTLE_ENDIAN 1 174 #elif defined(_BYTE_ORDER) && _BYTE_ORDER == _BIG_ENDIAN 110 175 # define BB_BIG_ENDIAN 1 111 176 # define BB_LITTLE_ENDIAN 0 112 #el se177 #elif defined(_BYTE_ORDER) && _BYTE_ORDER == _LITTLE_ENDIAN 113 178 # define BB_BIG_ENDIAN 0 114 179 # define BB_LITTLE_ENDIAN 1 115 #endif 116 180 #elif defined(BYTE_ORDER) && BYTE_ORDER == BIG_ENDIAN 181 # define BB_BIG_ENDIAN 1 182 # define BB_LITTLE_ENDIAN 0 183 #elif defined(BYTE_ORDER) && BYTE_ORDER == LITTLE_ENDIAN 184 # define BB_BIG_ENDIAN 0 185 # define BB_LITTLE_ENDIAN 1 186 #elif defined(__386__) 187 # define BB_BIG_ENDIAN 0 188 # define BB_LITTLE_ENDIAN 1 189 #else 190 # error "Can't determine endianness" 191 #endif 192 193 #if ULONG_MAX > 0xffffffff 194 # define bb_bswap_64(x) bswap_64(x) 195 #endif 196 197 /* SWAP_LEnn means "convert CPU<->little_endian by swapping bytes" */ 117 198 #if BB_BIG_ENDIAN 118 #define SWAP_BE16(x) (x) 119 #define SWAP_BE32(x) (x) 120 #define SWAP_BE64(x) (x) 121 #define SWAP_LE16(x) bswap_16(x) 122 #define SWAP_LE32(x) bswap_32(x) 123 #define SWAP_LE64(x) bswap_64(x) 124 #else 125 #define SWAP_BE16(x) bswap_16(x) 126 #define SWAP_BE32(x) bswap_32(x) 127 #define SWAP_BE64(x) bswap_64(x) 128 #define SWAP_LE16(x) (x) 129 #define SWAP_LE32(x) (x) 130 #define SWAP_LE64(x) (x) 131 #endif 132 133 /* ---- Networking ------------------------------------------ */ 134 #ifndef __APPLE__ 135 # include <arpa/inet.h> 136 #else 137 # include <netinet/in.h> 138 #endif 139 140 #ifndef __socklen_t_defined 141 typedef int socklen_t; 199 # define SWAP_BE16(x) (x) 200 # define SWAP_BE32(x) (x) 201 # define SWAP_BE64(x) (x) 202 # define SWAP_LE16(x) bswap_16(x) 203 # define SWAP_LE32(x) bswap_32(x) 204 # define SWAP_LE64(x) bb_bswap_64(x) 205 # define IF_BIG_ENDIAN(...) __VA_ARGS__ 206 # define IF_LITTLE_ENDIAN(...) 207 #else 208 # define SWAP_BE16(x) bswap_16(x) 209 # define SWAP_BE32(x) bswap_32(x) 210 # define SWAP_BE64(x) bb_bswap_64(x) 211 # define SWAP_LE16(x) (x) 212 # define SWAP_LE32(x) (x) 213 # define SWAP_LE64(x) (x) 214 # define IF_BIG_ENDIAN(...) 215 # define IF_LITTLE_ENDIAN(...) __VA_ARGS__ 216 #endif 217 218 /* ---- Unaligned access ------------------------------------ */ 219 220 /* NB: unaligned parameter should be a pointer, aligned one - 221 * a lvalue. This makes it more likely to not swap them by mistake 222 */ 223 #if defined(i386) || defined(__x86_64__) || defined(__powerpc__) 224 # include <stdint.h> 225 typedef int bb__aliased_int FIX_ALIASING; 226 typedef uint16_t bb__aliased_uint16_t FIX_ALIASING; 227 typedef uint32_t bb__aliased_uint32_t FIX_ALIASING; 228 # define move_from_unaligned_int(v, intp) ((v) = *(bb__aliased_int*)(intp)) 229 # define move_from_unaligned16(v, u16p) ((v) = *(bb__aliased_uint16_t*)(u16p)) 230 # define move_from_unaligned32(v, u32p) ((v) = *(bb__aliased_uint32_t*)(u32p)) 231 # define move_to_unaligned16(u16p, v) (*(bb__aliased_uint16_t*)(u16p) = (v)) 232 # define move_to_unaligned32(u32p, v) (*(bb__aliased_uint32_t*)(u32p) = (v)) 233 /* #elif ... - add your favorite arch today! */ 234 #else 235 /* performs reasonably well (gcc usually inlines memcpy here) */ 236 # define move_from_unaligned_int(v, intp) (memcpy(&(v), (intp), sizeof(int))) 237 # define move_from_unaligned16(v, u16p) (memcpy(&(v), (u16p), 2)) 238 # define move_from_unaligned32(v, u32p) (memcpy(&(v), (u32p), 4)) 239 # define move_to_unaligned16(u16p, v) do { \ 240 uint16_t __t = (v); \ 241 memcpy((u16p), &__t, 4); \ 242 } while (0) 243 # define move_to_unaligned32(u32p, v) do { \ 244 uint32_t __t = (v); \ 245 memcpy((u32p), &__t, 4); \ 246 } while (0) 142 247 #endif 143 248 144 249 /* ---- Compiler dependent settings ------------------------- */ 145 #if (defined __digital__ && defined __unix__) 250 251 #if (defined __digital__ && defined __unix__) \ 252 || defined __APPLE__ \ 253 || defined __FreeBSD__ || defined __OpenBSD__ || defined __NetBSD__ 146 254 # undef HAVE_MNTENT_H 255 # undef HAVE_SYS_STATFS_H 147 256 #else 148 257 # define HAVE_MNTENT_H 1 149 #endif /* ___digital__ && __unix__ */ 150 151 /* linux/loop.h relies on __u64. Make sure we have that as a proper type 152 * until userspace is widely fixed. */ 153 #ifndef __GNUC__ 154 #if defined __INTEL_COMPILER 155 __extension__ typedef __signed__ long long __s64; 156 __extension__ typedef unsigned long long __u64; 157 #endif /* __INTEL_COMPILER */ 158 #endif /* ifndef __GNUC__ */ 258 # define HAVE_SYS_STATFS_H 1 259 #endif 159 260 160 261 /*----- Kernel versioning ------------------------------------*/ 262 161 263 #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) 162 264 163 /* ---- miscellaneous --------------------------------------- */ 164 165 #if defined(__GNU_LIBRARY__) && __GNU_LIBRARY__ < 5 && \ 166 !defined(__dietlibc__) && \ 167 !defined(_NEWLIB_VERSION) && \ 168 !(defined __digital__ && defined __unix__) 169 # error "Sorry, this libc version is not supported :(" 170 #endif 171 172 /* Don't perpetuate e2fsck crap into the headers. Clean up e2fsck instead. */ 265 /* ---- Miscellaneous --------------------------------------- */ 173 266 174 267 #if defined __GLIBC__ || defined __UCLIBC__ \ 175 || defined __dietlibc__ || defined _NEWLIB_VERSION 176 #include <features.h> 177 #define HAVE_FEATURES_H 178 #include <stdint.h> 179 #define HAVE_STDINT_H 180 #else 181 /* Largest integral types. */ 182 #if __BIG_ENDIAN__ 183 typedef long intmax_t; 184 typedef unsigned long uintmax_t; 185 #else 186 __extension__ 187 typedef long long intmax_t; 188 __extension__ 189 typedef unsigned long long uintmax_t; 190 #endif 268 || defined __dietlibc__ || defined _NEWLIB_VERSION 269 # include <features.h> 191 270 #endif 192 271 … … 205 284 #if (defined __digital__ && defined __unix__) 206 285 /* old system without (proper) C99 support */ 207 # define bool smalluint286 # define bool smalluint 208 287 #else 209 288 /* modern system, so use it */ 210 # include <stdbool.h>289 # include <stdbool.h> 211 290 #endif 212 291 213 292 /* Try to defeat gcc's alignment of "char message[]"-like data */ 214 293 #if 1 /* if needed: !defined(arch1) && !defined(arch2) */ 215 #define ALIGN1 __attribute__((aligned(1))) 216 #define ALIGN2 __attribute__((aligned(2))) 294 # define ALIGN1 __attribute__((aligned(1))) 295 # define ALIGN2 __attribute__((aligned(2))) 296 # define ALIGN4 __attribute__((aligned(4))) 217 297 #else 218 298 /* Arches which MUST have 2 or 4 byte alignment for everything are here */ 219 #define ALIGN1 220 #define ALIGN2 299 # define ALIGN1 300 # define ALIGN2 301 # define ALIGN4 221 302 #endif 222 303 … … 225 306 * For 0.9.29 and svn, __ARCH_USE_MMU__ indicates no-mmu reliably. 226 307 * For earlier versions there is no reliable way to check if we are building 227 * for a mmu-less system; the user should pass EXTRA_CFLAGS="-DBB_NOMMU" 228 * on his own. 229 */ 230 #if defined __UCLIBC__ && __UCLIBC_MAJOR__ >= 0 && __UCLIBC_MINOR__ >= 9 && \ 231 __UCLIBC_SUBLEVEL__ > 28 && !defined __ARCH_USE_MMU__ 232 #define BB_MMU 0 233 #define BB_NOMMU 1 234 #define USE_FOR_NOMMU(...) __VA_ARGS__ 235 #define USE_FOR_MMU(...) 236 #else 237 #define BB_MMU 1 238 /* BB_NOMMU is not defined in this case! */ 239 #define USE_FOR_NOMMU(...) 240 #define USE_FOR_MMU(...) __VA_ARGS__ 241 #endif 242 243 /* Platforms that haven't got dprintf need to implement fdprintf() in 244 * libbb. This would require a platform.c. It's not going to be cleaned 245 * out of the tree, so stop saying it should be. */ 246 #if !defined(__dietlibc__) 247 /* Needed for: glibc */ 248 /* Not needed for: dietlibc */ 249 /* Others: ?? (add as needed) */ 250 #define fdprintf dprintf 308 * for a mmu-less system. 309 */ 310 #if ENABLE_NOMMU || \ 311 (defined __UCLIBC__ && __UCLIBC_MAJOR__ >= 0 && __UCLIBC_MINOR__ >= 9 && \ 312 __UCLIBC_SUBLEVEL__ > 28 && !defined __ARCH_USE_MMU__) 313 # define BB_MMU 0 314 # define USE_FOR_NOMMU(...) __VA_ARGS__ 315 # define USE_FOR_MMU(...) 316 #else 317 # define BB_MMU 1 318 # define USE_FOR_NOMMU(...) 319 # define USE_FOR_MMU(...) __VA_ARGS__ 320 #endif 321 322 /* Don't use lchown with glibc older than 2.1.x */ 323 #if defined(__GLIBC__) && __GLIBC__ <= 2 && __GLIBC_MINOR__ < 1 324 # define lchown chown 325 #endif 326 327 #if defined(__digital__) && defined(__unix__) 328 329 # include <standards.h> 330 # include <inttypes.h> 331 # define PRIu32 "u" 332 /* use legacy setpgrp(pid_t,pid_t) for now. move to platform.c */ 333 # define bb_setpgrp() do { pid_t __me = getpid(); setpgrp(__me, __me); } while (0) 334 # if !defined ADJ_OFFSET_SINGLESHOT && defined MOD_CLKA && defined MOD_OFFSET 335 # define ADJ_OFFSET_SINGLESHOT (MOD_CLKA | MOD_OFFSET) 336 # endif 337 # if !defined ADJ_FREQUENCY && defined MOD_FREQUENCY 338 # define ADJ_FREQUENCY MOD_FREQUENCY 339 # endif 340 # if !defined ADJ_TIMECONST && defined MOD_TIMECONST 341 # define ADJ_TIMECONST MOD_TIMECONST 342 # endif 343 # if !defined ADJ_TICK && defined MOD_CLKB 344 # define ADJ_TICK MOD_CLKB 345 # endif 346 347 #else 348 349 # define bb_setpgrp() setpgrp() 350 351 #endif 352 353 #if defined(__GLIBC__) 354 # define fdprintf dprintf 251 355 #endif 252 356 253 357 #if defined(__dietlibc__) 254 static ALWAYS_INLINE char* strchrnul(const char *s, char c) 255 { 256 while (*s && *s != c) ++s; 257 return (char*)s; 258 } 259 #endif 260 261 /* Don't use lchown with glibc older than 2.1.x ... uClibc lacks it */ 262 #if (defined __GLIBC__ && __GLIBC__ <= 2 && __GLIBC_MINOR__ < 1) || \ 263 defined __UC_LIBC__ 264 # define lchown chown 265 #endif 266 267 /* THIS SHOULD BE CLEANED OUT OF THE TREE ENTIRELY */ 268 /* FIXME: fix tar.c! */ 269 #ifndef FNM_LEADING_DIR 270 #define FNM_LEADING_DIR 0 271 #endif 272 273 #if (defined __digital__ && defined __unix__) 274 #include <standards.h> 275 #define HAVE_STANDARDS_H 276 #include <inttypes.h> 277 #define HAVE_INTTYPES_H 278 #define PRIu32 "u" 279 280 /* use legacy setpgrp(pid_t,pid_t) for now. move to platform.c */ 281 #define bb_setpgrp() do { pid_t __me = getpid(); setpgrp(__me,__me); } while (0) 282 283 #if !defined ADJ_OFFSET_SINGLESHOT && defined MOD_CLKA && defined MOD_OFFSET 284 #define ADJ_OFFSET_SINGLESHOT (MOD_CLKA | MOD_OFFSET) 285 #endif 286 #if !defined ADJ_FREQUENCY && defined MOD_FREQUENCY 287 #define ADJ_FREQUENCY MOD_FREQUENCY 288 #endif 289 #if !defined ADJ_TIMECONST && defined MOD_TIMECONST 290 #define ADJ_TIMECONST MOD_TIMECONST 291 #endif 292 #if !defined ADJ_TICK && defined MOD_CLKB 293 #define ADJ_TICK MOD_CLKB 294 #endif 295 296 #else 297 #define bb_setpgrp() setpgrp() 298 #endif 299 300 #if defined(__linux__) 301 #include <sys/mount.h> 302 /* Make sure we have all the new mount flags we actually try to use. */ 303 #ifndef MS_BIND 304 #define MS_BIND (1<<12) 305 #endif 306 #ifndef MS_MOVE 307 #define MS_MOVE (1<<13) 308 #endif 309 #ifndef MS_RECURSIVE 310 #define MS_RECURSIVE (1<<14) 311 #endif 312 #ifndef MS_SILENT 313 #define MS_SILENT (1<<15) 314 #endif 315 316 /* The shared subtree stuff, which went in around 2.6.15. */ 317 #ifndef MS_UNBINDABLE 318 #define MS_UNBINDABLE (1<<17) 319 #endif 320 #ifndef MS_PRIVATE 321 #define MS_PRIVATE (1<<18) 322 #endif 323 #ifndef MS_SLAVE 324 #define MS_SLAVE (1<<19) 325 #endif 326 #ifndef MS_SHARED 327 #define MS_SHARED (1<<20) 328 #endif 329 330 331 #if !defined(BLKSSZGET) 332 #define BLKSSZGET _IO(0x12, 104) 333 #endif 334 #if !defined(BLKGETSIZE64) 335 #define BLKGETSIZE64 _IOR(0x12,114,size_t) 336 #endif 337 #endif 338 339 #endif /* platform.h */ 358 # undef HAVE_STRCHRNUL 359 #endif 360 361 #if defined(__WATCOMC__) 362 # undef HAVE_FDPRINTF 363 # undef HAVE_MEMRCHR 364 # undef HAVE_MKDTEMP 365 # undef HAVE_SETBIT 366 # undef HAVE_STRCASESTR 367 # undef HAVE_STRCHRNUL 368 # undef HAVE_STRSEP 369 # undef HAVE_STRSIGNAL 370 # undef HAVE_VASPRINTF 371 #endif 372 373 #if defined(__FreeBSD__) 374 # undef HAVE_STRCHRNUL 375 #endif 376 377 /* 378 * Now, define prototypes for all the functions defined in platform.c 379 * These must come after all the HAVE_* macros are defined (or not) 380 */ 381 382 #ifndef HAVE_FDPRINTF 383 extern int fdprintf(int fd, const char *format, ...); 384 #endif 385 386 #ifndef HAVE_MEMRCHR 387 extern void *memrchr(const void *s, int c, size_t n) FAST_FUNC; 388 #endif 389 390 #ifndef HAVE_MKDTEMP 391 extern char *mkdtemp(char *template) FAST_FUNC; 392 #endif 393 394 #ifndef HAVE_SETBIT 395 # define setbit(a, b) ((a)[(b) >> 3] |= 1 << ((b) & 7)) 396 # define clrbit(a, b) ((a)[(b) >> 3] &= ~(1 << ((b) & 7))) 397 #endif 398 399 #ifndef HAVE_STRCASESTR 400 extern char *strcasestr(const char *s, const char *pattern) FAST_FUNC; 401 #endif 402 403 #ifndef HAVE_STRCHRNUL 404 extern char *strchrnul(const char *s, int c) FAST_FUNC; 405 #endif 406 407 #ifndef HAVE_STRSEP 408 extern char *strsep(char **stringp, const char *delim) FAST_FUNC; 409 #endif 410 411 #ifndef HAVE_STRSIGNAL 412 /* Not exactly the same: instead of "Stopped" it shows "STOP" etc */ 413 # define strsignal(sig) get_signame(sig) 414 #endif 415 416 #ifndef HAVE_VASPRINTF 417 extern int vasprintf(char **string_ptr, const char *format, va_list p) FAST_FUNC; 418 #endif 419 420 #endif -
branches/2.2.9/mindi-busybox/include/pwd_.h
r1765 r2725 19 19 20 20 /* 21 * 21 * POSIX Standard: 9.2.2 User Database Access <pwd.h> 22 22 */ 23 23 24 #if !ENABLE_USE_BB_PWD_GRP 24 #ifndef BB_PWD_H 25 #define BB_PWD_H 1 25 26 26 #include <pwd.h> 27 PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN 27 28 28 #else 29 30 #ifndef _PWD_H 31 #define _PWD_H 1 32 33 /* The passwd structure. */ 34 struct passwd { 35 char *pw_name; /* Username. */ 36 char *pw_passwd; /* Password. */ 37 uid_t pw_uid; /* User ID. */ 38 gid_t pw_gid; /* Group ID. */ 39 char *pw_gecos; /* Real name. */ 40 char *pw_dir; /* Home directory. */ 41 char *pw_shell; /* Shell program. */ 42 }; 43 29 /* This file is #included after #include <pwd.h> 30 * We will use libc-defined structures, but will #define function names 31 * so that function calls are directed to bb_internal_XXX replacements 32 */ 44 33 45 34 #define setpwent bb_internal_setpwent … … 54 43 #define getpwnam_r bb_internal_getpwnam_r 55 44 #define fgetpwent_r bb_internal_fgetpwent_r 56 #define getpw bb_internal_getpw57 45 58 46 59 47 /* All function names below should be remapped by #defines above 60 * in order to not collide with libc names. 61 * In theory it isn't necessary, but I saw weird interactions at link time. 62 * Let's play safe */ 48 * in order to not collide with libc names. */ 63 49 64 50 … … 69 55 extern void endpwent(void); 70 56 57 #ifdef UNUSED_SINCE_WE_AVOID_STATIC_BUFS 71 58 /* Read an entry from the password-file stream, opening it if necessary. */ 72 59 extern struct passwd *getpwent(void); … … 76 63 77 64 /* Write the given entry onto the given stream. */ 78 extern int putpwent( __const struct passwd *__restrict __p,65 extern int putpwent(const struct passwd *__restrict __p, 79 66 FILE *__restrict __f); 67 #endif 80 68 81 69 /* Search for an entry with a matching user ID. */ … … 83 71 84 72 /* Search for an entry with a matching username. */ 85 extern struct passwd *getpwnam( __const char *__name);73 extern struct passwd *getpwnam(const char *__name); 86 74 87 75 /* Reentrant versions of some of the functions above. … … 102 90 struct passwd **__restrict __result); 103 91 104 extern int getpwnam_r( __const char *__restrict __name,92 extern int getpwnam_r(const char *__restrict __name, 105 93 struct passwd *__restrict __resultbuf, 106 94 char *__restrict __buffer, size_t __buflen, … … 114 102 struct passwd **__restrict __result); 115 103 116 /* Re-construct the password-file line for the given uid 117 in the given buffer. This knows the format that the caller 118 will expect, but this need not be the format of the password file. */ 119 extern int getpw(uid_t __uid, char *__buffer); 104 POP_SAVED_FUNCTION_VISIBILITY 120 105 121 #endif /* pwd.h */122 106 #endif -
branches/2.2.9/mindi-busybox/include/shadow_.h
r1765 r2725 20 20 /* Declaration of types and functions for shadow password suite */ 21 21 22 #if !ENABLE_USE_BB_SHADOW 22 #ifndef BB_SHADOW_H 23 #define BB_SHADOW_H 1 23 24 24 #include <shadow.h> 25 26 #else 27 28 #ifndef _SHADOW_H 29 #define _SHADOW_H 1 30 31 /* Paths to the user database files */ 32 #ifndef _PATH_SHADOW 33 #define _PATH_SHADOW "/etc/shadow" 34 #endif 25 PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN 35 26 36 27 /* Structure of the password file */ … … 47 38 }; 48 39 40 /* Paths to the user database files */ 41 #ifndef _PATH_SHADOW 42 #define _PATH_SHADOW "/etc/shadow" 43 #endif 49 44 50 45 #define setspent bb_internal_setspent … … 64 59 65 60 /* All function names below should be remapped by #defines above 66 * in order to not collide with libc names. 67 * In theory it isn't necessary, but I saw weird interactions at link time. 68 * Let's play safe */ 61 * in order to not collide with libc names. */ 69 62 70 63 #ifdef UNUSED_FOR_NOW 71 64 /* Open database for reading */ 72 65 extern void setspent(void); … … 79 72 80 73 /* Get shadow entry matching NAME */ 81 extern struct spwd *getspnam( __const char *__name);74 extern struct spwd *getspnam(const char *__name); 82 75 83 76 /* Read shadow entry from STRING */ 84 extern struct spwd *sgetspent( __const char *__string);77 extern struct spwd *sgetspent(const char *__string); 85 78 86 79 /* Read next shadow entry from STREAM */ … … 88 81 89 82 /* Write line containing shadow password entry to stream */ 90 extern int putspent( __const struct spwd *__p, FILE *__stream);83 extern int putspent(const struct spwd *__p, FILE *__stream); 91 84 92 85 /* Reentrant versions of some of the functions above */ 93 86 extern int getspent_r(struct spwd *__result_buf, char *__buffer, 94 87 size_t __buflen, struct spwd **__result); 88 #endif 95 89 96 extern int getspnam_r( __const char *__name, struct spwd *__result_buf,90 extern int getspnam_r(const char *__name, struct spwd *__result_buf, 97 91 char *__buffer, size_t __buflen, 98 92 struct spwd **__result); 99 93 100 extern int sgetspent_r(__const char *__string, struct spwd *__result_buf, 94 #ifdef UNUSED_FOR_NOW 95 extern int sgetspent_r(const char *__string, struct spwd *__result_buf, 101 96 char *__buffer, size_t __buflen, 102 97 struct spwd **__result); … … 110 105 /* Unlock password file */ 111 106 extern int ulckpwdf(void); 107 #endif 108 109 POP_SAVED_FUNCTION_VISIBILITY 112 110 113 111 #endif /* shadow.h */ 114 #endif -
branches/2.2.9/mindi-busybox/include/usage.h
r1765 r2725 1 /* DO NOT EDIT. This file is generated from usage.src.h */ 1 2 /* vi: set sw=8 ts=8: */ 2 3 /* … … 7 8 * 3. Start each source line with message as follows: 8 9 * |<7 spaces>"text with tabs".... 10 * or 11 * |<5 spaces>"\ntext with tabs".... 9 12 */ 10 11 #ifndef __BB_USAGE_H__ 12 #define __BB_USAGE_H__ 13 #ifndef BB_USAGE_H 14 #define BB_USAGE_H 1 15 16 17 #define NOUSAGE_STR "\b" 18 19 20 #define bunzip2_trivial_usage \ 21 "[-cf] [FILE]..." \ 22 23 #define bunzip2_full_usage "\n\n" \ 24 "Decompress FILEs (or stdin)\n" \ 25 "\nOptions:" \ 26 "\n -c Write to stdout" \ 27 "\n -f Force" \ 28 29 #define bzcat_trivial_usage \ 30 "FILE" \ 31 32 #define bzcat_full_usage "\n\n" \ 33 "Decompress to stdout" \ 34 35 #define tar_trivial_usage \ 36 "-[" IF_FEATURE_TAR_CREATE("c") "xt" IF_FEATURE_SEAMLESS_GZ("z") \ 37 IF_FEATURE_SEAMLESS_BZ2("j") IF_FEATURE_SEAMLESS_LZMA("a") \ 38 IF_FEATURE_SEAMLESS_Z("Z") IF_FEATURE_TAR_NOPRESERVE_TIME("m") "vO] " \ 39 IF_FEATURE_TAR_FROM("[-X FILE] ") \ 40 "[-f TARFILE] [-C DIR] [FILE]..." \ 41 42 #define tar_full_usage "\n\n" \ 43 IF_FEATURE_TAR_CREATE("Create, extract, ") \ 44 IF_NOT_FEATURE_TAR_CREATE("Extract ") \ 45 "or list files from a tar file\n" \ 46 "\nOperation:" \ 47 IF_FEATURE_TAR_CREATE( \ 48 "\n c Create" \ 49 ) \ 50 "\n x Extract" \ 51 "\n t List" \ 52 "\nOptions:" \ 53 "\n f Name of TARFILE ('-' for stdin/out)" \ 54 "\n C Change to DIR before operation" \ 55 "\n v Verbose" \ 56 IF_FEATURE_SEAMLESS_GZ( \ 57 "\n z (De)compress using gzip" \ 58 ) \ 59 IF_FEATURE_SEAMLESS_BZ2( \ 60 "\n j (De)compress using bzip2" \ 61 ) \ 62 IF_FEATURE_SEAMLESS_LZMA( \ 63 "\n a (De)compress using lzma" \ 64 ) \ 65 IF_FEATURE_SEAMLESS_Z( \ 66 "\n Z (De)compress using compress" \ 67 ) \ 68 "\n O Extract to stdout" \ 69 IF_FEATURE_TAR_CREATE( \ 70 "\n h Follow symlinks" \ 71 ) \ 72 IF_FEATURE_TAR_NOPRESERVE_TIME( \ 73 "\n m Don't restore mtime" \ 74 ) \ 75 IF_FEATURE_TAR_FROM( \ 76 IF_FEATURE_TAR_LONG_OPTIONS( \ 77 "\n exclude File to exclude" \ 78 ) \ 79 "\n X File with names to exclude" \ 80 "\n T File with names to include" \ 81 ) \ 82 83 #define tar_example_usage \ 84 "$ zcat /tmp/tarball.tar.gz | tar -xf -\n" \ 85 "$ tar -cf /tmp/tarball.tar /usr/local\n" \ 86 87 #define date_trivial_usage \ 88 "[OPTIONS] [+FMT] [TIME]" \ 89 90 #define date_full_usage "\n\n" \ 91 "Display time (using +FMT), or set time\n" \ 92 "\nOptions:" \ 93 IF_NOT_LONG_OPTS( \ 94 "\n [-s] TIME Set time to TIME" \ 95 "\n -u Work in UTC (don't convert to local time)" \ 96 "\n -R Output RFC-2822 compliant date string" \ 97 ) IF_LONG_OPTS( \ 98 "\n [-s,--set] TIME Set time to TIME" \ 99 "\n -u,--utc Work in UTC (don't convert to local time)" \ 100 "\n -R,--rfc-2822 Output RFC-2822 compliant date string" \ 101 ) \ 102 IF_FEATURE_DATE_ISOFMT( \ 103 "\n -I[SPEC] Output ISO-8601 compliant date string" \ 104 "\n SPEC='date' (default) for date only," \ 105 "\n 'hours', 'minutes', or 'seconds' for date and" \ 106 "\n time to the indicated precision" \ 107 ) \ 108 IF_NOT_LONG_OPTS( \ 109 "\n -r FILE Display last modification time of FILE" \ 110 "\n -d TIME Display TIME, not 'now'" \ 111 ) IF_LONG_OPTS( \ 112 "\n -r,--reference FILE Display last modification time of FILE" \ 113 "\n -d,--date TIME Display TIME, not 'now'" \ 114 ) \ 115 IF_FEATURE_DATE_ISOFMT( \ 116 "\n -D FMT Use FMT for -d TIME conversion" \ 117 ) \ 118 "\n" \ 119 "\nRecognized TIME formats:" \ 120 "\n hh:mm[:ss]" \ 121 "\n [YYYY.]MM.DD-hh:mm[:ss]" \ 122 "\n YYYY-MM-DD hh:mm[:ss]" \ 123 "\n [[[[[YY]YY]MM]DD]hh]mm[.ss]" \ 124 125 #define date_example_usage \ 126 "$ date\n" \ 127 "Wed Apr 12 18:52:41 MDT 2000\n" \ 128 129 #define mv_trivial_usage \ 130 "[-fin] SOURCE DEST\n" \ 131 "or: mv [-fin] SOURCE... DIRECTORY" \ 132 133 #define mv_full_usage "\n\n" \ 134 "Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY\n" \ 135 "\nOptions:" \ 136 "\n -f Don't prompt before overwriting" \ 137 "\n -i Interactive, prompt before overwrite" \ 138 "\n -n Don't overwrite an existing file" \ 139 140 #define mv_example_usage \ 141 "$ mv /tmp/foo /bin/bar\n" \ 142 143 #define base64_trivial_usage \ 144 "[-d] [FILE]" \ 145 146 #define base64_full_usage "\n\n" \ 147 "Base64 encode or decode FILE to standard output" \ 148 "\nOptions:" \ 149 "\n -d Decode data" \ 150 151 #define wc_trivial_usage \ 152 "[-c"IF_UNICODE_SUPPORT("m")"lwL] [FILE]..." \ 153 154 #define wc_full_usage "\n\n" \ 155 "Count lines, words, and bytes for each FILE (or stdin)\n" \ 156 "\nOptions:" \ 157 "\n -c Count bytes" \ 158 IF_UNICODE_SUPPORT( \ 159 "\n -m Count characters" \ 160 ) \ 161 "\n -l Count newlines" \ 162 "\n -w Count words" \ 163 "\n -L Print longest line length" \ 164 165 #define wc_example_usage \ 166 "$ wc /etc/passwd\n" \ 167 " 31 46 1365 /etc/passwd\n" \ 168 169 #define yes_trivial_usage \ 170 "[STRING]" \ 171 172 #define yes_full_usage "\n\n" \ 173 "Repeatedly output a line with STRING, or 'y'" \ 174 175 #define tune2fs_trivial_usage \ 176 "[-c MOUNT_CNT] " \ 177 "[-i DAYS] " \ 178 "[-L LABEL] " \ 179 "BLOCKDEV" \ 180 181 #define tune2fs_full_usage "\n\n" \ 182 "Adjust filesystem options on ext[23] filesystems" \ 183 184 #define patch_trivial_usage \ 185 "[OPTIONS] [ORIGFILE [PATCHFILE]]" \ 186 187 #define patch_full_usage "\n\n" \ 188 IF_LONG_OPTS( \ 189 " -p,--strip N Strip N leading components from file names" \ 190 "\n -i,--input DIFF Read DIFF instead of stdin" \ 191 "\n -R,--reverse Reverse patch" \ 192 "\n -N,--forward Ignore already applied patches" \ 193 "\n --dry-run Don't actually change files" \ 194 "\n -E,--remove-empty-files Remove output files if they become empty" \ 195 ) \ 196 IF_NOT_LONG_OPTS( \ 197 " -p N Strip N leading components from file names" \ 198 "\n -i DIFF Read DIFF instead of stdin" \ 199 "\n -R Reverse patch" \ 200 "\n -N Ignore already applied patches" \ 201 "\n -E Remove output files if they become empty" \ 202 ) \ 203 204 #define patch_example_usage \ 205 "$ patch -p1 < example.diff\n" \ 206 "$ patch -p0 -i example.diff" \ 207 208 #define find_trivial_usage \ 209 "[PATH]... [EXPRESSION]" \ 210 211 #define find_full_usage "\n\n" \ 212 "Search for files. The default PATH is the current directory,\n" \ 213 "default EXPRESSION is '-print'\n" \ 214 "\nEXPRESSION may consist of:" \ 215 "\n -follow Follow symlinks" \ 216 IF_FEATURE_FIND_XDEV( \ 217 "\n -xdev Don't descend directories on other filesystems" \ 218 ) \ 219 IF_FEATURE_FIND_MAXDEPTH( \ 220 "\n -maxdepth N Descend at most N levels. -maxdepth 0 applies" \ 221 "\n tests/actions to command line arguments only" \ 222 ) \ 223 "\n -mindepth N Don't act on first N levels" \ 224 "\n -name PATTERN File name (w/o directory name) matches PATTERN" \ 225 "\n -iname PATTERN Case insensitive -name" \ 226 IF_FEATURE_FIND_PATH( \ 227 "\n -path PATTERN Path matches PATTERN" \ 228 ) \ 229 IF_FEATURE_FIND_REGEX( \ 230 "\n -regex PATTERN Path matches regex PATTERN" \ 231 ) \ 232 IF_FEATURE_FIND_TYPE( \ 233 "\n -type X File type is X (X is one of: f,d,l,b,c,...)" \ 234 ) \ 235 IF_FEATURE_FIND_PERM( \ 236 "\n -perm NNN Permissions match any of (+NNN), all of (-NNN)," \ 237 "\n or exactly NNN" \ 238 ) \ 239 IF_FEATURE_FIND_MTIME( \ 240 "\n -mtime DAYS Modified time is greater than (+N), less than (-N)," \ 241 "\n or exactly N days" \ 242 ) \ 243 IF_FEATURE_FIND_MMIN( \ 244 "\n -mmin MINS Modified time is greater than (+N), less than (-N)," \ 245 "\n or exactly N minutes" \ 246 ) \ 247 IF_FEATURE_FIND_NEWER( \ 248 "\n -newer FILE Modified time is more recent than FILE's" \ 249 ) \ 250 IF_FEATURE_FIND_INUM( \ 251 "\n -inum N File has inode number N" \ 252 ) \ 253 IF_FEATURE_FIND_USER( \ 254 "\n -user NAME File is owned by user NAME (numeric user ID allowed)" \ 255 ) \ 256 IF_FEATURE_FIND_GROUP( \ 257 "\n -group NAME File belongs to group NAME (numeric group ID allowed)" \ 258 ) \ 259 IF_FEATURE_FIND_DEPTH( \ 260 "\n -depth Process directory name after traversing it" \ 261 ) \ 262 IF_FEATURE_FIND_SIZE( \ 263 "\n -size N[bck] File size is N (c:bytes,k:kbytes,b:512 bytes(def.))" \ 264 "\n +/-N: file size is bigger/smaller than N" \ 265 ) \ 266 IF_FEATURE_FIND_LINKS( \ 267 "\n -links N Number of links is greater than (+N), less than (-N)," \ 268 "\n or exactly N" \ 269 ) \ 270 "\n -print Print (default and assumed)" \ 271 IF_FEATURE_FIND_PRINT0( \ 272 "\n -print0 Delimit output with null characters rather than" \ 273 "\n newlines" \ 274 ) \ 275 IF_FEATURE_FIND_CONTEXT( \ 276 "\n -context File has specified security context" \ 277 ) \ 278 IF_FEATURE_FIND_EXEC( \ 279 "\n -exec CMD ARG ; Run CMD with all instances of {} replaced by the" \ 280 "\n matching files" \ 281 ) \ 282 IF_FEATURE_FIND_PRUNE( \ 283 "\n -prune Stop traversing current subtree" \ 284 ) \ 285 IF_FEATURE_FIND_DELETE( \ 286 "\n -delete Delete files, turns on -depth option" \ 287 ) \ 288 IF_FEATURE_FIND_PAREN( \ 289 "\n (EXPR) Group an expression" \ 290 ) \ 291 292 #define find_example_usage \ 293 "$ find / -name passwd\n" \ 294 "/etc/passwd\n" \ 295 296 #define grep_trivial_usage \ 297 "[-HhnlLoqvsriw" \ 298 "F" \ 299 IF_FEATURE_GREP_EGREP_ALIAS("E") \ 300 IF_EXTRA_COMPAT("z") \ 301 "] [-m N] " \ 302 IF_FEATURE_GREP_CONTEXT("[-A/B/C N] ") \ 303 "PATTERN/-e PATTERN.../-f FILE [FILE]..." \ 304 305 #define grep_full_usage "\n\n" \ 306 "Search for PATTERN in FILEs (or stdin)\n" \ 307 "\nOptions:" \ 308 "\n -H Add 'filename:' prefix" \ 309 "\n -h Do not add 'filename:' prefix" \ 310 "\n -n Add 'line_no:' prefix" \ 311 "\n -l Show only names of files that match" \ 312 "\n -L Show only names of files that don't match" \ 313 "\n -c Show only count of matching lines" \ 314 "\n -o Show only the matching part of line" \ 315 "\n -q Quiet. Return 0 if PATTERN is found, 1 otherwise" \ 316 "\n -v Select non-matching lines" \ 317 "\n -s Suppress open and read errors" \ 318 "\n -r Recurse" \ 319 "\n -i Ignore case" \ 320 "\n -w Match whole words only" \ 321 "\n -F PATTERN is a literal (not regexp)" \ 322 IF_FEATURE_GREP_EGREP_ALIAS( \ 323 "\n -E PATTERN is an extended regexp" \ 324 ) \ 325 IF_EXTRA_COMPAT( \ 326 "\n -z Input is NUL terminated" \ 327 ) \ 328 "\n -m N Match up to N times per file" \ 329 IF_FEATURE_GREP_CONTEXT( \ 330 "\n -A N Print N lines of trailing context" \ 331 "\n -B N Print N lines of leading context" \ 332 "\n -C N Same as '-A N -B N'" \ 333 ) \ 334 "\n -e PTRN Pattern to match" \ 335 "\n -f FILE Read pattern from file" \ 336 337 #define grep_example_usage \ 338 "$ grep root /etc/passwd\n" \ 339 "root:x:0:0:root:/root:/bin/bash\n" \ 340 "$ grep ^[rR]oo. /etc/passwd\n" \ 341 "root:x:0:0:root:/root:/bin/bash\n" \ 342 343 #define egrep_trivial_usage NOUSAGE_STR \ 344 345 #define egrep_full_usage "" \ 346 347 #define fgrep_trivial_usage NOUSAGE_STR \ 348 349 #define fgrep_full_usage "" \ 350 351 #define xargs_trivial_usage \ 352 "[OPTIONS] [PROG ARGS]" \ 353 354 #define xargs_full_usage "\n\n" \ 355 "Run PROG on every item given by stdin\n" \ 356 "\nOptions:" \ 357 IF_FEATURE_XARGS_SUPPORT_CONFIRMATION( \ 358 "\n -p Ask user whether to run each command" \ 359 ) \ 360 "\n -r Don't run command if input is empty" \ 361 IF_FEATURE_XARGS_SUPPORT_ZERO_TERM( \ 362 "\n -0 Input is separated by NUL characters" \ 363 ) \ 364 "\n -t Print the command on stderr before execution" \ 365 "\n -e[STR] STR stops input processing" \ 366 "\n -n N Pass no more than N args to PROG" \ 367 "\n -s N Pass command line of no more than N bytes" \ 368 IF_FEATURE_XARGS_SUPPORT_TERMOPT( \ 369 "\n -x Exit if size is exceeded" \ 370 ) \ 371 372 #define xargs_example_usage \ 373 "$ ls | xargs gzip\n" \ 374 "$ find . -name '*.c' -print | xargs rm\n" \ 375 376 #define bootchartd_trivial_usage \ 377 "start [PROG ARGS]|stop|init" \ 378 379 #define bootchartd_full_usage "\n\n" \ 380 "Create /var/log/bootchart.tgz with boot chart data\n" \ 381 "\nOptions:" \ 382 "\nstart: start background logging; with PROG, run PROG, then kill logging with USR1" \ 383 "\nstop: send USR1 to all bootchartd processes" \ 384 "\ninit: start background logging; stop when getty/xdm is seen (for init scripts)" \ 385 "\nUnder PID 1: as init, then exec $bootchart_init, /init, /sbin/init" \ 386 387 #define halt_trivial_usage \ 388 "[-d DELAY] [-n] [-f]" IF_FEATURE_WTMP(" [-w]") \ 389 390 #define halt_full_usage "\n\n" \ 391 "Halt the system\n" \ 392 "\nOptions:" \ 393 "\n -d SEC Delay interval" \ 394 "\n -n Do not sync" \ 395 "\n -f Force (don't go through init)" \ 396 IF_FEATURE_WTMP( \ 397 "\n -w Only write a wtmp record" \ 398 ) \ 399 400 #define poweroff_trivial_usage \ 401 "[-d DELAY] [-n] [-f]" \ 402 403 #define poweroff_full_usage "\n\n" \ 404 "Halt and shut off power\n" \ 405 "\nOptions:" \ 406 "\n -d SEC Delay interval" \ 407 "\n -n Do not sync" \ 408 "\n -f Force (don't go through init)" \ 409 410 #define reboot_trivial_usage \ 411 "[-d DELAY] [-n] [-f]" \ 412 413 #define reboot_full_usage "\n\n" \ 414 "Reboot the system\n" \ 415 "\nOptions:" \ 416 "\n -d SEC Delay interval" \ 417 "\n -n Do not sync" \ 418 "\n -f Force (don't go through init)" \ 419 420 #define linuxrc_trivial_usage NOUSAGE_STR \ 421 422 #define linuxrc_full_usage "" \ 423 424 #define init_trivial_usage \ 425 "" \ 426 427 #define init_full_usage "\n\n" \ 428 "Init is the parent of all processes" \ 429 430 #define init_notes_usage \ 431 "This version of init is designed to be run only by the kernel.\n" \ 432 "\n" \ 433 "BusyBox init doesn't support multiple runlevels. The runlevels field of\n" \ 434 "the /etc/inittab file is completely ignored by BusyBox init. If you want\n" \ 435 "runlevels, use sysvinit.\n" \ 436 "\n" \ 437 "BusyBox init works just fine without an inittab. If no inittab is found,\n" \ 438 "it has the following default behavior:\n" \ 439 "\n" \ 440 " ::sysinit:/etc/init.d/rcS\n" \ 441 " ::askfirst:/bin/sh\n" \ 442 " ::ctrlaltdel:/sbin/reboot\n" \ 443 " ::shutdown:/sbin/swapoff -a\n" \ 444 " ::shutdown:/bin/umount -a -r\n" \ 445 " ::restart:/sbin/init\n" \ 446 "\n" \ 447 "if it detects that /dev/console is _not_ a serial console, it will also run:\n" \ 448 "\n" \ 449 " tty2::askfirst:/bin/sh\n" \ 450 " tty3::askfirst:/bin/sh\n" \ 451 " tty4::askfirst:/bin/sh\n" \ 452 "\n" \ 453 "If you choose to use an /etc/inittab file, the inittab entry format is as follows:\n" \ 454 "\n" \ 455 " <id>:<runlevels>:<action>:<process>\n" \ 456 "\n" \ 457 " <id>:\n" \ 458 "\n" \ 459 " WARNING: This field has a non-traditional meaning for BusyBox init!\n" \ 460 " The id field is used by BusyBox init to specify the controlling tty for\n" \ 461 " the specified process to run on. The contents of this field are\n" \ 462 " appended to \"/dev/\" and used as-is. There is no need for this field to\n" \ 463 " be unique, although if it isn't you may have strange results. If this\n" \ 464 " field is left blank, the controlling tty is set to the console. Also\n" \ 465 " note that if BusyBox detects that a serial console is in use, then only\n" \ 466 " entries whose controlling tty is either the serial console or /dev/null\n" \ 467 " will be run. BusyBox init does nothing with utmp. We don't need no\n" \ 468 " stinkin' utmp.\n" \ 469 "\n" \ 470 " <runlevels>:\n" \ 471 "\n" \ 472 " The runlevels field is completely ignored.\n" \ 473 "\n" \ 474 " <action>:\n" \ 475 "\n" \ 476 " Valid actions include: sysinit, respawn, askfirst, wait,\n" \ 477 " once, restart, ctrlaltdel, and shutdown.\n" \ 478 "\n" \ 479 " The available actions can be classified into two groups: actions\n" \ 480 " that are run only once, and actions that are re-run when the specified\n" \ 481 " process exits.\n" \ 482 "\n" \ 483 " Run only-once actions:\n" \ 484 "\n" \ 485 " 'sysinit' is the first item run on boot. init waits until all\n" \ 486 " sysinit actions are completed before continuing. Following the\n" \ 487 " completion of all sysinit actions, all 'wait' actions are run.\n" \ 488 " 'wait' actions, like 'sysinit' actions, cause init to wait until\n" \ 489 " the specified task completes. 'once' actions are asynchronous,\n" \ 490 " therefore, init does not wait for them to complete. 'restart' is\n" \ 491 " the action taken to restart the init process. By default this should\n" \ 492 " simply run /sbin/init, but can be a script which runs pivot_root or it\n" \ 493 " can do all sorts of other interesting things. The 'ctrlaltdel' init\n" \ 494 " actions are run when the system detects that someone on the system\n" \ 495 " console has pressed the CTRL-ALT-DEL key combination. Typically one\n" \ 496 " wants to run 'reboot' at this point to cause the system to reboot.\n" \ 497 " Finally the 'shutdown' action specifies the actions to taken when\n" \ 498 " init is told to reboot. Unmounting filesystems and disabling swap\n" \ 499 " is a very good here.\n" \ 500 "\n" \ 501 " Run repeatedly actions:\n" \ 502 "\n" \ 503 " 'respawn' actions are run after the 'once' actions. When a process\n" \ 504 " started with a 'respawn' action exits, init automatically restarts\n" \ 505 " it. Unlike sysvinit, BusyBox init does not stop processes from\n" \ 506 " respawning out of control. The 'askfirst' actions acts just like\n" \ 507 " respawn, except that before running the specified process it\n" \ 508 " displays the line \"Please press Enter to activate this console.\"\n" \ 509 " and then waits for the user to press enter before starting the\n" \ 510 " specified process.\n" \ 511 "\n" \ 512 " Unrecognized actions (like initdefault) will cause init to emit an\n" \ 513 " error message, and then go along with its business. All actions are\n" \ 514 " run in the order they appear in /etc/inittab.\n" \ 515 "\n" \ 516 " <process>:\n" \ 517 "\n" \ 518 " Specifies the process to be executed and its command line.\n" \ 519 "\n" \ 520 "Example /etc/inittab file:\n" \ 521 "\n" \ 522 " # This is run first except when booting in single-user mode\n" \ 523 " #\n" \ 524 " ::sysinit:/etc/init.d/rcS\n" \ 525 " \n" \ 526 " # /bin/sh invocations on selected ttys\n" \ 527 " #\n" \ 528 " # Start an \"askfirst\" shell on the console (whatever that may be)\n" \ 529 " ::askfirst:-/bin/sh\n" \ 530 " # Start an \"askfirst\" shell on /dev/tty2-4\n" \ 531 " tty2::askfirst:-/bin/sh\n" \ 532 " tty3::askfirst:-/bin/sh\n" \ 533 " tty4::askfirst:-/bin/sh\n" \ 534 " \n" \ 535 " # /sbin/getty invocations for selected ttys\n" \ 536 " #\n" \ 537 " tty4::respawn:/sbin/getty 38400 tty4\n" \ 538 " tty5::respawn:/sbin/getty 38400 tty5\n" \ 539 " \n" \ 540 " \n" \ 541 " # Example of how to put a getty on a serial line (for a terminal)\n" \ 542 " #\n" \ 543 " #::respawn:/sbin/getty -L ttyS0 9600 vt100\n" \ 544 " #::respawn:/sbin/getty -L ttyS1 9600 vt100\n" \ 545 " #\n" \ 546 " # Example how to put a getty on a modem line\n" \ 547 " #::respawn:/sbin/getty 57600 ttyS2\n" \ 548 " \n" \ 549 " # Stuff to do when restarting the init process\n" \ 550 " ::restart:/sbin/init\n" \ 551 " \n" \ 552 " # Stuff to do before rebooting\n" \ 553 " ::ctrlaltdel:/sbin/reboot\n" \ 554 " ::shutdown:/bin/umount -a -r\n" \ 555 " ::shutdown:/sbin/swapoff -a\n" \ 556 557 #define mesg_trivial_usage \ 558 "[y|n]" \ 559 560 #define mesg_full_usage "\n\n" \ 561 "Control write access to your terminal\n" \ 562 " y Allow write access to your terminal\n" \ 563 " n Disallow write access to your terminal" \ 564 565 #define add_shell_trivial_usage \ 566 "SHELL..." \ 567 568 #define add_shell_full_usage "\n\n" \ 569 "Add SHELLs to /etc/shells" \ 570 571 #define remove_shell_trivial_usage \ 572 "SHELL..." \ 573 574 #define remove_shell_full_usage "\n\n" \ 575 "Remove SHELLs from /etc/shells" \ 576 577 #define conspy_trivial_usage \ 578 "[-vcsndf] [-x COL] [-y LINE] [CONSOLE_NO]" \ 579 580 #define conspy_full_usage "\n\n" \ 581 "A text-mode VNC like program for Linux virtual consoles." \ 582 "\nTo exit, quickly press ESC 3 times." \ 583 "\n" \ 584 "\nOptions:" \ 585 "\n -v Don't send keystrokes to the console" \ 586 "\n -c Create missing devices in /dev" \ 587 "\n -s Open a SHELL session" \ 588 "\n -n Black & white" \ 589 "\n -d Dump console to stdout" \ 590 "\n -f Follow cursor" \ 591 "\n -x COL Starting column" \ 592 "\n -y LINE Starting line" \ 593 594 #define dc_trivial_usage \ 595 "EXPRESSION..." \ 596 597 #define dc_full_usage "\n\n" \ 598 "Tiny RPN calculator. Operations:\n" \ 599 "+, add, -, sub, *, mul, /, div, %, mod, **, exp, and, or, not, eor,\n" \ 600 "p - print top of the stack (without popping),\n" \ 601 "f - print entire stack,\n" \ 602 "o - pop the value and set output radix (must be 10, 16, 8 or 2).\n" \ 603 "Examples: 'dc 2 2 add' -> 4, 'dc 8 8 * 2 2 + /' -> 16" \ 604 605 #define dc_example_usage \ 606 "$ dc 2 2 + p\n" \ 607 "4\n" \ 608 "$ dc 8 8 \\* 2 2 + / p\n" \ 609 "16\n" \ 610 "$ dc 0 1 and p\n" \ 611 "0\n" \ 612 "$ dc 0 1 or p\n" \ 613 "1\n" \ 614 "$ echo 72 9 div 8 mul p | dc\n" \ 615 "64\n" \ 616 617 #define nandwrite_trivial_usage \ 618 "[-p] [-s ADDR] MTD_DEVICE [FILE]" \ 619 620 #define nandwrite_full_usage "\n\n" \ 621 "Write to the specified MTD device\n" \ 622 "\nOptions:" \ 623 "\n -p Pad to page size" \ 624 "\n -s ADDR Start address" \ 625 626 #define nanddump_trivial_usage \ 627 "[-o] [-b] [-s ADDR] [-f FILE] MTD_DEVICE" \ 628 629 #define nanddump_full_usage "\n\n" \ 630 "Dump the sepcified MTD device\n" \ 631 "\nOptions:" \ 632 "\n -o Omit oob data" \ 633 "\n -b Omit bad block from the dump" \ 634 "\n -s ADDR Start address" \ 635 "\n -l LEN Length" \ 636 "\n -f FILE Dump to file ('-' for stdout)" \ 637 638 #define ubiattach_trivial_usage \ 639 "-m MTD_NUM [-d UBI_NUM] UBI_CTRL_DEV" \ 640 641 #define ubiattach_full_usage "\n\n" \ 642 "Attach MTD device to UBI\n" \ 643 "\nOptions:" \ 644 "\n -m MTD_NUM MTD device number to attach" \ 645 "\n -d UBI_NUM UBI device number to assign" \ 646 647 #define ubidetach_trivial_usage \ 648 "-d UBI_NUM UBI_CTRL_DEV" \ 649 650 #define ubidetach_full_usage "\n\n" \ 651 "Detach MTD device from UBI\n" \ 652 "\nOptions:" \ 653 "\n -d UBI_NUM UBI device number" \ 654 655 #if !ENABLE_MODPROBE_SMALL \ 656 657 #define depmod_trivial_usage NOUSAGE_STR \ 658 659 #define depmod_full_usage "" \ 660 661 #endif \ 662 663 #if !ENABLE_MODPROBE_SMALL \ 664 665 #define insmod_trivial_usage \ 666 IF_FEATURE_2_4_MODULES("[OPTIONS] MODULE ") \ 667 IF_NOT_FEATURE_2_4_MODULES("FILE ") \ 668 "[SYMBOL=VALUE]..." \ 669 670 #define insmod_full_usage "\n\n" \ 671 "Load the specified kernel modules into the kernel" \ 672 IF_FEATURE_2_4_MODULES( "\n" \ 673 "\nOptions:" \ 674 "\n -f Force module to load into the wrong kernel version" \ 675 "\n -k Make module autoclean-able" \ 676 "\n -v Verbose" \ 677 "\n -q Quiet" \ 678 "\n -L Lock: prevent simultaneous loads" \ 679 IF_FEATURE_INSMOD_LOAD_MAP( \ 680 "\n -m Output load map to stdout" \ 681 ) \ 682 "\n -x Don't export externs" \ 683 ) \ 684 685 #endif \ 686 687 #if !ENABLE_MODPROBE_SMALL \ 688 689 #define lsmod_trivial_usage \ 690 "" \ 691 692 #define lsmod_full_usage "\n\n" \ 693 "List the currently loaded kernel modules" \ 694 695 #endif \ 696 697 #define modinfo_trivial_usage \ 698 "[-adlp0] [-F keyword] MODULE" \ 699 700 #define modinfo_full_usage "\n\n" \ 701 "Options:" \ 702 "\n -a Shortcut for '-F author'" \ 703 "\n -d Shortcut for '-F description'" \ 704 "\n -l Shortcut for '-F license'" \ 705 "\n -p Shortcut for '-F parm'" \ 706 "\n -F keyword Keyword to look for" \ 707 "\n -0 Separate output with NULs" \ 708 709 #define modinfo_example_usage \ 710 "$ modinfo -F vermagic loop\n" \ 711 712 #if !ENABLE_MODPROBE_SMALL \ 713 714 #define modprobe_notes_usage \ 715 "modprobe can (un)load a stack of modules, passing each module options (when\n" \ 716 "loading). modprobe uses a configuration file to determine what option(s) to\n" \ 717 "pass each module it loads.\n" \ 718 "\n" \ 719 "The configuration file is searched (in this order):\n" \ 720 "\n" \ 721 " /etc/modprobe.conf (2.6 only)\n" \ 722 " /etc/modules.conf\n" \ 723 " /etc/conf.modules (deprecated)\n" \ 724 "\n" \ 725 "They all have the same syntax (see below). If none is present, it is\n" \ 726 "_not_ an error; each loaded module is then expected to load without\n" \ 727 "options. Once a file is found, the others are tested for.\n" \ 728 "\n" \ 729 "/etc/modules.conf entry format:\n" \ 730 "\n" \ 731 " alias <alias_name> <mod_name>\n" \ 732 " Makes it possible to modprobe alias_name, when there is no such module.\n" \ 733 " It makes sense if your mod_name is long, or you want a more representative\n" \ 734 " name for that module (eg. 'scsi' in place of 'aha7xxx').\n" \ 735 " This makes it also possible to use a different set of options (below) for\n" \ 736 " the module and the alias.\n" \ 737 " A module can be aliased more than once.\n" \ 738 "\n" \ 739 " options <mod_name|alias_name> <symbol=value...>\n" \ 740 " When loading module mod_name (or the module aliased by alias_name), pass\n" \ 741 " the \"symbol=value\" pairs as option to that module.\n" \ 742 "\n" \ 743 "Sample /etc/modules.conf file:\n" \ 744 "\n" \ 745 " options tulip irq=3\n" \ 746 " alias tulip tulip2\n" \ 747 " options tulip2 irq=4 io=0x308\n" \ 748 "\n" \ 749 "Other functionality offered by 'classic' modprobe is not available in\n" \ 750 "this implementation.\n" \ 751 "\n" \ 752 "If module options are present both in the config file, and on the command line,\n" \ 753 "then the options from the command line will be passed to the module _after_\n" \ 754 "the options from the config file. That way, you can have defaults in the config\n" \ 755 "file, and override them for a specific usage from the command line.\n" \ 756 757 #define modprobe_example_usage \ 758 "(with the above /etc/modules.conf):\n\n" \ 759 "$ modprobe tulip\n" \ 760 " will load the module 'tulip' with default option 'irq=3'\n\n" \ 761 "$ modprobe tulip irq=5\n" \ 762 " will load the module 'tulip' with option 'irq=5', thus overriding the default\n\n" \ 763 "$ modprobe tulip2\n" \ 764 " will load the module 'tulip' with default options 'irq=4 io=0x308',\n" \ 765 " which are the default for alias 'tulip2'\n\n" \ 766 "$ modprobe tulip2 irq=8\n" \ 767 " will load the module 'tulip' with default options 'irq=4 io=0x308 irq=8',\n" \ 768 " which are the default for alias 'tulip2' overridden by the option 'irq=8'\n\n" \ 769 " from the command line\n\n" \ 770 "$ modprobe tulip2 irq=2 io=0x210\n" \ 771 " will load the module 'tulip' with default options 'irq=4 io=0x308 irq=4 io=0x210',\n" \ 772 " which are the default for alias 'tulip2' overridden by the options 'irq=2 io=0x210'\n\n" \ 773 " from the command line\n" \ 774 775 #define modprobe_trivial_usage \ 776 "[-alrqvs" \ 777 IF_FEATURE_MODPROBE_BLACKLIST("b") \ 778 "] MODULE [symbol=value]..." \ 779 780 #define modprobe_full_usage "\n\n" \ 781 "Options:" \ 782 "\n -a Load multiple MODULEs" \ 783 "\n -l List (MODULE is a pattern)" \ 784 "\n -r Remove MODULE (stacks) or do autoclean" \ 785 "\n -q Quiet" \ 786 "\n -v Verbose" \ 787 "\n -s Log to syslog" \ 788 IF_FEATURE_MODPROBE_BLACKLIST( \ 789 "\n -b Apply blacklist to module names too" \ 790 ) \ 791 792 #endif /* !ENABLE_MODPROBE_SMALL */ \ 793 794 #if ENABLE_MODPROBE_SMALL \ 795 796 #define depmod_trivial_usage NOUSAGE_STR \ 797 798 #define depmod_full_usage "" \ 799 800 #define lsmod_trivial_usage \ 801 "" \ 802 803 #define lsmod_full_usage "\n\n" \ 804 "List the currently loaded kernel modules" \ 805 806 #define insmod_trivial_usage \ 807 IF_FEATURE_2_4_MODULES("[OPTIONS] MODULE ") \ 808 IF_NOT_FEATURE_2_4_MODULES("FILE ") \ 809 "[SYMBOL=VALUE]..." \ 810 811 #define insmod_full_usage "\n\n" \ 812 "Load the specified kernel modules into the kernel" \ 813 IF_FEATURE_2_4_MODULES( "\n" \ 814 "\nOptions:" \ 815 "\n -f Force module to load into the wrong kernel version" \ 816 "\n -k Make module autoclean-able" \ 817 "\n -v Verbose" \ 818 "\n -q Quiet" \ 819 "\n -L Lock: prevent simultaneous loads" \ 820 IF_FEATURE_INSMOD_LOAD_MAP( \ 821 "\n -m Output load map to stdout" \ 822 ) \ 823 "\n -x Don't export externs" \ 824 ) \ 825 826 #define rmmod_trivial_usage \ 827 "[-wfa] [MODULE]..." \ 828 829 #define rmmod_full_usage "\n\n" \ 830 "Unload kernel modules\n" \ 831 "\nOptions:" \ 832 "\n -w Wait until the module is no longer used" \ 833 "\n -f Force unload" \ 834 "\n -a Remove all unused modules (recursively)" \ 835 836 #define rmmod_example_usage \ 837 "$ rmmod tulip\n" \ 838 839 #define modprobe_trivial_usage \ 840 "[-qfwrsv] MODULE [symbol=value]..." \ 841 842 #define modprobe_full_usage "\n\n" \ 843 "Options:" \ 844 "\n -r Remove MODULE (stacks) or do autoclean" \ 845 "\n -q Quiet" \ 846 "\n -v Verbose" \ 847 "\n -f Force" \ 848 "\n -w Wait for unload" \ 849 "\n -s Report via syslog instead of stderr" \ 850 851 #endif \ 852 853 #if !ENABLE_MODPROBE_SMALL \ 854 855 #define rmmod_trivial_usage \ 856 "[-wfa] [MODULE]..." \ 857 858 #define rmmod_full_usage "\n\n" \ 859 "Unload kernel modules\n" \ 860 "\nOptions:" \ 861 "\n -w Wait until the module is no longer used" \ 862 "\n -f Force unload" \ 863 "\n -a Remove all unused modules (recursively)" \ 864 865 #define rmmod_example_usage \ 866 "$ rmmod tulip\n" \ 867 868 #endif \ 869 870 #define nbdclient_trivial_usage \ 871 "HOST PORT BLOCKDEV" \ 872 873 #define nbdclient_full_usage "\n\n" \ 874 "Connect to HOST and provide a network block device on BLOCKDEV" \ 875 876 #if ENABLE_NC_110_COMPAT \ 877 878 #define nc_trivial_usage \ 879 "[OPTIONS] HOST PORT - connect" \ 880 IF_NC_SERVER("\n" \ 881 "nc [OPTIONS] -l -p PORT [HOST] [PORT] - listen" \ 882 ) \ 883 884 #define nc_full_usage "\n\n" \ 885 "Options:" \ 886 "\n -e PROG Run PROG after connect (must be last)" \ 887 IF_NC_SERVER( \ 888 "\n -l Listen mode, for inbound connects" \ 889 ) \ 890 "\n -p PORT Local port" \ 891 "\n -s ADDR Local address" \ 892 "\n -w SEC Timeout for connects and final net reads" \ 893 IF_NC_EXTRA( \ 894 "\n -i SEC Delay interval for lines sent" /* ", ports scanned" */ \ 895 ) \ 896 "\n -n Don't do DNS resolution" \ 897 "\n -u UDP mode" \ 898 "\n -v Verbose" \ 899 IF_NC_EXTRA( \ 900 "\n -o FILE Hex dump traffic" \ 901 "\n -z Zero-I/O mode (scanning)" \ 902 ) \ 903 904 #endif \ 905 906 #if !ENABLE_NC_110_COMPAT \ 907 908 #if ENABLE_NC_SERVER || ENABLE_NC_EXTRA \ 909 910 #define NC_OPTIONS_STR "\n\nOptions:" \ 911 912 #else \ 913 914 #define NC_OPTIONS_STR \ 915 916 #endif \ 917 918 #define nc_trivial_usage \ 919 IF_NC_EXTRA("[-iN] [-wN] ")IF_NC_SERVER("[-l] [-p PORT] ") \ 920 "["IF_NC_EXTRA("-f FILE|")"IPADDR PORT]"IF_NC_EXTRA(" [-e PROG]") \ 921 922 #define nc_full_usage "\n\n" \ 923 "Open a pipe to IP:PORT" IF_NC_EXTRA(" or FILE") \ 924 NC_OPTIONS_STR \ 925 IF_NC_EXTRA( \ 926 "\n -e PROG Run PROG after connect" \ 927 IF_NC_SERVER( \ 928 "\n -l Listen mode, for inbound connects" \ 929 IF_NC_EXTRA( \ 930 "\n (use -l twice with -e for persistent server)") \ 931 "\n -p PORT Local port" \ 932 ) \ 933 "\n -w SEC Timeout for connect" \ 934 "\n -i SEC Delay interval for lines sent" \ 935 "\n -f FILE Use file (ala /dev/ttyS0) instead of network" \ 936 ) \ 937 938 #define nc_notes_usage "" \ 939 IF_NC_EXTRA( \ 940 "To use netcat as a terminal emulator on a serial port:\n\n" \ 941 "$ stty 115200 -F /dev/ttyS0\n" \ 942 "$ stty raw -echo -ctlecho && nc -f /dev/ttyS0\n" \ 943 ) \ 944 945 #define nc_example_usage \ 946 "$ nc foobar.somedomain.com 25\n" \ 947 "220 foobar ESMTP Exim 3.12 #1 Sat, 15 Apr 2000 00:03:02 -0600\n" \ 948 "help\n" \ 949 "214-Commands supported:\n" \ 950 "214- HELO EHLO MAIL RCPT DATA AUTH\n" \ 951 "214 NOOP QUIT RSET HELP\n" \ 952 "quit\n" \ 953 "221 foobar closing connection\n" \ 954 955 #endif \ 956 957 #define netstat_trivial_usage \ 958 "[-"IF_ROUTE("r")"al] [-tuwx] [-en"IF_FEATURE_NETSTAT_WIDE("W")IF_FEATURE_NETSTAT_PRG("p")"]" \ 959 960 #define netstat_full_usage "\n\n" \ 961 "Display networking information\n" \ 962 "\nOptions:" \ 963 IF_ROUTE( \ 964 "\n -r Routing table" \ 965 ) \ 966 "\n -a All sockets" \ 967 "\n -l Listening sockets" \ 968 "\n Else: connected sockets" \ 969 "\n -t TCP sockets" \ 970 "\n -u UDP sockets" \ 971 "\n -w Raw sockets" \ 972 "\n -x Unix sockets" \ 973 "\n Else: all socket types" \ 974 "\n -e Other/more information" \ 975 "\n -n Don't resolve names" \ 976 IF_FEATURE_NETSTAT_WIDE( \ 977 "\n -W Wide display" \ 978 ) \ 979 IF_FEATURE_NETSTAT_PRG( \ 980 "\n -p Show PID/program name for sockets" \ 981 ) \ 982 983 #define iostat_trivial_usage \ 984 "[-c] [-d] [-t] [-z] [-k|-m] [ALL|BLOCKDEV...] [INTERVAL [COUNT]]" \ 985 986 #define iostat_full_usage "\n\n" \ 987 "Report CPU and I/O statistics\n" \ 988 "\nOptions:" \ 989 "\n -c Show CPU utilization" \ 990 "\n -d Show device utilization" \ 991 "\n -t Print current time" \ 992 "\n -z Omit devices with no activity" \ 993 "\n -k Use kb/s" \ 994 "\n -m Use Mb/s" \ 995 996 #define mpstat_trivial_usage \ 997 "[-A] [-I SUM|CPU|ALL|SCPU] [-u] [-P num|ALL] [INTERVAL [COUNT]]" \ 998 999 #define mpstat_full_usage "\n\n" \ 1000 "Per-processor statistics\n" \ 1001 "\nOptions:" \ 1002 "\n -A Same as -I ALL -u -P ALL" \ 1003 "\n -I SUM|CPU|ALL|SCPU Report interrupt statistics" \ 1004 "\n -P num|ALL Processor to monitor" \ 1005 "\n -u Report CPU utilization" \ 1006 1007 #define pmap_trivial_usage \ 1008 "[-x][-q] PID" \ 1009 1010 #define pmap_full_usage "\n\n" \ 1011 "Display detailed precesses' memory usage\n" \ 1012 "\nOptions:" \ 1013 "\n -x show details" \ 1014 "\n -q quiet" \ 1015 1016 #define powertop_trivial_usage \ 1017 "" \ 1018 1019 #define powertop_full_usage "\n\n" \ 1020 "Analyze power consumption on Intel-based laptops\n" \ 1021 1022 #define smemcap_trivial_usage ">SMEMDATA.TAR" \ 1023 1024 #define smemcap_full_usage "\n\n" \ 1025 "Collect memory usage data in /proc and write it to stdout" \ 1026 1027 #define ash_trivial_usage NOUSAGE_STR \ 1028 1029 #define ash_full_usage "" \ 1030 1031 #define sh_trivial_usage NOUSAGE_STR \ 1032 1033 #define sh_full_usage "" \ 1034 1035 #define bash_trivial_usage NOUSAGE_STR \ 1036 1037 #define bash_full_usage "" \ 1038 1039 #define cttyhack_trivial_usage \ 1040 "PROG ARGS" \ 1041 1042 #define cttyhack_full_usage "\n\n" \ 1043 "Give PROG a controlling tty if possible." \ 1044 "\nExample for /etc/inittab (for busybox init):" \ 1045 "\n ::respawn:/bin/cttyhack /bin/sh" \ 1046 "\nGiving controlling tty to shell running with PID 1:" \ 1047 "\n $ exec cttyhack sh" \ 1048 "\nStarting interactive shell from boot shell script:" \ 1049 "\n setsid cttyhack sh" \ 1050 1051 #define hush_trivial_usage NOUSAGE_STR \ 1052 1053 #define hush_full_usage "" \ 1054 1055 #define msh_trivial_usage NOUSAGE_STR \ 1056 1057 #define msh_full_usage "" \ 1058 1059 #define sh_trivial_usage NOUSAGE_STR \ 1060 1061 #define sh_full_usage "" \ 1062 1063 #define bash_trivial_usage NOUSAGE_STR \ 1064 1065 #define bash_full_usage "" \ 1066 1067 #define blockdev_trivial_usage \ 1068 "OPTION BLOCKDEV" \ 1069 1070 #define blockdev_full_usage "\n\n" \ 1071 "Options:" \ 1072 "\n --setro Set ro" \ 1073 "\n --setrw Set rw" \ 1074 "\n --getro Get ro" \ 1075 "\n --getss Get sector size" \ 1076 "\n --getbsz Get block size" \ 1077 "\n --setbsz BYTES Set block size" \ 1078 "\n --getsize Get device size in 512-byte sectors" \ 1079 "\n --getsize64 Get device size in bytes" \ 1080 "\n --flushbufs Flush buffers" \ 1081 "\n --rereadpt Reread partition table" \ 1082 1083 #define rev_trivial_usage \ 1084 "[FILE]..." \ 1085 1086 #define rev_full_usage "\n\n" \ 1087 "Reverse lines of FILE" \ 1088 1089 #if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 1 \ 1090 1091 # define IF_UDHCP_VERBOSE(...) __VA_ARGS__ \ 1092 1093 #else \ 1094 1095 # define IF_UDHCP_VERBOSE(...) \ 1096 1097 #endif \ 1098 1099 #define udhcpc_trivial_usage \ 1100 "[-fbnq"IF_UDHCP_VERBOSE("v")"oCR] [-i IFACE] [-r IP] [-s PROG] [-p PIDFILE]\n" \ 1101 " [-H HOSTNAME] [-V VENDOR] [-x OPT:VAL]... [-O OPT]..." IF_FEATURE_UDHCP_PORT(" [-P N]") \ 1102 1103 #define udhcpc_full_usage "\n" \ 1104 IF_LONG_OPTS( \ 1105 "\n -i,--interface IFACE Interface to use (default eth0)" \ 1106 "\n -p,--pidfile FILE Create pidfile" \ 1107 "\n -s,--script PROG Run PROG at DHCP events (default "CONFIG_UDHCPC_DEFAULT_SCRIPT")" \ 1108 "\n -t,--retries N Send up to N discover packets" \ 1109 "\n -T,--timeout N Pause between packets (default 3 seconds)" \ 1110 "\n -A,--tryagain N Wait N seconds after failure (default 20)" \ 1111 "\n -f,--foreground Run in foreground" \ 1112 USE_FOR_MMU( \ 1113 "\n -b,--background Background if lease is not obtained" \ 1114 ) \ 1115 "\n -n,--now Exit if lease is not obtained" \ 1116 "\n -q,--quit Exit after obtaining lease" \ 1117 "\n -R,--release Release IP on exit" \ 1118 "\n -S,--syslog Log to syslog too" \ 1119 IF_FEATURE_UDHCP_PORT( \ 1120 "\n -P,--client-port N Use port N (default 68)" \ 1121 ) \ 1122 IF_FEATURE_UDHCPC_ARPING( \ 1123 "\n -a,--arping Use arping to validate offered address" \ 1124 ) \ 1125 "\n -O,--request-option OPT Request option OPT from server (cumulative)" \ 1126 "\n -o,--no-default-options Don't request any options (unless -O is given)" \ 1127 "\n -r,--request IP Request this IP address" \ 1128 "\n -x OPT:VAL Include option OPT in sent packets (cumulative)" \ 1129 "\n Examples of string, numeric, and hex byte opts:" \ 1130 "\n -x hostname:bbox - option 12" \ 1131 "\n -x lease:3600 - option 51 (lease time)" \ 1132 "\n -x 0x3d:0100BEEFC0FFEE - option 61 (client id)" \ 1133 "\n -F,--fqdn NAME Ask server to update DNS mapping for NAME" \ 1134 "\n -H,-h,--hostname NAME Send NAME as client hostname (default none)" \ 1135 "\n -V,--vendorclass VENDOR Vendor identifier (default 'udhcp VERSION')" \ 1136 "\n -C,--clientid-none Don't send MAC as client identifier" \ 1137 IF_UDHCP_VERBOSE( \ 1138 "\n -v Verbose" \ 1139 ) \ 1140 ) \ 1141 IF_NOT_LONG_OPTS( \ 1142 "\n -i IFACE Interface to use (default eth0)" \ 1143 "\n -p FILE Create pidfile" \ 1144 "\n -s PROG Run PROG at DHCP events (default "CONFIG_UDHCPC_DEFAULT_SCRIPT")" \ 1145 "\n -t N Send up to N discover packets" \ 1146 "\n -T N Pause between packets (default 3 seconds)" \ 1147 "\n -A N Wait N seconds (default 20) after failure" \ 1148 "\n -f Run in foreground" \ 1149 USE_FOR_MMU( \ 1150 "\n -b Background if lease is not obtained" \ 1151 ) \ 1152 "\n -n Exit if lease is not obtained" \ 1153 "\n -q Exit after obtaining lease" \ 1154 "\n -R Release IP on exit" \ 1155 "\n -S Log to syslog too" \ 1156 IF_FEATURE_UDHCP_PORT( \ 1157 "\n -P N Use port N (default 68)" \ 1158 ) \ 1159 IF_FEATURE_UDHCPC_ARPING( \ 1160 "\n -a Use arping to validate offered address" \ 1161 ) \ 1162 "\n -O OPT Request option OPT from server (cumulative)" \ 1163 "\n -o Don't request any options (unless -O is given)" \ 1164 "\n -r IP Request this IP address" \ 1165 "\n -x OPT:VAL Include option OPT in sent packets (cumulative)" \ 1166 "\n Examples of string, numeric, and hex byte opts:" \ 1167 "\n -x hostname:bbox - option 12" \ 1168 "\n -x lease:3600 - option 51 (lease time)" \ 1169 "\n -x 0x3d:0100BEEFC0FFEE - option 61 (client id)" \ 1170 "\n -F NAME Ask server to update DNS mapping for NAME" \ 1171 "\n -H,-h NAME Send NAME as client hostname (default none)" \ 1172 "\n -V VENDOR Vendor identifier (default 'udhcp VERSION')" \ 1173 "\n -C Don't send MAC as client identifier" \ 1174 IF_UDHCP_VERBOSE( \ 1175 "\n -v Verbose" \ 1176 ) \ 1177 ) \ 1178 1179 #define acpid_trivial_usage \ 1180 "[-d] [-c CONFDIR] [-l LOGFILE] [-a ACTIONFILE] [-M MAPFILE] [-e PROC_EVENT_FILE] [-p PIDFILE]" 1181 #define acpid_full_usage "\n\n" \ 1182 "Listen to ACPI events and spawn specific helpers on event arrival\n" \ 1183 "\nOptions:" \ 1184 "\n -c DIR Config directory [/etc/acpi]" \ 1185 "\n -d Don't daemonize, (implies -f)" \ 1186 "\n -e FILE /proc event file [/proc/acpi/event]" \ 1187 "\n -f Run in foreground" \ 1188 "\n -l FILE Log file [/var/log/acpid.log]" \ 1189 "\n -p FILE Pid file [/var/run/acpid.pid]" \ 1190 "\n -a FILE Action file [/etc/acpid.conf]" \ 1191 "\n -M FILE Map file [/etc/acpi.map]" \ 1192 IF_FEATURE_ACPID_COMPAT( \ 1193 "\n\nAccept and ignore compatibility options -g -m -s -S -v" \ 1194 ) 1195 1196 #define acpid_example_usage \ 1197 "Without -e option, acpid uses all /dev/input/event* files\n" \ 1198 "# acpid\n" \ 1199 "# acpid -l /var/log/my-acpi-log\n" \ 1200 "# acpid -e /proc/acpi/event\n" 13 1201 14 1202 #define addgroup_trivial_usage \ 15 "[-g GID]"USE_FEATURE_ADDUSER_TO_GROUP(" [user_name]")" group_name" 16 #define addgroup_full_usage \ 17 "Add a group to the system"USE_FEATURE_ADDUSER_TO_GROUP(" or add an user to a group") \ 18 "\n\nOptions:\n" \ 19 " -g GID Specify gid" 1203 "[-g GID] " IF_FEATURE_ADDUSER_TO_GROUP("[USER] ") "GROUP" 1204 #define addgroup_full_usage "\n\n" \ 1205 "Add a group " IF_FEATURE_ADDUSER_TO_GROUP("or add a user to a group") "\n" \ 1206 "\nOptions:" \ 1207 "\n -g GID Group id" \ 1208 "\n -S Create a system group" \ 20 1209 21 1210 #define adduser_trivial_usage \ 22 "[OPTIONS] user_name" 23 #define adduser_full_usage \ 24 "Add a user to the system" \ 25 "\n\nOptions:\n" \ 26 " -h DIR Home directory\n" \ 27 " -g GECOS GECOS field\n" \ 28 " -s SHELL Login shell\n" \ 29 " -G GROUP Add user to existing group\n" \ 30 " -S Create a system user (ignored)\n" \ 31 " -D Do not assign a password (logins still possible via ssh)\n" \ 32 " -H Do not create home directory" 1211 "[OPTIONS] USER" 1212 #define adduser_full_usage "\n\n" \ 1213 "Add a user\n" \ 1214 "\nOptions:" \ 1215 "\n -h DIR Home directory" \ 1216 "\n -g GECOS GECOS field" \ 1217 "\n -s SHELL Login shell" \ 1218 "\n -G GRP Add user to existing group" \ 1219 "\n -S Create a system user" \ 1220 "\n -D Don't assign a password" \ 1221 "\n -H Don't create home directory" \ 1222 "\n -u UID User id" \ 33 1223 34 1224 #define adjtimex_trivial_usage \ 35 "[-q] [-o offset] [-f frequency] [-p timeconstant] [-t tick]" 36 #define adjtimex_full_usage \ 37 "Read and optionally set system timebase parameters.\n" \ 38 "See adjtimex(2)." \ 39 "\n\nOptions:\n" \ 40 " -q Quiet\n" \ 41 " -o offset Time offset, microseconds\n" \ 42 " -f frequency Frequency adjust, integer kernel units (65536 is 1ppm)\n" \ 43 " (positive values make the system clock run faster)\n" \ 44 " -t tick Microseconds per tick, usually 10000\n" \ 45 " -p timeconstant" 1225 "[-q] [-o OFF] [-f FREQ] [-p TCONST] [-t TICK]" 1226 #define adjtimex_full_usage "\n\n" \ 1227 "Read and optionally set system timebase parameters. See adjtimex(2)\n" \ 1228 "\nOptions:" \ 1229 "\n -q Quiet" \ 1230 "\n -o OFF Time offset, microseconds" \ 1231 "\n -f FREQ Frequency adjust, integer kernel units (65536 is 1ppm)" \ 1232 "\n (positive values make clock run faster)" \ 1233 "\n -t TICK Microseconds per tick, usually 10000" \ 1234 "\n -p TCONST" \ 46 1235 47 1236 #define ar_trivial_usage \ 48 1237 "[-o] [-v] [-p] [-t] [-x] ARCHIVE FILES" 49 #define ar_full_usage \50 "Extract or list FILES from an ar archive " \51 "\n\nOptions:\n" \52 " -o Preserve original dates\n" \53 " -p Extract to stdout\n" \54 " -t List\n" \55 " -x Extract\n" \56 " -v Verbose"1238 #define ar_full_usage "\n\n" \ 1239 "Extract or list FILES from an ar archive\n" \ 1240 "\nOptions:" \ 1241 "\n -o Preserve original dates" \ 1242 "\n -p Extract to stdout" \ 1243 "\n -t List" \ 1244 "\n -x Extract" \ 1245 "\n -v Verbose" \ 57 1246 58 1247 #define arp_trivial_usage \ 59 "\n" \ 60 "[-vn] [-H type] [-i if] -a [hostname]\n" \ 61 "[-v] [-i if] -d hostname [pub]\n" \ 62 "[-v] [-H type] [-i if] -s hostname hw_addr [temp]\n" \ 63 "[-v] [-H type] [-i if] -s hostname hw_addr [netmask nm] pub\n" \ 64 "[-v] [-H type] [-i if] -Ds hostname ifa [netmask nm] pub\n" 65 #define arp_full_usage \ 66 "Manipulate the system ARP cache" \ 67 "\n\nOptions:" \ 1248 "\n[-vn] [-H HWTYPE] [-i IF] -a [HOSTNAME]" \ 1249 "\n[-v] [-i IF] -d HOSTNAME [pub]" \ 1250 "\n[-v] [-H HWTYPE] [-i IF] -s HOSTNAME HWADDR [temp]" \ 1251 "\n[-v] [-H HWTYPE] [-i IF] -s HOSTNAME HWADDR [netmask MASK] pub" \ 1252 "\n[-v] [-H HWTYPE] [-i IF] -Ds HOSTNAME IFACE [netmask MASK] pub" 1253 #define arp_full_usage "\n\n" \ 1254 "Manipulate ARP cache\n" \ 1255 "\nOptions:" \ 68 1256 "\n -a Display (all) hosts" \ 69 "\n -s Set anew ARP entry" \1257 "\n -s Set new ARP entry" \ 70 1258 "\n -d Delete a specified entry" \ 71 1259 "\n -v Verbose" \ 72 1260 "\n -n Don't resolve names" \ 73 "\n -i if Specify network interface (e.g. eth0)" \1261 "\n -i IF Network interface" \ 74 1262 "\n -D Read <hwaddr> from given device" \ 75 "\n -A, -p Specify protocol family" \76 "\n -H hwtype Specify hardware address type"1263 "\n -A,-p AF Protocol family" \ 1264 "\n -H HWTYPE Hardware address type" \ 77 1265 78 1266 #define arping_trivial_usage \ 79 "[-fqbDUA] [-c count] [-w timeout] [-i device] [-s sender] target" 80 #define arping_full_usage \ 81 "Ping hosts by ARP requests/replies" \ 82 "\n\nOptions:\n" \ 83 " -f Quit on first ARP reply\n" \ 84 " -q Quiet\n" \ 85 " -b Keep broadcasting, don't go unicast\n" \ 86 " -D Duplicated address detection mode\n" \ 87 " -U Unsolicited ARP mode, update your neighbours\n" \ 88 " -A ARP answer mode, update your neighbours\n" \ 89 " -c count Stop after sending count ARP request packets\n" \ 90 " -w timeout Time to wait for ARP reply, in seconds\n" \ 91 " -I device Outgoing interface name, default is eth0\n" \ 92 " -s sender Set specific sender IP address\n" \ 93 " target Target IP address of ARP request" 94 95 #define ash_trivial_usage \ 96 "[FILE]...\n" \ 97 "or: ash -c command [args]..." 98 #define ash_full_usage \ 99 "The ash shell (command interpreter)" 1267 "[-fqbDUA] [-c CNT] [-w TIMEOUT] [-I IFACE] [-s SRC_IP] DST_IP" 1268 #define arping_full_usage "\n\n" \ 1269 "Send ARP requests/replies\n" \ 1270 "\nOptions:" \ 1271 "\n -f Quit on first ARP reply" \ 1272 "\n -q Quiet" \ 1273 "\n -b Keep broadcasting, don't go unicast" \ 1274 "\n -D Duplicated address detection mode" \ 1275 "\n -U Unsolicited ARP mode, update your neighbors" \ 1276 "\n -A ARP answer mode, update your neighbors" \ 1277 "\n -c N Stop after sending N ARP requests" \ 1278 "\n -w TIMEOUT Time to wait for ARP reply, seconds" \ 1279 "\n -I IFACE Interface to use (default eth0)" \ 1280 "\n -s SRC_IP Sender IP address" \ 1281 "\n DST_IP Target IP address" \ 100 1282 101 1283 #define awk_trivial_usage \ 102 "[OPTION ]... [program-text] [FILE ...]"103 #define awk_full_usage \104 "Options: \n" \105 " -v var=val Set variable\n" \106 " -F sep Use 'sep' as field separator\n" \107 " -f filename Read program from file"1284 "[OPTIONS] [AWK_PROGRAM] [FILE]..." 1285 #define awk_full_usage "\n\n" \ 1286 "Options:" \ 1287 "\n -v VAR=VAL Set variable" \ 1288 "\n -F SEP Use SEP as field separator" \ 1289 "\n -f FILE Read program from FILE" \ 108 1290 109 1291 #define basename_trivial_usage \ 110 1292 "FILE [SUFFIX]" 111 #define basename_full_usage \ 112 "Strip directory path and suffixes from FILE.\n" \ 113 "If specified, also remove any trailing SUFFIX." 1293 #define basename_full_usage "\n\n" \ 1294 "Strip directory path and .SUFFIX from FILE\n" 114 1295 #define basename_example_usage \ 115 1296 "$ basename /usr/local/bin/foo\n" \ … … 120 1301 "bar" 121 1302 122 #define bunzip2_trivial_usage \ 123 "[OPTION]... [FILE]" 124 #define bunzip2_full_usage \ 125 "Uncompress FILE (or standard input if FILE is '-' or omitted)" \ 126 "\n\nOptions:\n" \ 127 " -c Write output to standard output\n" \ 128 " -f Force" 1303 #define beep_trivial_usage \ 1304 "-f FREQ -l LEN -d DELAY -r COUNT -n" 1305 #define beep_full_usage "\n\n" \ 1306 "Options:" \ 1307 "\n -f Frequency in Hz" \ 1308 "\n -l Length in ms" \ 1309 "\n -d Delay in ms" \ 1310 "\n -r Repetitions" \ 1311 "\n -n Start new tone" \ 1312 1313 #define blkid_trivial_usage \ 1314 "" 1315 #define blkid_full_usage "\n\n" \ 1316 "Print UUIDs of all filesystems" 1317 1318 #define brctl_trivial_usage \ 1319 "COMMAND [BRIDGE [INTERFACE]]" 1320 #define brctl_full_usage "\n\n" \ 1321 "Manage ethernet bridges\n" \ 1322 "\nCommands:" \ 1323 IF_FEATURE_BRCTL_SHOW( \ 1324 "\n show Show a list of bridges" \ 1325 ) \ 1326 "\n addbr BRIDGE Create BRIDGE" \ 1327 "\n delbr BRIDGE Delete BRIDGE" \ 1328 "\n addif BRIDGE IFACE Add IFACE to BRIDGE" \ 1329 "\n delif BRIDGE IFACE Delete IFACE from BRIDGE" \ 1330 IF_FEATURE_BRCTL_FANCY( \ 1331 "\n setageing BRIDGE TIME Set ageing time" \ 1332 "\n setfd BRIDGE TIME Set bridge forward delay" \ 1333 "\n sethello BRIDGE TIME Set hello time" \ 1334 "\n setmaxage BRIDGE TIME Set max message age" \ 1335 "\n setpathcost BRIDGE COST Set path cost" \ 1336 "\n setportprio BRIDGE PRIO Set port priority" \ 1337 "\n setbridgeprio BRIDGE PRIO Set bridge priority" \ 1338 "\n stp BRIDGE [1/yes/on|0/no/off] STP on/off" \ 1339 ) \ 1340 1341 #define bzip2_trivial_usage \ 1342 "[OPTIONS] [FILE]..." 1343 #define bzip2_full_usage "\n\n" \ 1344 "Compress FILEs (or stdin) with bzip2 algorithm\n" \ 1345 "\nOptions:" \ 1346 "\n -1..9 Compression level" \ 1347 "\n -d Decompress" \ 1348 "\n -c Write to stdout" \ 1349 "\n -f Force" \ 129 1350 130 1351 #define busybox_notes_usage \ 131 1352 "Hello world!\n" 132 1353 133 #define bzcat_trivial_usage \ 1354 #define lzop_trivial_usage \ 1355 "[-cfvd123456789CF] [FILE]..." 1356 #define lzop_full_usage "\n\n" \ 1357 "Options:" \ 1358 "\n -1..9 Compression level" \ 1359 "\n -d Decompress" \ 1360 "\n -c Write to stdout" \ 1361 "\n -f Force" \ 1362 "\n -v Verbose" \ 1363 "\n -F Don't store or verify checksum" \ 1364 "\n -C Also write checksum of compressed block" \ 1365 1366 #define lzopcat_trivial_usage \ 1367 "[-vCF] [FILE]..." 1368 #define lzopcat_full_usage "\n\n" \ 1369 " -v Verbose" \ 1370 "\n -F Don't store or verify checksum" \ 1371 1372 #define unlzop_trivial_usage \ 1373 "[-cfvCF] [FILE]..." 1374 #define unlzop_full_usage "\n\n" \ 1375 "Options:" \ 1376 "\n -c Write to stdout" \ 1377 "\n -f Force" \ 1378 "\n -v Verbose" \ 1379 "\n -F Don't store or verify checksum" \ 1380 1381 #define unlzma_trivial_usage \ 1382 "[-cf] [FILE]..." 1383 #define unlzma_full_usage "\n\n" \ 1384 "Decompress FILE (or stdin)\n" \ 1385 "\nOptions:" \ 1386 "\n -c Write to stdout" \ 1387 "\n -f Force" \ 1388 1389 #define lzma_trivial_usage \ 1390 "-d [-cf] [FILE]..." 1391 #define lzma_full_usage "\n\n" \ 1392 "Decompress FILE (or stdin)\n" \ 1393 "\nOptions:" \ 1394 "\n -d Decompress" \ 1395 "\n -c Write to stdout" \ 1396 "\n -f Force" \ 1397 1398 #define lzcat_trivial_usage \ 134 1399 "FILE" 135 #define bzcat_full_usage \ 136 "Uncompress to stdout" 137 138 #define unlzma_trivial_usage \ 139 "[OPTION]... [FILE]" 140 #define unlzma_full_usage \ 141 "Uncompress FILE (or standard input if FILE is '-' or omitted)" \ 142 "\n\nOptions:\n" \ 143 " -c Write output to standard output\n" \ 144 " -f Force" 145 146 #define lzmacat_trivial_usage \ 1400 #define lzcat_full_usage "\n\n" \ 1401 "Decompress to stdout" 1402 1403 #define unxz_trivial_usage \ 1404 "[-cf] [FILE]..." 1405 #define unxz_full_usage "\n\n" \ 1406 "Decompress FILE (or stdin)\n" \ 1407 "\nOptions:" \ 1408 "\n -c Write to stdout" \ 1409 "\n -f Force" \ 1410 1411 #define xz_trivial_usage \ 1412 "-d [-cf] [FILE]..." 1413 #define xz_full_usage "\n\n" \ 1414 "Decompress FILE (or stdin)\n" \ 1415 "\nOptions:" \ 1416 "\n -d Decompress" \ 1417 "\n -c Write to stdout" \ 1418 "\n -f Force" \ 1419 1420 #define xzcat_trivial_usage \ 147 1421 "FILE" 148 #define lzmacat_full_usage\149 " Uncompress to stdout"1422 #define xzcat_full_usage "\n\n" \ 1423 "Decompress to stdout" 150 1424 151 1425 #define cal_trivial_usage \ 152 "[-jy] [[ month] year]"153 #define cal_full_usage \154 "Display a calendar " \155 "\n\nOptions:" \156 157 "\n -y Display the entire year"1426 "[-jy] [[MONTH] YEAR]" 1427 #define cal_full_usage "\n\n" \ 1428 "Display a calendar\n" \ 1429 "\nOptions:" \ 1430 "\n -j Use julian dates" \ 1431 "\n -y Display the entire year" \ 158 1432 159 1433 #define cat_trivial_usage \ 160 "[-u] [FILE]..." 161 #define cat_full_usage \ 162 "Concatenate FILE(s) and print them to stdout" \ 163 "\n\nOptions:" \ 164 "\n -u Use unbuffered i/o (ignored)" 1434 "[FILE]..." 1435 #define cat_full_usage "\n\n" \ 1436 "Concatenate FILEs and print them to stdout" \ 1437 165 1438 #define cat_example_usage \ 166 1439 "$ cat /proc/uptime\n" \ … … 169 1442 #define catv_trivial_usage \ 170 1443 "[-etv] [FILE]..." 171 #define catv_full_usage \ 172 "Display nonprinting characters as ^x or M-x" \ 173 "\n\nOptions:\n" \ 174 " -e End each line with $\n" \ 175 " -t Show tabs as ^I\n" \ 176 " -v Don't use ^x or M-x escapes" 1444 #define catv_full_usage "\n\n" \ 1445 "Display nonprinting characters as ^x or M-x\n" \ 1446 "\nOptions:" \ 1447 "\n -e End each line with $" \ 1448 "\n -t Show tabs as ^I" \ 1449 "\n -v Don't use ^x or M-x escapes" \ 1450 1451 #define chat_trivial_usage \ 1452 "EXPECT [SEND [EXPECT [SEND...]]]" 1453 #define chat_full_usage "\n\n" \ 1454 "Useful for interacting with a modem connected to stdin/stdout.\n" \ 1455 "A script consists of one or more \"expect-send\" pairs of strings,\n" \ 1456 "each pair is a pair of arguments. Example:\n" \ 1457 "chat '' ATZ OK ATD123456 CONNECT '' ogin: pppuser word: ppppass '~'" \ 1458 177 1459 #define chattr_trivial_usage \ 178 "[-R] [-+=AacDdijsStTu] [-v version] files..."179 #define chattr_full_usage \180 "Change file attributes on an ext2 fs\n \n" \181 "Modifiers:\n" \182 " - Remove attributes\n" \183 " + Add attributes\n" \184 " = Set attributes\n" \185 "Attributes:\n" \186 " A Don't track atime\n" \187 " a Append mode only\n" \188 " c Enable compress\n" \189 " D Write dir contents synchronously\n" \190 " d Do not backup with dump\n" \191 " i Cannot be modified (immutable)\n" \192 " j Write all data to journal first\n" \193 " s Zero disk storage when deleted\n" \194 " S Write file contents synchronously\n" \195 " t Disable tail-merging of partial blocks with other files\n" \196 " u Allow file to be undeleted\n" \197 "Options:\n" \198 " -R Recursively list subdirectories\n" \199 " -v Set the file's version/generation number"1460 "[-R] [-+=AacDdijsStTu] [-v VERSION] [FILE]..." 1461 #define chattr_full_usage "\n\n" \ 1462 "Change file attributes on an ext2 fs\n" \ 1463 "\nModifiers:" \ 1464 "\n - Remove attributes" \ 1465 "\n + Add attributes" \ 1466 "\n = Set attributes" \ 1467 "\nAttributes:" \ 1468 "\n A Don't track atime" \ 1469 "\n a Append mode only" \ 1470 "\n c Enable compress" \ 1471 "\n D Write dir contents synchronously" \ 1472 "\n d Don't backup with dump" \ 1473 "\n i Cannot be modified (immutable)" \ 1474 "\n j Write all data to journal first" \ 1475 "\n s Zero disk storage when deleted" \ 1476 "\n S Write file contents synchronously" \ 1477 "\n t Disable tail-merging of partial blocks with other files" \ 1478 "\n u Allow file to be undeleted" \ 1479 "\nOptions:" \ 1480 "\n -R Recurse" \ 1481 "\n -v Set the file's version/generation number" \ 200 1482 201 1483 #define chcon_trivial_usage \ 202 "[OPTIONS] CONTEXT FILE...\n" \ 203 " chcon [OPTIONS] [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE...\n" \ 204 " chcon [OPTIONS] --reference=RFILE FILE...\n" 205 #define chcon_full_usage \ 1484 "[OPTIONS] CONTEXT FILE..." \ 1485 "\n chcon [OPTIONS] [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE..." \ 1486 IF_FEATURE_CHCON_LONG_OPTIONS( \ 1487 "\n chcon [OPTIONS] --reference=RFILE FILE..." \ 1488 ) 1489 #define chcon_full_usage "\n\n" \ 206 1490 "Change the security context of each FILE to CONTEXT\n" \ 207 "\n -v, --verbose Verbose" \ 208 "\n -c, --changes Report changes made" \ 209 "\n -h, --no-dereference Affect symlinks instead of their targets" \ 210 "\n -f, --silent, --quiet Suppress most error messages" \ 211 "\n --reference=RFILE Use RFILE's group instead of using a CONTEXT value" \ 212 "\n -u, --user=USER Set user USER in the target security context" \ 213 "\n -r, --role=ROLE Set role ROLE in the target security context" \ 214 "\n -t, --type=TYPE Set type TYPE in the target security context" \ 215 "\n -l, --range=RANGE Set range RANGE in the target security context" \ 216 "\n -R, --recursive Recurse subdirectories" \ 1491 IF_FEATURE_CHCON_LONG_OPTIONS( \ 1492 "\n -v,--verbose Verbose" \ 1493 "\n -c,--changes Report changes made" \ 1494 "\n -h,--no-dereference Affect symlinks instead of their targets" \ 1495 "\n -f,--silent,--quiet Suppress most error messages" \ 1496 "\n --reference=RFILE Use RFILE's group instead of using a CONTEXT value" \ 1497 "\n -u,--user=USER Set user/role/type/range in the target" \ 1498 "\n -r,--role=ROLE security context" \ 1499 "\n -t,--type=TYPE" \ 1500 "\n -l,--range=RANGE" \ 1501 "\n -R,--recursive Recurse" \ 1502 ) \ 1503 IF_NOT_FEATURE_CHCON_LONG_OPTIONS( \ 1504 "\n -v Verbose" \ 1505 "\n -c Report changes made" \ 1506 "\n -h Affect symlinks instead of their targets" \ 1507 "\n -f Suppress most error messages" \ 1508 "\n -u USER Set user/role/type/range in the target security context" \ 1509 "\n -r ROLE" \ 1510 "\n -t TYPE" \ 1511 "\n -l RNG" \ 1512 "\n -R Recurse" \ 1513 ) 217 1514 218 1515 #define chmod_trivial_usage \ 219 "[-R" USE_DESKTOP("cvf")"] MODE[,MODE]... FILE..."220 #define chmod_full_usage \1516 "[-R"IF_DESKTOP("cvf")"] MODE[,MODE]... FILE..." 1517 #define chmod_full_usage "\n\n" \ 221 1518 "Each MODE is one or more of the letters ugoa, one of the\n" \ 222 "symbols +-= and one or more of the letters rwxst " \223 "\n\nOptions:" \224 "\n -R Recurse directories" \225 USE_DESKTOP( \226 227 228 1519 "symbols +-= and one or more of the letters rwxst\n" \ 1520 "\nOptions:" \ 1521 "\n -R Recurse" \ 1522 IF_DESKTOP( \ 1523 "\n -c List changed files" \ 1524 "\n -v List all files" \ 1525 "\n -f Hide errors" \ 229 1526 ) 230 1527 #define chmod_example_usage \ … … 239 1536 240 1537 #define chgrp_trivial_usage \ 241 "[-RhLHP" USE_DESKTOP("cvf")"]... GROUP FILE..."242 #define chgrp_full_usage \243 "Change the group membership of each FILE to GROUP " \244 "\n\nOptions:" \245 "\n -R Recurse directories" \246 247 248 249 "\n -P Do not traverse symlinks (default)" \250 USE_DESKTOP( \251 252 253 1538 "[-RhLHP"IF_DESKTOP("cvf")"]... GROUP FILE..." 1539 #define chgrp_full_usage "\n\n" \ 1540 "Change the group membership of each FILE to GROUP\n" \ 1541 "\nOptions:" \ 1542 "\n -R Recurse" \ 1543 "\n -h Affect symlinks instead of symlink targets" \ 1544 "\n -L Traverse all symlinks to directories" \ 1545 "\n -H Traverse symlinks on command line only" \ 1546 "\n -P Don't traverse symlinks (default)" \ 1547 IF_DESKTOP( \ 1548 "\n -c List changed files" \ 1549 "\n -v Verbose" \ 1550 "\n -f Hide errors" \ 254 1551 ) 255 1552 #define chgrp_example_usage \ … … 261 1558 262 1559 #define chown_trivial_usage \ 263 "[-RhLHP" USE_DESKTOP("cvf")"]... OWNER[<.|:>[GROUP]] FILE..."264 #define chown_full_usage \265 "Change the owner and/or group of each FILE to OWNER and/or GROUP " \266 "\n\nOptions:" \267 "\n -R Recurse directories" \268 269 270 271 "\n -P Do not traverse symlinks (default)" \272 USE_DESKTOP( \273 274 275 1560 "[-RhLHP"IF_DESKTOP("cvf")"]... OWNER[<.|:>[GROUP]] FILE..." 1561 #define chown_full_usage "\n\n" \ 1562 "Change the owner and/or group of each FILE to OWNER and/or GROUP\n" \ 1563 "\nOptions:" \ 1564 "\n -R Recurse" \ 1565 "\n -h Affect symlinks instead of symlink targets" \ 1566 "\n -L Traverse all symlinks to directories" \ 1567 "\n -H Traverse symlinks on command line only" \ 1568 "\n -P Don't traverse symlinks (default)" \ 1569 IF_DESKTOP( \ 1570 "\n -c List changed files" \ 1571 "\n -v List all files" \ 1572 "\n -f Hide errors" \ 276 1573 ) 277 1574 #define chown_example_usage \ … … 286 1583 287 1584 #define chpst_trivial_usage \ 288 "[-vP012] [-u user[:group]] [-U user[:group]] [-e dir]" \289 " [-/ dir] [-n nice] [-m bytes] [-d bytes] [-o files]" \290 " [-p processes] [-f bytes] [-c bytes] prog args"291 #define chpst_full_usage \292 "Change the process state and run specified program" \293 "\n\nOptions:\n" \294 " -u user[:grp] Set uid and gid\n" \295 " -U user[:grp] Set environment variables UID and GID\n" \296 " -e dir Set environment variables as specified by files\n" \297 " in the directory: file=1st_line_of_file\n" \298 " -/ dir Chroot to dir\n" \299 " -n inc Add inc to nice value\n" \300 " -m bytes Limit data segment, stack segment, locked physical pages,\n" \301 " and total of all segment per process to bytes bytes each\n" \302 " -d bytes Limit data segment\n" \303 " -o n Limit the number of open file descriptors per process to n\n" \304 " -p n Limit number of processes per uid to n\n" \305 " -f bytes Limit output file size to bytes bytes\n" \306 " -c bytes Limit core file size to bytes bytes\n" \307 " -v Verbose\n" \308 " -P Run prog in a new process group\n" \309 " -0 Close standard input\n" \310 " -1 Close standard output\n" \311 " -2 Close standard error" 1585 "[-vP012] [-u USER[:GRP]] [-U USER[:GRP]] [-e DIR]\n" \ 1586 " [-/ DIR] [-n NICE] [-m BYTES] [-d BYTES] [-o N]\n" \ 1587 " [-p N] [-f BYTES] [-c BYTES] PROG ARGS" 1588 #define chpst_full_usage "\n\n" \ 1589 "Change the process state, run PROG\n" \ 1590 "\nOptions:" \ 1591 "\n -u USER[:GRP] Set uid and gid" \ 1592 "\n -U USER[:GRP] Set $UID and $GID in environment" \ 1593 "\n -e DIR Set environment variables as specified by files" \ 1594 "\n in DIR: file=1st_line_of_file" \ 1595 "\n -/ DIR Chroot to DIR" \ 1596 "\n -n NICE Add NICE to nice value" \ 1597 "\n -m BYTES Same as -d BYTES -s BYTES -l BYTES" \ 1598 "\n -d BYTES Limit data segment" \ 1599 "\n -o N Limit number of open files per process" \ 1600 "\n -p N Limit number of processes per uid" \ 1601 "\n -f BYTES Limit output file sizes" \ 1602 "\n -c BYTES Limit core file size" \ 1603 "\n -v Verbose" \ 1604 "\n -P Create new process group" \ 1605 "\n -0 Close stdin" \ 1606 "\n -1 Close stdout" \ 1607 "\n -2 Close stderr" \ 1608 312 1609 #define setuidgid_trivial_usage \ 313 " account prog args"314 #define setuidgid_full_usage \315 "Set uid and gid to account's uid and gid, removing all supplementary\n" \316 " groups, then run prog"1610 "USER PROG ARGS" 1611 #define setuidgid_full_usage "\n\n" \ 1612 "Set uid and gid to USER's uid and gid, drop supplementary group ids,\n" \ 1613 "run PROG" 317 1614 #define envuidgid_trivial_usage \ 318 " account prog args"319 #define envuidgid_full_usage \320 "Set $UID to account's uid and $GID to account's gid, then run prog"1615 "USER PROG ARGS" 1616 #define envuidgid_full_usage "\n\n" \ 1617 "Set $UID to USER's uid and $GID to USER's gid, run PROG" 321 1618 #define envdir_trivial_usage \ 322 " dir prog args"323 #define envdir_full_usage \1619 "DIR PROG ARGS" 1620 #define envdir_full_usage "\n\n" \ 324 1621 "Set various environment variables as specified by files\n" \ 325 "in the directory dir, then run prog"1622 "in the directory DIR, run PROG" 326 1623 #define softlimit_trivial_usage \ 327 "[-a allbytes] [-c corebytes] [-d databytes] [-f filebytes] " \ 328 "[-l lockbytes] [-m membytes] [-o openfiles] [-p processes] " \ 329 "[-r residentbytes] [-s stackbytes] [-t cpusecs] prog args" 330 #define softlimit_full_usage \ 331 "Set soft resource limits, then run prog" \ 332 "\n\nOptions:\n" \ 333 " -m n Same as -d n -s n -l n -a n\n" \ 334 " -d n Limit the data segment per process to n bytes\n" \ 335 " -s n Limit the stack segment per process to n bytes\n" \ 336 " -l n Limit the locked physical pages per process to n bytes\n" \ 337 " -a n Limit the total of all segments per process to n bytes\n" \ 338 " -o n Limit the number of open file descriptors per process to n\n" \ 339 " -p n Limit the number of processes per uid to n\n" \ 340 "Options controlling file sizes:\n" \ 341 " -f n Limit output file sizes to n bytes\n" \ 342 " -c n Limit core file sizes to n bytes\n" \ 343 "Efficiency opts:\n" \ 344 " -r n Limit the resident set size to n bytes. This limit is not\n" \ 345 " enforced unless physical memory is full\n" \ 346 " -t n Limit the CPU time to n seconds. This limit is not enforced\n" \ 347 " except that the process receives a SIGXCPU signal after n seconds\n" \ 348 "\n" \ 349 "Some options may have no effect on some operating systems\n" \ 350 "n may be =, indicating that soft limit should be set equal to hard limit" 1624 "[-a BYTES] [-m BYTES] [-d BYTES] [-s BYTES] [-l BYTES]\n" \ 1625 " [-f BYTES] [-c BYTES] [-r BYTES] [-o N] [-p N] [-t N]\n" \ 1626 " PROG ARGS" 1627 #define softlimit_full_usage "\n\n" \ 1628 "Set soft resource limits, then run PROG\n" \ 1629 "\nOptions:" \ 1630 "\n -a BYTES Limit total size of all segments" \ 1631 "\n -m BYTES Same as -d BYTES -s BYTES -l BYTES -a BYTES" \ 1632 "\n -d BYTES Limit data segment" \ 1633 "\n -s BYTES Limit stack segment" \ 1634 "\n -l BYTES Limit locked memory size" \ 1635 "\n -o N Limit number of open files per process" \ 1636 "\n -p N Limit number of processes per uid" \ 1637 "\nOptions controlling file sizes:" \ 1638 "\n -f BYTES Limit output file sizes" \ 1639 "\n -c BYTES Limit core file size" \ 1640 "\nEfficiency opts:" \ 1641 "\n -r BYTES Limit resident set size" \ 1642 "\n -t N Limit CPU time, process receives" \ 1643 "\n a SIGXCPU after N seconds" \ 351 1644 352 1645 #define chroot_trivial_usage \ 353 "NEWROOT [ COMMAND...]"354 #define chroot_full_usage \355 "Run COMMANDwith root directory set to NEWROOT"1646 "NEWROOT [PROG ARGS]" 1647 #define chroot_full_usage "\n\n" \ 1648 "Run PROG with root directory set to NEWROOT" 356 1649 #define chroot_example_usage \ 357 1650 "$ ls -l /bin/ls\n" \ … … 364 1657 #define chvt_trivial_usage \ 365 1658 "N" 366 #define chvt_full_usage \1659 #define chvt_full_usage "\n\n" \ 367 1660 "Change the foreground virtual terminal to /dev/ttyN" 368 1661 369 1662 #define cksum_trivial_usage \ 370 1663 "FILES..." 371 #define cksum_full_usage \1664 #define cksum_full_usage "\n\n" \ 372 1665 "Calculate the CRC32 checksums of FILES" 373 1666 374 1667 #define clear_trivial_usage \ 375 1668 "" 376 #define clear_full_usage \1669 #define clear_full_usage "\n\n" \ 377 1670 "Clear screen" 378 1671 379 1672 #define cmp_trivial_usage \ 380 "[-l] [-s] FILE1 [FILE2" USE_DESKTOP(" [SKIP1 [SKIP2]") "]]"381 #define cmp_full_usage \382 "Compare s FILE1 vs stdin if FILE2 is not specified" \383 "\n\nOptions:\n" \384 " -l Write the byte numbers (decimal) and values (octal)\n" \385 " for all differing bytes\n" \386 " -s Quiet"1673 "[-l] [-s] FILE1 [FILE2" IF_DESKTOP(" [SKIP1 [SKIP2]]") "]" 1674 #define cmp_full_usage "\n\n" \ 1675 "Compare FILE1 with FILE2 (or stdin)\n" \ 1676 "\nOptions:" \ 1677 "\n -l Write the byte numbers (decimal) and values (octal)" \ 1678 "\n for all differing bytes" \ 1679 "\n -s Quiet" \ 387 1680 388 1681 #define comm_trivial_usage \ 389 1682 "[-123] FILE1 FILE2" 390 #define comm_full_usage \391 "Compare FILE1 to FILE2, or to stdin if - is specified" \392 "\n\nOptions:\n" \393 " -1 Suppress lines unique to FILE1\n" \394 " -2 Suppress lines unique to FILE2\n" \395 " -3 Suppress lines common to both files"1683 #define comm_full_usage "\n\n" \ 1684 "Compare FILE1 with FILE2\n" \ 1685 "\nOptions:" \ 1686 "\n -1 Suppress lines unique to FILE1" \ 1687 "\n -2 Suppress lines unique to FILE2" \ 1688 "\n -3 Suppress lines common to both files" \ 396 1689 397 1690 #define bbconfig_trivial_usage \ 398 1691 "" 399 #define bbconfig_full_usage \ 400 "Print the config file which built busybox" 401 402 #define bbsh_trivial_usage \ 403 "[FILE]...\n" \ 404 "or: bbsh -c command [args]..." 405 #define bbsh_full_usage \ 406 "The bbsh shell (command interpreter)" 1692 #define bbconfig_full_usage "\n\n" \ 1693 "Print the config file used by busybox build" 407 1694 408 1695 #define chrt_trivial_usage \ 409 "[ OPTION]... [prio] [pid | command [arg]...]"410 #define chrt_full_usage \411 " manipulate real-time attributes of a process" \412 "\n\nOptions:\n" \413 " -p operate on pid\n" \414 " -r set scheduling policy to SCHED_RR\n" \415 " -f set scheduling policy to SCHED_FIFO\n" \416 " -o set scheduling policy to SCHED_OTHER\n" \417 " -m show min and max priorities"1696 "[-prfom] [PRIO] [PID | PROG ARGS]" 1697 #define chrt_full_usage "\n\n" \ 1698 "Change scheduling priority and class for a process\n" \ 1699 "\nOptions:" \ 1700 "\n -p Operate on PID" \ 1701 "\n -r Set SCHED_RR class" \ 1702 "\n -f Set SCHED_FIFO class" \ 1703 "\n -o Set SCHED_OTHER class" \ 1704 "\n -m Show min/max priorities" \ 418 1705 419 1706 #define chrt_example_usage \ … … 422 1709 "You need CAP_SYS_NICE privileges to set scheduling attributes of a process" 423 1710 1711 #define nice_trivial_usage \ 1712 "[-n ADJUST] [PROG ARGS]" 1713 #define nice_full_usage "\n\n" \ 1714 "Change scheduling priority, run PROG\n" \ 1715 "\nOptions:" \ 1716 "\n -n ADJUST Adjust priority by ADJUST" \ 1717 1718 #define renice_trivial_usage \ 1719 "{{-n INCREMENT} | PRIORITY} [[-p | -g | -u] ID...]" 1720 #define renice_full_usage "\n\n" \ 1721 "Change scheduling priority for a running process\n" \ 1722 "\nOptions:" \ 1723 "\n -n Adjust current nice value (smaller is faster)" \ 1724 "\n -p Process id(s) (default)" \ 1725 "\n -g Process group id(s)" \ 1726 "\n -u Process user name(s) and/or id(s)" \ 1727 1728 #define ionice_trivial_usage \ 1729 "[-c 1-3] [-n 0-7] [-p PID] [PROG]" 1730 #define ionice_full_usage "\n\n" \ 1731 "Change I/O priority and class\n" \ 1732 "\nOptions:" \ 1733 "\n -c Class. 1:realtime 2:best-effort 3:idle" \ 1734 "\n -n Priority" \ 1735 424 1736 #define cp_trivial_usage \ 425 "[OPTION]... SOURCE DEST" 426 #define cp_full_usage \ 427 "Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY" \ 428 "\n\nOptions:" \ 429 "\n -a Same as -dpR" \ 430 USE_SELINUX( \ 431 "\n -c Preserves security context" \ 432 ) \ 433 "\n -d,-P Preserve links" \ 434 "\n -H,-L Dereference all symlinks (default)" \ 435 "\n -p Preserve file attributes if possible" \ 436 "\n -f Force overwrite" \ 437 "\n -i Prompt before overwrite" \ 438 "\n -R,-r Recurse directories" \ 439 "\n -l,-s Create (sym)links" 1737 "[OPTIONS] SOURCE DEST" 1738 #define cp_full_usage "\n\n" \ 1739 "Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY\n" \ 1740 "\nOptions:" \ 1741 "\n -a Same as -dpR" \ 1742 IF_SELINUX( \ 1743 "\n -c Preserve security context" \ 1744 ) \ 1745 "\n -R,-r Recurse" \ 1746 "\n -d,-P Preserve symlinks (default if -R)" \ 1747 "\n -L Follow all symlinks" \ 1748 "\n -H Follow symlinks on command line" \ 1749 "\n -p Preserve file attributes if possible" \ 1750 "\n -f Overwrite" \ 1751 "\n -i Prompt before overwrite" \ 1752 "\n -l,-s Create (sym)links" \ 440 1753 441 1754 #define cpio_trivial_usage \ 442 "-[dimtuv][F cpiofile]" 443 #define cpio_full_usage \ 444 "Extract or list files from a cpio archive\n" \ 445 "Main operation mode:\n" \ 446 " d Make leading directories\n" \ 447 " i Extract\n" \ 448 " m Preserve mtime\n" \ 449 " t List\n" \ 450 " v Verbose\n" \ 451 " u Unconditional overwrite\n" \ 452 " F Input from file" 1755 "[-dmvu] [-F FILE]" IF_FEATURE_CPIO_O(" [-H newc]") \ 1756 " [-ti"IF_FEATURE_CPIO_O("o")"]" IF_FEATURE_CPIO_P(" [-p DIR]") 1757 #define cpio_full_usage "\n\n" \ 1758 "Extract or list files from a cpio archive" \ 1759 IF_FEATURE_CPIO_O(", or" \ 1760 "\ncreate an archive" IF_FEATURE_CPIO_P(" (-o) or copy files (-p)") \ 1761 " using file list on stdin" \ 1762 ) \ 1763 "\n" \ 1764 "\nMain operation mode:" \ 1765 "\n -t List" \ 1766 "\n -i Extract" \ 1767 IF_FEATURE_CPIO_O( \ 1768 "\n -o Create (requires -H newc)" \ 1769 ) \ 1770 IF_FEATURE_CPIO_P( \ 1771 "\n -p DIR Copy files to DIR" \ 1772 ) \ 1773 "\nOptions:" \ 1774 "\n -d Make leading directories" \ 1775 "\n -m Preserve mtime" \ 1776 "\n -v Verbose" \ 1777 "\n -u Overwrite" \ 1778 "\n -F FILE Input (-t,-i,-p) or output (-o) file" \ 1779 IF_FEATURE_CPIO_O( \ 1780 "\n -H newc Archive format" \ 1781 ) \ 453 1782 454 1783 #define crond_trivial_usage \ 455 "-d[#] -c crondir -f -b" 456 #define crond_full_usage \ 457 " -d [#] -l [#] -S -L logfile -f -b -c dir\n" \ 458 " -d num Debug level\n" \ 459 " -l num Log level (8 - default)\n" \ 460 " -S Log to syslogd (default)\n" \ 461 " -L file Log to file\n" \ 462 " -f Run in foreground\n" \ 463 " -b Run in background (default)\n" \ 464 " -c dir Working dir" 1784 "-fbS -l N " IF_FEATURE_CROND_D("-d N ") "-L LOGFILE -c DIR" 1785 #define crond_full_usage "\n\n" \ 1786 " -f Foreground" \ 1787 "\n -b Background (default)" \ 1788 "\n -S Log to syslog (default)" \ 1789 "\n -l Set log level. 0 is the most verbose, default 8" \ 1790 IF_FEATURE_CROND_D( \ 1791 "\n -d Set log level, log to stderr" \ 1792 ) \ 1793 "\n -L Log to file" \ 1794 "\n -c Working dir" \ 465 1795 466 1796 #define crontab_trivial_usage \ 467 "[-c dir] {file|-}|[-u|-l|-e|-d user]" 468 #define crontab_full_usage \ 469 " file [opts] Replace crontab from file\n" \ 470 " - [opts] Replace crontab from stdin\n" \ 471 " -u user Specify user\n" \ 472 " -l [user] List crontab for user\n" \ 473 " -e [user] Edit crontab for user\n" \ 474 " -d [user] Delete crontab for user\n" \ 475 " -c dir Specify crontab directory" 1797 "[-c DIR] [-u USER] [-ler]|[FILE]" 1798 #define crontab_full_usage "\n\n" \ 1799 " -c Crontab directory" \ 1800 "\n -u User" \ 1801 "\n -l List crontab" \ 1802 "\n -e Edit crontab" \ 1803 "\n -r Delete crontab" \ 1804 "\n FILE Replace crontab by FILE ('-': stdin)" \ 476 1805 477 1806 #define cryptpw_trivial_usage \ 478 "[-a des|md5] [string]" 479 #define cryptpw_full_usage \ 480 "Outputs crypted string.\n" \ 481 "If string isn't supplied on cmdline, reads it from stdin.\n" \ 482 "\nOptions:" \ 483 "\n -a Algorithm to use (default: md5)" 1807 "[OPTIONS] [PASSWORD] [SALT]" 1808 /* We do support -s, we just don't mention it */ 1809 #define cryptpw_full_usage "\n\n" \ 1810 "Crypt the PASSWORD using crypt(3)\n" \ 1811 "\nOptions:" \ 1812 IF_LONG_OPTS( \ 1813 "\n -P,--password-fd=N Read password from fd N" \ 1814 /* "\n -s,--stdin Use stdin; like -P0" */ \ 1815 "\n -m,--method=TYPE Encryption method TYPE" \ 1816 "\n -S,--salt=SALT" \ 1817 ) \ 1818 IF_NOT_LONG_OPTS( \ 1819 "\n -P N Read password from fd N" \ 1820 /* "\n -s Use stdin; like -P0" */ \ 1821 "\n -m TYPE Encryption method TYPE" \ 1822 "\n -S SALT" \ 1823 ) \ 1824 1825 /* mkpasswd is an alias to cryptpw */ 1826 1827 #define mkpasswd_trivial_usage \ 1828 "[OPTIONS] [PASSWORD] [SALT]" 1829 /* We do support -s, we just don't mention it */ 1830 #define mkpasswd_full_usage "\n\n" \ 1831 "Crypt the PASSWORD using crypt(3)\n" \ 1832 "\nOptions:" \ 1833 IF_LONG_OPTS( \ 1834 "\n -P,--password-fd=N Read password from fd N" \ 1835 /* "\n -s,--stdin Use stdin; like -P0" */ \ 1836 "\n -m,--method=TYPE Encryption method TYPE" \ 1837 "\n -S,--salt=SALT" \ 1838 ) \ 1839 IF_NOT_LONG_OPTS( \ 1840 "\n -P N Read password from fd N" \ 1841 /* "\n -s Use stdin; like -P0" */ \ 1842 "\n -m TYPE Encryption method TYPE" \ 1843 "\n -S SALT" \ 1844 ) \ 484 1845 485 1846 #define cut_trivial_usage \ 486 "[OPTION]... [FILE]..." 487 #define cut_full_usage \ 488 "Print selected fields from each input FILE to standard output" \ 489 "\n\nOptions:\n" \ 490 " -b LIST Output only bytes from LIST\n" \ 491 " -c LIST Output only characters from LIST\n" \ 492 " -d CHAR Use CHAR instead of tab as the field delimiter\n" \ 493 " -s Output only the lines containing delimiter\n" \ 494 " -f N Print only these fields\n" \ 495 " -n Ignored" 1847 "[OPTIONS] [FILE]..." 1848 #define cut_full_usage "\n\n" \ 1849 "Print selected fields from each input FILE to stdout\n" \ 1850 "\nOptions:" \ 1851 "\n -b LIST Output only bytes from LIST" \ 1852 "\n -c LIST Output only characters from LIST" \ 1853 "\n -d CHAR Use CHAR instead of tab as the field delimiter" \ 1854 "\n -s Output only the lines containing delimiter" \ 1855 "\n -f N Print only these fields" \ 1856 "\n -n Ignored" \ 1857 496 1858 #define cut_example_usage \ 497 1859 "$ echo \"Hello world\" | cut -f 1 -d ' '\n" \ … … 500 1862 "world\n" 501 1863 502 #define date_trivial_usage \503 "[OPTION]... [MMDDhhmm[[CC]YY][.ss]] [+FORMAT]"504 #define date_full_usage \505 "Display current time in the given FORMAT, or set system date" \506 "\n\nOptions:\n" \507 " -R Outputs RFC-822 compliant date string\n" \508 " -d STRING Displays time described by STRING, not 'now'\n" \509 USE_FEATURE_DATE_ISOFMT( \510 " -I[TIMESPEC] Outputs an ISO-8601 compliant date/time string\n" \511 " TIMESPEC='date' (or missing) for date only,\n" \512 " 'hours', 'minutes', or 'seconds' for date and,\n" \513 " time to the indicated precision\n" \514 " -D hint Use 'hint' as date format, via strptime()\n" \515 ) \516 " -s Sets time described by STRING\n" \517 " -r FILE Displays the last modification time of FILE\n" \518 " -u Prints or sets Coordinated Universal Time"519 #define date_example_usage \520 "$ date\n" \521 "Wed Apr 12 18:52:41 MDT 2000\n"522 523 #define dc_trivial_usage \524 "expression ..."525 #define dc_full_usage \526 "This is a Tiny RPN calculator that understands the\n" \527 "following operations: +, add, -, sub, *, mul, /, div, %, mod, " \528 "**, exp, and, or, not, eor.\n" \529 "For example: 'dc 2 2 add' -> 4, and 'dc 8 8 \\* 2 2 + /' -> 16." \530 "\n\nOptions:\n" \531 "p - Prints the value on the top of the stack, without altering the stack\n" \532 "f - Prints the entire contents of the stack without altering anything\n" \533 "o - Pops the value off the top of the stack and uses it to set the output radix\n" \534 " Only 10 and 16 are supported"535 #define dc_example_usage \536 "$ dc 2 2 + p\n" \537 "4\n" \538 "$ dc 8 8 \\* 2 2 + / p\n" \539 "16\n" \540 "$ dc 0 1 and p\n" \541 "0\n" \542 "$ dc 0 1 or p\n" \543 "1\n" \544 "$ echo 72 9 div 8 mul p | dc\n" \545 "64\n"546 547 1864 #define dd_trivial_usage \ 548 "[if=FILE] [of=FILE] " USE_FEATURE_DD_IBS_OBS("[ibs=N] [obs=N] ") "[bs=N] [count=N] [skip=N]\n" \ 549 " [seek=N]" USE_FEATURE_DD_IBS_OBS(" [conv=notrunc|noerror|sync]") 550 #define dd_full_usage \ 551 "Copy a file with converting and formatting" \ 552 "\n\nOptions:\n" \ 553 " if=FILE Read from FILE instead of stdin\n" \ 554 " of=FILE Write to FILE instead of stdout\n" \ 555 " bs=N Read and write N bytes at a time\n" \ 556 USE_FEATURE_DD_IBS_OBS( \ 557 " ibs=N Read N bytes at a time\n") \ 558 USE_FEATURE_DD_IBS_OBS( \ 559 " obs=N Write N bytes at a time\n") \ 560 " count=N Copy only N input blocks\n" \ 561 " skip=N Skip N input blocks\n" \ 562 " seek=N Skip N output blocks\n" \ 563 USE_FEATURE_DD_IBS_OBS( \ 564 " conv=notrunc Don't truncate output file\n" \ 565 " conv=noerror Continue after read errors\n" \ 566 " conv=sync Pad blocks with zeros\n") \ 567 "\n" \ 568 "Numbers may be suffixed by c (x1), w (x2), b (x512), kD (x1000), k (x1024),\n" \ 569 "MD (x1000000), M (x1048576), GD (x1000000000) or G (x1073741824)" 1865 "[if=FILE] [of=FILE] " IF_FEATURE_DD_IBS_OBS("[ibs=N] [obs=N] ") "[bs=N] [count=N] [skip=N]\n" \ 1866 " [seek=N]" IF_FEATURE_DD_IBS_OBS(" [conv=notrunc|noerror|sync|fsync]") 1867 #define dd_full_usage "\n\n" \ 1868 "Copy a file with converting and formatting\n" \ 1869 "\nOptions:" \ 1870 "\n if=FILE Read from FILE instead of stdin" \ 1871 "\n of=FILE Write to FILE instead of stdout" \ 1872 "\n bs=N Read and write N bytes at a time" \ 1873 IF_FEATURE_DD_IBS_OBS( \ 1874 "\n ibs=N Read N bytes at a time" \ 1875 ) \ 1876 IF_FEATURE_DD_IBS_OBS( \ 1877 "\n obs=N Write N bytes at a time" \ 1878 ) \ 1879 "\n count=N Copy only N input blocks" \ 1880 "\n skip=N Skip N input blocks" \ 1881 "\n seek=N Skip N output blocks" \ 1882 IF_FEATURE_DD_IBS_OBS( \ 1883 "\n conv=notrunc Don't truncate output file" \ 1884 "\n conv=noerror Continue after read errors" \ 1885 "\n conv=sync Pad blocks with zeros" \ 1886 "\n conv=fsync Physically write data out before finishing" \ 1887 ) \ 1888 "\n" \ 1889 "\nNumbers may be suffixed by c (x1), w (x2), b (x512), kD (x1000), k (x1024)," \ 1890 "\nMD (x1000000), M (x1048576), GD (x1000000000) or G (x1073741824)" \ 1891 570 1892 #define dd_example_usage \ 571 1893 "$ dd if=/dev/zero of=/dev/ram1 bs=1M count=4\n" \ … … 575 1897 #define deallocvt_trivial_usage \ 576 1898 "[N]" 577 #define deallocvt_full_usage \1899 #define deallocvt_full_usage "\n\n" \ 578 1900 "Deallocate unused virtual terminal /dev/ttyN" 579 1901 580 1902 #define delgroup_trivial_usage \ 581 USE_FEATURE_DEL_USER_FROM_GROUP("[USER] ")"GROUP"582 #define delgroup_full_usage \1903 IF_FEATURE_DEL_USER_FROM_GROUP("[USER] ")"GROUP" 1904 #define delgroup_full_usage "\n\n" \ 583 1905 "Delete group GROUP from the system" \ 584 USE_FEATURE_DEL_USER_FROM_GROUP(" or user USER from group GROUP")1906 IF_FEATURE_DEL_USER_FROM_GROUP(" or user USER from group GROUP") 585 1907 586 1908 #define deluser_trivial_usage \ 587 1909 "USER" 588 #define deluser_full_usage \ 589 "Delete user USER from the system" 1910 #define deluser_full_usage "\n\n" \ 1911 "Delete USER from the system" 1912 1913 #define devmem_trivial_usage \ 1914 "ADDRESS [WIDTH [VALUE]]" 1915 1916 #define devmem_full_usage "\n\n" \ 1917 "Read/write from physical address\n" \ 1918 "\n ADDRESS Address to act upon" \ 1919 "\n WIDTH Width (8/16/...)" \ 1920 "\n VALUE Data to be written" \ 590 1921 591 1922 #define devfsd_trivial_usage \ 592 "mntpnt [-v]" \593 USE_DEVFSD_FG_NP("[-fg][-np]" ) 594 #define devfsd_full_usage\595 "Manage devfs permissions and old device name symlinks" \596 "\n\nOptions:" \597 "\n mntpnt The mount point where devfs is mounted" \598 "\n -v Print the protocol version numbers for devfsd" \599 "\n and the kernel-side protocol version and exits"\600 USE_DEVFSD_FG_NP(\601 "\n -fg Run the daemon in the foreground" \602 "\n -np Exit after parsing the configuration file" \603 "\n and processing synthetic REGISTER events," \604 "\n do not poll for events")1923 "mntpnt [-v]" IF_DEVFSD_FG_NP("[-fg][-np]") 1924 #define devfsd_full_usage "\n\n" \ 1925 "Manage devfs permissions and old device name symlinks\n" \ 1926 "\nOptions:" \ 1927 "\n mntpnt The mount point where devfs is mounted" \ 1928 "\n -v Print the protocol version numbers for devfsd" \ 1929 "\n and the kernel-side protocol version and exit" \ 1930 IF_DEVFSD_FG_NP( \ 1931 "\n -fg Run in foreground" \ 1932 "\n -np Exit after parsing the configuration file" \ 1933 "\n and processing synthetic REGISTER events," \ 1934 "\n don't poll for events" \ 1935 ) 605 1936 606 1937 #define df_trivial_usage \ 607 "[-" USE_FEATURE_HUMAN_READABLE("hm") "k] [FILESYSTEM ...]" 608 #define df_full_usage \ 609 "Print the filesystem space used and space available" \ 610 USE_FEATURE_HUMAN_READABLE( \ 611 "\n\nOptions control size display:" \ 612 "\n -h Human readable (e.g. 1K 243M 2G)" \ 613 "\n -m 1024*1024 blocks" \ 614 "\n -k 1024 blocks") \ 615 SKIP_FEATURE_HUMAN_READABLE( \ 616 "\n\nOptions:" \ 617 "\n -k Ignored") 1938 "[-Pk" \ 1939 IF_FEATURE_HUMAN_READABLE("mh") \ 1940 IF_FEATURE_DF_FANCY("ai] [-B SIZE") \ 1941 "] [FILESYSTEM]..." 1942 #define df_full_usage "\n\n" \ 1943 "Print filesystem usage statistics\n" \ 1944 "\nOptions:" \ 1945 "\n -P POSIX output format" \ 1946 "\n -k 1024-byte blocks (default)" \ 1947 IF_FEATURE_HUMAN_READABLE( \ 1948 "\n -m 1M-byte blocks" \ 1949 "\n -h Human readable (e.g. 1K 243M 2G)" \ 1950 ) \ 1951 IF_FEATURE_DF_FANCY( \ 1952 "\n -a Show all filesystems" \ 1953 "\n -i Inodes" \ 1954 "\n -B SIZE Blocksize" \ 1955 ) \ 1956 618 1957 #define df_example_usage \ 619 1958 "$ df\n" \ 620 "Filesystem 1 k-blocks Used Available Use% Mounted on\n" \1959 "Filesystem 1K-blocks Used Available Use% Mounted on\n" \ 621 1960 "/dev/sda3 8690864 8553540 137324 98% /\n" \ 622 1961 "/dev/sda1 64216 36364 27852 57% /boot\n" \ 623 1962 "$ df /dev/sda3\n" \ 624 "Filesystem 1k-blocks Used Available Use% Mounted on\n" \ 625 "/dev/sda3 8690864 8553540 137324 98% /\n" 1963 "Filesystem 1K-blocks Used Available Use% Mounted on\n" \ 1964 "/dev/sda3 8690864 8553540 137324 98% /\n" \ 1965 "$ POSIXLY_CORRECT=sure df /dev/sda3\n" \ 1966 "Filesystem 512B-blocks Used Available Use% Mounted on\n" \ 1967 "/dev/sda3 17381728 17107080 274648 98% /\n" \ 1968 "$ POSIXLY_CORRECT=yep df -P /dev/sda3\n" \ 1969 "Filesystem 512-blocks Used Available Capacity Mounted on\n" \ 1970 "/dev/sda3 17381728 17107080 274648 98% /\n" 626 1971 627 1972 #define dhcprelay_trivial_usage \ 628 "[client_device_list] [server_device]" 629 #define dhcprelay_full_usage \ 630 "Relay dhcp requests from client devices to server device" 631 632 #define dhcprelay_trivial_usage \ 633 "[client_device_list] [server_device]" 634 #define dhcprelay_full_usage \ 635 "Relay dhcp requests from client devices to server device" 1973 "CLIENT_IFACE[,CLIENT_IFACE2]... SERVER_IFACE [SERVER_IP]" 1974 #define dhcprelay_full_usage "\n\n" \ 1975 "Relay DHCP requests between clients and server" \ 636 1976 637 1977 #define diff_trivial_usage \ 638 "[-ab diNqrTstw] [-L LABEL] [-S FILE] [-U LINES] FILE1 FILE2"639 #define diff_full_usage \1978 "[-abBdiNqrTstw] [-L LABEL] [-S FILE] [-U LINES] FILE1 FILE2" 1979 #define diff_full_usage "\n\n" \ 640 1980 "Compare files line by line and output the differences between them.\n" \ 641 "This diff implementation only supports unified diffs." \ 642 "\n\nOptions:\n" \ 643 " -a Treat all files as text\n" \ 644 " -b Ignore changes in the amount of whitespace\n" \ 645 " -d Try hard to find a smaller set of changes\n" \ 646 " -i Ignore case differences\n" \ 647 " -L Use LABEL instead of the filename in the unified header\n" \ 648 " -N Treat absent files as empty\n" \ 649 " -q Output only whether files differ\n" \ 650 " -r Recursively compare subdirectories\n" \ 651 " -S Start with FILE when comparing directories\n" \ 652 " -T Make tabs line up by prefixing a tab when necessary\n" \ 653 " -s Report when two files are the same\n" \ 654 " -t Expand tabs to spaces in output\n" \ 655 " -U Output LINES lines of context\n" \ 656 " -w Ignore all whitespace" 1981 "This implementation supports unified diffs only.\n" \ 1982 "\nOptions:" \ 1983 "\n -a Treat all files as text" \ 1984 "\n -b Ignore changes in the amount of whitespace" \ 1985 "\n -B Ignore changes whose lines are all blank" \ 1986 "\n -d Try hard to find a smaller set of changes" \ 1987 "\n -i Ignore case differences" \ 1988 "\n -L Use LABEL instead of the filename in the unified header" \ 1989 "\n -N Treat absent files as empty" \ 1990 "\n -q Output only whether files differ" \ 1991 "\n -r Recurse" \ 1992 "\n -S Start with FILE when comparing directories" \ 1993 "\n -T Make tabs line up by prefixing a tab when necessary" \ 1994 "\n -s Report when two files are the same" \ 1995 "\n -t Expand tabs to spaces in output" \ 1996 "\n -U Output LINES lines of context" \ 1997 "\n -w Ignore all whitespace" \ 657 1998 658 1999 #define dirname_trivial_usage \ 659 2000 "FILENAME" 660 #define dirname_full_usage \2001 #define dirname_full_usage "\n\n" \ 661 2002 "Strip non-directory suffix from FILENAME" 662 2003 #define dirname_example_usage \ … … 668 2009 #define dmesg_trivial_usage \ 669 2010 "[-c] [-n LEVEL] [-s SIZE]" 670 #define dmesg_full_usage \671 "Print or control the kernel ring buffer " \672 "\n\nOptions:\n" \673 " -c Clears the ring buffer's contents after printing\n" \674 " -n LEVEL Sets console logging level\n" \675 " -s SIZE Use a buffer of size SIZE"2011 #define dmesg_full_usage "\n\n" \ 2012 "Print or control the kernel ring buffer\n" \ 2013 "\nOptions:" \ 2014 "\n -c Clear ring buffer after printing" \ 2015 "\n -n LEVEL Set console logging level" \ 2016 "\n -s SIZE Buffer size" \ 676 2017 677 2018 #define dnsd_trivial_usage \ 678 "[-c config] [-t seconds] [-p port] [-i iface-ip] [-d]" 679 #define dnsd_full_usage \ 680 "Small and static DNS server daemon" \ 681 "\n\nOptions:\n" \ 682 " -c Config filename\n" \ 683 " -t TTL in seconds\n" \ 684 " -p Listening port\n" \ 685 " -i Listening ip (default all)\n" \ 686 " -d Daemonize" 2019 "[-dvs] [-c CONFFILE] [-t TTL_SEC] [-p PORT] [-i ADDR]" 2020 #define dnsd_full_usage "\n\n" \ 2021 "Small static DNS server daemon\n" \ 2022 "\nOptions:" \ 2023 "\n -c FILE Config file" \ 2024 "\n -t SEC TTL" \ 2025 "\n -p PORT Listen on PORT" \ 2026 "\n -i ADDR Listen on ADDR" \ 2027 "\n -d Daemonize" \ 2028 "\n -v Verbose" \ 2029 "\n -s Send successful replies only. Use this if you want" \ 2030 "\n to use /etc/resolv.conf with two nameserver lines:" \ 2031 "\n nameserver DNSD_SERVER" \ 2032 "\n nameserver NORNAL_DNS_SERVER" \ 687 2033 688 2034 #define dos2unix_trivial_usage \ 689 "[option] [FILE]" 690 #define dos2unix_full_usage \ 691 "Convert FILE from dos format to unix format. When no option\n" \ 692 "is given, the input is converted to the opposite output format.\n" \ 693 "When no file is given, use stdin for input and stdout for output." \ 694 "\n\nOptions:\n" \ 695 " -u Output will be in UNIX format\n" \ 696 " -d Output will be in DOS format" 2035 "[-ud] [FILE]" 2036 #define dos2unix_full_usage "\n\n" \ 2037 "Convert FILE in-place from DOS to Unix format.\n" \ 2038 "When no file is given, use stdin/stdout.\n" \ 2039 "\nOptions:" \ 2040 "\n -u dos2unix" \ 2041 "\n -d unix2dos" \ 2042 2043 #define unix2dos_trivial_usage \ 2044 "[-ud] [FILE]" 2045 #define unix2dos_full_usage "\n\n" \ 2046 "Convert FILE in-place from Unix to DOS format.\n" \ 2047 "When no file is given, use stdin/stdout.\n" \ 2048 "\nOptions:" \ 2049 "\n -u dos2unix" \ 2050 "\n -d unix2dos" \ 697 2051 698 2052 #define dpkg_trivial_usage \ 699 "[-ilCPru] [-F option] package_name" 700 #define dpkg_full_usage \ 701 "Install, remove and manage Debian packages" \ 702 "\n\nOptions:\n" \ 703 " -i Install the package\n" \ 704 " -l List of installed packages\n" \ 705 " -C Configure an unpackaged package\n" \ 706 " -F depends Ignore dependency problems\n" \ 707 " -P Purge all files of a package\n" \ 708 " -r Remove all but the configuration files for a package\n" \ 709 " -u Unpack a package, but don't configure it" 2053 "[-ilCPru] [-F OPT] PACKAGE" 2054 #define dpkg_full_usage "\n\n" \ 2055 "Install, remove and manage Debian packages\n" \ 2056 "\nOptions:" \ 2057 IF_LONG_OPTS( \ 2058 "\n -i,--install Install the package" \ 2059 "\n -l,--list List of installed packages" \ 2060 "\n --configure Configure an unpackaged package" \ 2061 "\n -P,--purge Purge all files of a package" \ 2062 "\n -r,--remove Remove all but the configuration files for a package" \ 2063 "\n --unpack Unpack a package, but don't configure it" \ 2064 "\n --force-depends Ignore dependency problems" \ 2065 "\n --force-confnew Overwrite existing config files when installing" \ 2066 "\n --force-confold Keep old config files when installing" \ 2067 ) \ 2068 IF_NOT_LONG_OPTS( \ 2069 "\n -i Install the package" \ 2070 "\n -l List of installed packages" \ 2071 "\n -C Configure an unpackaged package" \ 2072 "\n -P Purge all files of a package" \ 2073 "\n -r Remove all but the configuration files for a package" \ 2074 "\n -u Unpack a package, but don't configure it" \ 2075 "\n -F depends Ignore dependency problems" \ 2076 "\n -F confnew Overwrite existing config files when installing" \ 2077 "\n -F confold Keep old config files when installing" \ 2078 ) 710 2079 711 2080 #define dpkg_deb_trivial_usage \ 712 2081 "[-cefxX] FILE [argument]" 713 #define dpkg_deb_full_usage \ 714 "Perform actions on Debian packages (.debs)" \ 715 "\n\nOptions:\n" \ 716 " -c List contents of filesystem tree\n" \ 717 " -e Extract control files to [argument] directory\n" \ 718 " -f Display control field name starting with [argument]\n" \ 719 " -x Extract packages filesystem tree to directory\n" \ 720 " -X Verbose extract" 2082 #define dpkg_deb_full_usage "\n\n" \ 2083 "Perform actions on Debian packages (.debs)\n" \ 2084 "\nOptions:" \ 2085 "\n -c List contents of filesystem tree" \ 2086 "\n -e Extract control files to [argument] directory" \ 2087 "\n -f Display control field name starting with [argument]" \ 2088 "\n -x Extract packages filesystem tree to directory" \ 2089 "\n -X Verbose extract" \ 2090 721 2091 #define dpkg_deb_example_usage \ 722 2092 "$ dpkg-deb -X ./busybox_0.48-1_i386.deb /tmp\n" 723 2093 724 2094 #define du_trivial_usage \ 725 "[-aHLdclsx" USE_FEATURE_HUMAN_READABLE("hm") "k] [FILE]..."726 #define du_full_usage \2095 "[-aHLdclsx" IF_FEATURE_HUMAN_READABLE("hm") "k] [FILE]..." 2096 #define du_full_usage "\n\n" \ 727 2097 "Summarize disk space used for each FILE and/or directory.\n" \ 728 2098 "Disk space is printed in units of " \ 729 USE_FEATURE_DU_DEFAULT_BLOCKSIZE_1K("1024") \ 730 SKIP_FEATURE_DU_DEFAULT_BLOCKSIZE_1K("512") \ 731 " bytes." \ 732 "\n\nOptions:\n" \ 733 " -a Show sizes of files in addition to directories\n" \ 734 " -H Follow symlinks that are FILE command line args\n" \ 735 " -L Follow all symlinks encountered\n" \ 736 " -d N Limit output to directories (and files with -a) of depth < N\n" \ 737 " -c Output a grand total\n" \ 738 " -l Count sizes many times if hard linked\n" \ 739 " -s Display only a total for each argument\n" \ 740 " -x Skip directories on different filesystems\n" \ 741 USE_FEATURE_HUMAN_READABLE( \ 742 " -h Print sizes in human readable format (e.g., 1K 243M 2G )\n" \ 743 " -m Print sizes in megabytes\n" \ 744 ) \ 745 " -k Print sizes in kilobytes" \ 746 USE_FEATURE_DU_DEFAULT_BLOCKSIZE_1K("(default)") 2099 IF_FEATURE_DU_DEFAULT_BLOCKSIZE_1K("1024") \ 2100 IF_NOT_FEATURE_DU_DEFAULT_BLOCKSIZE_1K("512") \ 2101 " bytes.\n" \ 2102 "\nOptions:" \ 2103 "\n -a Show file sizes too" \ 2104 "\n -L Follow all symlinks" \ 2105 "\n -H Follow symlinks on command line" \ 2106 "\n -d N Limit output to directories (and files with -a) of depth < N" \ 2107 "\n -c Show grand total" \ 2108 "\n -l Count sizes many times if hard linked" \ 2109 "\n -s Display only a total for each argument" \ 2110 "\n -x Skip directories on different filesystems" \ 2111 IF_FEATURE_HUMAN_READABLE( \ 2112 "\n -h Sizes in human readable format (e.g., 1K 243M 2G )" \ 2113 "\n -m Sizes in megabytes" \ 2114 ) \ 2115 "\n -k Sizes in kilobytes" \ 2116 IF_FEATURE_DU_DEFAULT_BLOCKSIZE_1K(" (default)") \ 2117 747 2118 #define du_example_usage \ 748 2119 "$ du\n" \ … … 760 2131 #define dumpkmap_trivial_usage \ 761 2132 "> keymap" 762 #define dumpkmap_full_usage \763 "Print out a binary keyboard translation table to standard output"2133 #define dumpkmap_full_usage "\n\n" \ 2134 "Print a binary keyboard translation table to stdout" 764 2135 #define dumpkmap_example_usage \ 765 2136 "$ dumpkmap > keymap\n" … … 767 2138 #define dumpleases_trivial_usage \ 768 2139 "[-r|-a] [-f LEASEFILE]" 769 #define dumpleases_full_usage \ 770 "Display DHCP leases granted by udhcpd" \ 771 "\n\nOptions:\n" \ 772 " -f, --file=FILENAME Leases file to load\n" \ 773 " -r, --remaining Interpret lease times as time remaining\n" \ 774 " -a, --absolute Interpret lease times as expire time" 775 2140 #define dumpleases_full_usage "\n\n" \ 2141 "Display DHCP leases granted by udhcpd\n" \ 2142 "\nOptions:" \ 2143 IF_LONG_OPTS( \ 2144 "\n -f,--file=FILE Lease file" \ 2145 "\n -r,--remaining Show remaining time" \ 2146 "\n -a,--absolute Show expiration time" \ 2147 ) \ 2148 IF_NOT_LONG_OPTS( \ 2149 "\n -f FILE Lease file" \ 2150 "\n -r Show remaining time" \ 2151 "\n -a Show expiration time" \ 2152 ) 2153 2154 /* 776 2155 #define e2fsck_trivial_usage \ 777 2156 "[-panyrcdfvstDFSV] [-b superblock] [-B blocksize] " \ … … 779 2158 "[-l|-L bad_blocks_file] [-C fd] [-j external_journal] " \ 780 2159 "[-E extended-options] device" 781 #define e2fsck_full_usage \ 782 "Check ext2/ext3 file system" \ 783 "\n\nOptions:\n" \ 784 " -p Automatic repair (no questions)\n" \ 785 " -n Make no changes to the filesystem\n" \ 786 " -y Assume 'yes' to all questions\n" \ 787 " -c Check for bad blocks and add them to the badblock list\n" \ 788 " -f Force checking even if filesystem is marked clean\n" \ 789 " -v Verbose\n" \ 790 " -b superblock Use alternative superblock\n" \ 791 " -B blocksize Force blocksize when looking for superblock\n" \ 792 " -j journal Set location of the external journal\n" \ 793 " -l file Add to badblocks list\n" \ 794 " -L file Set badblocks list" 2160 #define e2fsck_full_usage "\n\n" \ 2161 "Check ext2/ext3 file system\n" \ 2162 "\nOptions:" \ 2163 "\n -p Automatic repair (no questions)" \ 2164 "\n -n Make no changes to the filesystem" \ 2165 "\n -y Assume 'yes' to all questions" \ 2166 "\n -c Check for bad blocks and add them to the badblock list" \ 2167 "\n -f Force checking even if filesystem is marked clean" \ 2168 "\n -v Verbose" \ 2169 "\n -b superblock Use alternative superblock" \ 2170 "\n -B blocksize Force blocksize when looking for superblock" \ 2171 "\n -j journal Set location of the external journal" \ 2172 "\n -l file Add to badblocks list" \ 2173 "\n -L file Set badblocks list" \ 2174 */ 795 2175 796 2176 #define echo_trivial_usage \ 797 USE_FEATURE_FANCY_ECHO("[-neE] ") "[ARG ...]"798 #define echo_full_usage \2177 IF_FEATURE_FANCY_ECHO("[-neE] ") "[ARG]..." 2178 #define echo_full_usage "\n\n" \ 799 2179 "Print the specified ARGs to stdout" \ 800 USE_FEATURE_FANCY_ECHO(\801 "\n\nOptions:\n" \802 " -n Suppress trailing newline\n" \803 " -e Interpret backslash-escaped characters (i.e., \\t=tab)\n" \804 " -E Disable interpretation of backslash-escaped characters" \2180 IF_FEATURE_FANCY_ECHO( "\n" \ 2181 "\nOptions:" \ 2182 "\n -n Suppress trailing newline" \ 2183 "\n -e Interpret backslash escapes (i.e., \\t=tab)" \ 2184 "\n -E Don't interpret backslash escapes (default)" \ 805 2185 ) 806 2186 #define echo_example_usage \ 807 2187 "$ echo \"Erik is cool\"\n" \ 808 2188 "Erik is cool\n" \ 809 USE_FEATURE_FANCY_ECHO("$ echo -e \"Erik\\nis\\ncool\"\n" \2189 IF_FEATURE_FANCY_ECHO("$ echo -e \"Erik\\nis\\ncool\"\n" \ 810 2190 "Erik\n" \ 811 2191 "is\n" \ … … 816 2196 #define eject_trivial_usage \ 817 2197 "[-t] [-T] [DEVICE]" 818 #define eject_full_usage \ 819 "Eject specified DEVICE (or default /dev/cdrom)" \ 820 "\n\nOptions:\n" \ 821 " -t Close tray\n" \ 822 " -T Open/close tray (toggle)" 2198 #define eject_full_usage "\n\n" \ 2199 "Eject DEVICE or default /dev/cdrom\n" \ 2200 "\nOptions:" \ 2201 IF_FEATURE_EJECT_SCSI( \ 2202 "\n -s SCSI device" \ 2203 ) \ 2204 "\n -t Close tray" \ 2205 "\n -T Open/close tray (toggle)" \ 823 2206 824 2207 #define ed_trivial_usage "" … … 826 2209 827 2210 #define env_trivial_usage \ 828 "[-iu] [-] [name=value]... [ command]"829 #define env_full_usage \830 "Print the current environment or run a program after setting\n" \831 " up the specified environment" \832 "\n\nOptions:\n" \833 " -, -i Start with an empty environment\n" \834 " -u Remove variable from the environment"2211 "[-iu] [-] [name=value]... [PROG ARGS]" 2212 #define env_full_usage "\n\n" \ 2213 "Print the current environment or run PROG after setting up\n" \ 2214 "the specified environment\n" \ 2215 "\nOptions:" \ 2216 "\n -, -i Start with an empty environment" \ 2217 "\n -u Remove variable from the environment" \ 835 2218 836 2219 #define ether_wake_trivial_usage \ 837 2220 "[-b] [-i iface] [-p aa:bb:cc:dd[:ee:ff]] MAC" 838 #define ether_wake_full_usage \2221 #define ether_wake_full_usage "\n\n" \ 839 2222 "Send a magic packet to wake up sleeping machines.\n" \ 840 2223 "MAC must be a station address (00:11:22:33:44:55) or\n" \ 841 "a hostname with a known 'ethers' entry. " \842 "\n\nOptions:\n" \843 " -b Send wake-up packet to the broadcast address\n" \844 " -i iface Use interface ifname instead of the default \"eth0\"\n" \845 " -p pass Append the four or six byte password PW to the packet"2224 "a hostname with a known 'ethers' entry.\n" \ 2225 "\nOptions:" \ 2226 "\n -b Send wake-up packet to the broadcast address" \ 2227 "\n -i iface Interface to use (default eth0)" \ 2228 "\n -p pass Append four or six byte password PW to the packet" \ 846 2229 847 2230 #define expand_trivial_usage \ 848 "[-i] [-t NUM] [FILE|-]" 849 #define expand_full_usage \ 850 "Convert tabs to spaces, writing to standard output." \ 851 "\n\nOptions:" \ 852 "\n -i" USE_FEATURE_EXPAND_LONG_OPTIONS(",--initial") \ 853 " Do not convert tabs after non blanks" \ 854 "\n -t" USE_FEATURE_EXPAND_LONG_OPTIONS(",--tabs=N") \ 855 " Tabstops every N chars" 2231 "[-i] [-t N] [FILE]..." 2232 #define expand_full_usage "\n\n" \ 2233 "Convert tabs to spaces, writing to stdout\n" \ 2234 "\nOptions:" \ 2235 IF_FEATURE_EXPAND_LONG_OPTIONS( \ 2236 "\n -i,--initial Don't convert tabs after non blanks" \ 2237 "\n -t,--tabs=N Tabstops every N chars" \ 2238 ) \ 2239 IF_NOT_FEATURE_EXPAND_LONG_OPTIONS( \ 2240 "\n -i Don't convert tabs after non blanks" \ 2241 "\n -t Tabstops every N chars" \ 2242 ) 856 2243 857 2244 #define expr_trivial_usage \ 858 2245 "EXPRESSION" 859 #define expr_full_usage \ 860 "Print the value of EXPRESSION to standard output.\n\n" \ 2246 #define expr_full_usage "\n\n" \ 2247 "Print the value of EXPRESSION to stdout\n" \ 2248 "\n" \ 861 2249 "EXPRESSION may be:\n" \ 862 " ARG1 | 863 " ARG1 & 864 " ARG1 < ARG2 ARG1 is less than ARG2\n" \865 " ARG1 <= ARG2 ARG1 is less than or equal to ARG2\n" \866 " ARG1 = ARG2 ARG1 is equal toARG2\n" \867 " ARG1 != ARG2 ARG1 is unequal to ARG2\n" \868 " ARG1 >= ARG2 ARG1 is greater than or equal to ARG2\n" \869 " ARG1 > ARG2 ARG1 is greater thanARG2\n" \870 " ARG1 + ARG2 Sum of ARG1 and ARG2\n" \871 " ARG1 - ARG2 Difference of ARG1 andARG2\n" \872 " ARG1 * ARG2 Product of ARG1 andARG2\n" \873 " ARG1 / ARG2 Quotient of ARG1 divided byARG2\n" \874 " ARG1 % ARG2 Remainder of ARG1 divided byARG2\n" \2250 " ARG1 | ARG2 ARG1 if it is neither null nor 0, otherwise ARG2\n" \ 2251 " ARG1 & ARG2 ARG1 if neither argument is null or 0, otherwise 0\n" \ 2252 " ARG1 < ARG2 1 if ARG1 is less than ARG2, else 0. Similarly:\n" \ 2253 " ARG1 <= ARG2\n" \ 2254 " ARG1 = ARG2\n" \ 2255 " ARG1 != ARG2\n" \ 2256 " ARG1 >= ARG2\n" \ 2257 " ARG1 > ARG2\n" \ 2258 " ARG1 + ARG2 Sum of ARG1 and ARG2. Similarly:\n" \ 2259 " ARG1 - ARG2\n" \ 2260 " ARG1 * ARG2\n" \ 2261 " ARG1 / ARG2\n" \ 2262 " ARG1 % ARG2\n" \ 875 2263 " STRING : REGEXP Anchored pattern match of REGEXP in STRING\n" \ 876 2264 " match STRING REGEXP Same as STRING : REGEXP\n" \ … … 881 2269 " it is a keyword like 'match' or an\n" \ 882 2270 " operator like '/'\n" \ 883 " (EXPRESSION) Value of EXPRESSION\n\n" \ 2271 " (EXPRESSION) Value of EXPRESSION\n" \ 2272 "\n" \ 884 2273 "Beware that many operators need to be escaped or quoted for shells.\n" \ 885 2274 "Comparisons are arithmetic if both ARGs are numbers, else\n" \ … … 890 2279 #define fakeidentd_trivial_usage \ 891 2280 "[-fiw] [-b ADDR] [STRING]" 892 #define fakeidentd_full_usage \893 "Provide fake ident (auth) service " \894 "\n\nOptions:" \895 896 897 898 899 "\n STRING Ident answer string (default is 'nobody')"2281 #define fakeidentd_full_usage "\n\n" \ 2282 "Provide fake ident (auth) service\n" \ 2283 "\nOptions:" \ 2284 "\n -f Run in foreground" \ 2285 "\n -i Inetd mode" \ 2286 "\n -w Inetd 'wait' mode" \ 2287 "\n -b ADDR Bind to specified address" \ 2288 "\n STRING Ident answer string (default: nobody)" \ 900 2289 901 2290 #define false_trivial_usage \ 902 2291 "" 903 #define false_full_usage \2292 #define false_full_usage "\n\n" \ 904 2293 "Return an exit code of FALSE (1)" 2294 905 2295 #define false_example_usage \ 906 2296 "$ false\n" \ … … 908 2298 "1\n" 909 2299 2300 #define fbsplash_trivial_usage \ 2301 "-s IMGFILE [-c] [-d DEV] [-i INIFILE] [-f CMD]" 2302 #define fbsplash_full_usage "\n\n" \ 2303 "Options:" \ 2304 "\n -s Image" \ 2305 "\n -c Hide cursor" \ 2306 "\n -d Framebuffer device (default /dev/fb0)" \ 2307 "\n -i Config file (var=value):" \ 2308 "\n BAR_LEFT,BAR_TOP,BAR_WIDTH,BAR_HEIGHT" \ 2309 "\n BAR_R,BAR_G,BAR_B" \ 2310 "\n -f Control pipe (else exit after drawing image)" \ 2311 "\n commands: 'NN' (% for progress bar) or 'exit'" \ 2312 910 2313 #define fbset_trivial_usage \ 911 "[ options] [mode]"912 #define fbset_full_usage \2314 "[OPTIONS] [MODE]" 2315 #define fbset_full_usage "\n\n" \ 913 2316 "Show and modify frame buffer settings" 2317 914 2318 #define fbset_example_usage \ 915 2319 "$ fbset\n" \ … … 924 2328 #define fdflush_trivial_usage \ 925 2329 "DEVICE" 926 #define fdflush_full_usage \2330 #define fdflush_full_usage "\n\n" \ 927 2331 "Force floppy disk drive to detect disk change" 928 2332 929 2333 #define fdformat_trivial_usage \ 930 2334 "[-n] DEVICE" 931 #define fdformat_full_usage \ 932 "Format floppy disk" \ 933 "\n\nOptions:\n" \ 934 " -n Don't verify after format" 2335 #define fdformat_full_usage "\n\n" \ 2336 "Format floppy disk\n" \ 2337 "\nOptions:" \ 2338 "\n -n Don't verify after format" \ 2339 2340 /* Looks like someone forgot to add this to config system */ 2341 #ifndef ENABLE_FEATURE_FDISK_BLKSIZE 2342 # define ENABLE_FEATURE_FDISK_BLKSIZE 0 2343 # define IF_FEATURE_FDISK_BLKSIZE(a) 2344 #endif 935 2345 936 2346 #define fdisk_trivial_usage \ 937 "[-luv] [-C CYLINDERS] [-H HEADS] [-S SECTORS] [-b SSZ] DISK" 938 #define fdisk_full_usage \ 939 "Change partition table" \ 940 "\n\nOptions:\n" \ 941 " -l List partition table(s)\n" \ 942 " -u Give Start and End in sector (instead of cylinder) units\n" \ 943 " -s PARTITION Give partition size(s) in blocks\n" \ 944 " -b 2048 (for certain MO disks) use 2048-byte sectors\n" \ 945 " -C CYLINDERS Set the number of cylinders\n" \ 946 " -H HEADS Set the number of heads\n" \ 947 " -S SECTORS Set the number of sectors\n" \ 948 " -v Give fdisk version" 949 950 #define find_trivial_usage \ 951 "[PATH...] [EXPRESSION]" 952 #define find_full_usage \ 953 "Search for files in a directory hierarchy. The default PATH is\n" \ 954 "the current directory, default EXPRESSION is '-print'\n" \ 955 "\nEXPRESSION may consist of:" \ 956 "\n -follow Dereference symlinks" \ 957 USE_FEATURE_FIND_XDEV( \ 958 "\n -xdev Don't descend directories on other filesystems") \ 959 USE_FEATURE_FIND_MAXDEPTH( \ 960 "\n -maxdepth N Descend at most N levels. -maxdepth 0 applies" \ 961 "\n tests/actions to command line arguments only") \ 962 "\n -name PATTERN File name (w/o directory name) matches PATTERN" \ 963 USE_FEATURE_FIND_PATH( \ 964 "\n -path PATTERN Path matches PATTERN") \ 965 USE_FEATURE_FIND_REGEX( \ 966 "\n -regex PATTERN Path matches regex PATTERN") \ 967 USE_FEATURE_FIND_TYPE( \ 968 "\n -type X File type is X (X is one of: f,d,l,b,c,...)") \ 969 USE_FEATURE_FIND_PERM( \ 970 "\n -perm NNN Permissions match any of (+NNN), all of (-NNN)," \ 971 "\n or exactly (NNN)") \ 972 USE_FEATURE_FIND_MTIME( \ 973 "\n -mtime DAYS Modified time is greater than (+N), less than (-N)," \ 974 "\n or exactly (N) days") \ 975 USE_FEATURE_FIND_MMIN( \ 976 "\n -mmin MINS Modified time is greater than (+N), less than (-N)," \ 977 "\n or exactly (N) minutes") \ 978 USE_FEATURE_FIND_NEWER( \ 979 "\n -newer FILE Modified time is more recent than FILE's") \ 980 USE_FEATURE_FIND_INUM( \ 981 "\n -inum N File has inode number N") \ 982 USE_FEATURE_FIND_USER( \ 983 "\n -user NAME File is owned by user NAME (numeric user ID allowed)") \ 984 USE_FEATURE_FIND_GROUP( \ 985 "\n -group NAME File belongs to group NAME (numeric group ID allowed)") \ 986 USE_FEATURE_FIND_DEPTH( \ 987 "\n -depth Process directory name after traversing it") \ 988 USE_FEATURE_FIND_SIZE( \ 989 "\n -size N[bck] File size is N (c:bytes,k:kbytes,b:512 bytes(def.))." \ 990 "\n +/-N: file size is bigger/smaller than N") \ 991 "\n -print Print (default and assumed)" \ 992 USE_FEATURE_FIND_PRINT0( \ 993 "\n -print0 Delimit output with null characters rather than" \ 994 "\n newlines") \ 995 USE_FEATURE_FIND_CONTEXT ( \ 996 "\n -context File has specified security context") \ 997 USE_FEATURE_FIND_EXEC( \ 998 "\n -exec CMD ARG ; Execute CMD with all instances of {} replaced by the" \ 999 "\n matching files") \ 1000 USE_FEATURE_FIND_PRUNE( \ 1001 "\n -prune Stop traversing current subtree") \ 1002 USE_FEATURE_FIND_DELETE( \ 1003 "\n -delete Delete files, turns on -depth option") \ 1004 USE_FEATURE_FIND_PAREN( \ 1005 "\n (EXPR) Group an expression") \ 1006 1007 #define find_example_usage \ 1008 "$ find / -name passwd\n" \ 1009 "/etc/passwd\n" 2347 "[-ul" IF_FEATURE_FDISK_BLKSIZE("s") "] " \ 2348 "[-C CYLINDERS] [-H HEADS] [-S SECTORS] [-b SSZ] DISK" 2349 #define fdisk_full_usage "\n\n" \ 2350 "Change partition table\n" \ 2351 "\nOptions:" \ 2352 "\n -u Start and End are in sectors (instead of cylinders)" \ 2353 "\n -l Show partition table for each DISK, then exit" \ 2354 IF_FEATURE_FDISK_BLKSIZE( \ 2355 "\n -s Show partition sizes in kb for each DISK, then exit" \ 2356 ) \ 2357 "\n -b 2048 (for certain MO disks) use 2048-byte sectors" \ 2358 "\n -C CYLINDERS Set number of cylinders/heads/sectors" \ 2359 "\n -H HEADS" \ 2360 "\n -S SECTORS" \ 2361 2362 #define fgconsole_trivial_usage \ 2363 "" 2364 #define fgconsole_full_usage "\n\n" \ 2365 "Get active console" 2366 2367 #define findfs_trivial_usage \ 2368 "LABEL=label or UUID=uuid" 2369 #define findfs_full_usage "\n\n" \ 2370 "Find a filesystem device based on a label or UUID" 2371 #define findfs_example_usage \ 2372 "$ findfs LABEL=MyDevice" 2373 2374 #define flash_lock_trivial_usage \ 2375 "MTD_DEVICE OFFSET SECTORS" 2376 #define flash_lock_full_usage "\n\n" \ 2377 "Lock part or all of an MTD device. If SECTORS is -1, then all sectors\n" \ 2378 "will be locked, regardless of the value of OFFSET" 2379 2380 #define flash_unlock_trivial_usage \ 2381 "MTD_DEVICE" 2382 #define flash_unlock_full_usage "\n\n" \ 2383 "Unlock an MTD device" 2384 2385 #define flash_eraseall_trivial_usage \ 2386 "[-jq] MTD_DEVICE" 2387 #define flash_eraseall_full_usage "\n\n" \ 2388 "Erase an MTD device\n" \ 2389 "\nOptions:" \ 2390 "\n -j Format the device for jffs2" \ 2391 "\n -q Don't display progress messages" \ 2392 2393 #define flashcp_trivial_usage \ 2394 "-v FILE MTD_DEVICE" 2395 #define flashcp_full_usage "\n\n" \ 2396 "Copy an image to MTD device\n" \ 2397 "\nOptions:" \ 2398 "\n -v Verbose" \ 2399 2400 #define flock_trivial_usage \ 2401 "[-sxun] FD|{FILE [-c] PROG ARGS}" 2402 #define flock_full_usage "\n\n" \ 2403 "[Un]lock file descriptor, or lock FILE, run PROG\n" \ 2404 "\nOptions:" \ 2405 "\n -s Shared lock" \ 2406 "\n -x Exclusive lock (default)" \ 2407 "\n -u Unlock FD" \ 2408 "\n -n Fail rather than wait" \ 1010 2409 1011 2410 #define fold_trivial_usage \ 1012 "[-bs] [-w WIDTH] [FILE]" 1013 #define fold_full_usage \ 1014 "Wrap input lines in each FILE (standard input by default), writing to\n" \ 1015 "standard output" \ 1016 "\n\nOptions:\n" \ 1017 " -b Count bytes rather than columns\n" \ 1018 " -s Break at spaces\n" \ 1019 " -w Use WIDTH columns instead of 80" 2411 "[-bs] [-w WIDTH] [FILE]..." 2412 #define fold_full_usage "\n\n" \ 2413 "Wrap input lines in each FILE (or stdin), writing to stdout\n" \ 2414 "\nOptions:" \ 2415 "\n -b Count bytes rather than columns" \ 2416 "\n -s Break at spaces" \ 2417 "\n -w Use WIDTH columns instead of 80" \ 1020 2418 1021 2419 #define free_trivial_usage \ 1022 "" 1023 #define free_full_usage \2420 "" IF_DESKTOP("[-b/k/m/g]") 2421 #define free_full_usage "\n\n" \ 1024 2422 "Display the amount of free and used system memory" 1025 2423 #define free_example_usage \ … … 1032 2430 #define freeramdisk_trivial_usage \ 1033 2431 "DEVICE" 1034 #define freeramdisk_full_usage \2432 #define freeramdisk_full_usage "\n\n" \ 1035 2433 "Free all memory used by the specified ramdisk" 1036 2434 #define freeramdisk_example_usage \ … … 1038 2436 1039 2437 #define fsck_trivial_usage \ 1040 "[-ANPRTV] [-C fd] [-t fstype] [fs-options] [filesys ...]"1041 #define fsck_full_usage \1042 "Check and repair filesystems " \1043 "\n\nOptions:\n" \1044 " -A Walk /etc/fstab and check all filesystems\n" \1045 " -N Don't execute, just show what would be done\n" \1046 " -P When using -A, check filesystems in parallel\n" \1047 " -R When using -A, skip the root filesystem\n" \1048 " -T Don't show title on startup\n" \1049 " -V Verbose\n" \1050 " -C n Write status information to specified filedescriptor\n" \1051 " -t type List of filesystem types to check"2438 "[-ANPRTV] [-C FD] [-t FSTYPE] [FS_OPTS] [BLOCKDEV]..." 2439 #define fsck_full_usage "\n\n" \ 2440 "Check and repair filesystems\n" \ 2441 "\nOptions:" \ 2442 "\n -A Walk /etc/fstab and check all filesystems" \ 2443 "\n -N Don't execute, just show what would be done" \ 2444 "\n -P With -A, check filesystems in parallel" \ 2445 "\n -R With -A, skip the root filesystem" \ 2446 "\n -T Don't show title on startup" \ 2447 "\n -V Verbose" \ 2448 "\n -C n Write status information to specified filedescriptor" \ 2449 "\n -t TYPE List of filesystem types to check" \ 1052 2450 1053 2451 #define fsck_minix_trivial_usage \ 1054 "[-larvsmf] /dev/name" 1055 #define fsck_minix_full_usage \ 1056 "Perform a consistency check for MINIX filesystems" \ 1057 "\n\nOptions:\n" \ 1058 " -l Lists all filenames\n" \ 1059 " -r Perform interactive repairs\n" \ 1060 " -a Perform automatic repairs\n" \ 1061 " -v Verbose\n" \ 1062 " -s Outputs super-block information\n" \ 1063 " -m Activates MINIX-like \"mode not cleared\" warnings\n" \ 1064 " -f Force file system check" 2452 "[-larvsmf] BLOCKDEV" 2453 #define fsck_minix_full_usage "\n\n" \ 2454 "Check MINIX filesystem\n" \ 2455 "\nOptions:" \ 2456 "\n -l List all filenames" \ 2457 "\n -r Perform interactive repairs" \ 2458 "\n -a Perform automatic repairs" \ 2459 "\n -v Verbose" \ 2460 "\n -s Output superblock information" \ 2461 "\n -m Show \"mode not cleared\" warnings" \ 2462 "\n -f Force file system check" \ 2463 2464 #define ftpd_trivial_usage \ 2465 "[-wvS] [-t N] [-T N] [DIR]" 2466 #define ftpd_full_usage "\n\n" \ 2467 "Anonymous FTP server\n" \ 2468 "\n" \ 2469 "ftpd should be used as an inetd service.\n" \ 2470 "ftpd's line for inetd.conf:\n" \ 2471 " 21 stream tcp nowait root ftpd ftpd /files/to/serve\n" \ 2472 "It also can be ran from tcpsvd:\n" \ 2473 " tcpsvd -vE 0.0.0.0 21 ftpd /files/to/serve\n" \ 2474 "\nOptions:" \ 2475 "\n -w Allow upload" \ 2476 "\n -v Log to stderr" \ 2477 "\n -S Log to syslog" \ 2478 "\n -t,-T Idle and absolute timeouts" \ 2479 "\n DIR Change root to this directory" \ 1065 2480 1066 2481 #define ftpget_trivial_usage \ 1067 "[options] remote-host local-file remote-file" 1068 #define ftpget_full_usage \ 1069 "Retrieve a remote file via FTP" \ 1070 "\n\nOptions:\n" \ 1071 " -c, --continue Continue a previous transfer\n" \ 1072 " -v, --verbose Verbose\n" \ 1073 " -u, --username Username to be used\n" \ 1074 " -p, --password Password to be used\n" \ 1075 " -P, --port Port number to be used" 2482 "[OPTIONS] HOST [LOCAL_FILE] REMOTE_FILE" 2483 #define ftpget_full_usage "\n\n" \ 2484 "Retrieve a remote file via FTP\n" \ 2485 "\nOptions:" \ 2486 IF_FEATURE_FTPGETPUT_LONG_OPTIONS( \ 2487 "\n -c,--continue Continue previous transfer" \ 2488 "\n -v,--verbose Verbose" \ 2489 "\n -u,--username Username" \ 2490 "\n -p,--password Password" \ 2491 "\n -P,--port Port number" \ 2492 ) \ 2493 IF_NOT_FEATURE_FTPGETPUT_LONG_OPTIONS( \ 2494 "\n -c Continue previous transfer" \ 2495 "\n -v Verbose" \ 2496 "\n -u Username" \ 2497 "\n -p Password" \ 2498 "\n -P Port number" \ 2499 ) 1076 2500 1077 2501 #define ftpput_trivial_usage \ 1078 "[options] remote-host remote-file local-file" 1079 #define ftpput_full_usage \ 1080 "Store a local file on a remote machine via FTP" \ 1081 "\n\nOptions:\n" \ 1082 " -v, --verbose Verbose\n" \ 1083 " -u, --username Username to be used\n" \ 1084 " -p, --password Password to be used\n" \ 1085 " -P, --port Port number to be used" 2502 "[OPTIONS] HOST [REMOTE_FILE] LOCAL_FILE" 2503 #define ftpput_full_usage "\n\n" \ 2504 "Store a local file on a remote machine via FTP\n" \ 2505 "\nOptions:" \ 2506 IF_FEATURE_FTPGETPUT_LONG_OPTIONS( \ 2507 "\n -v,--verbose Verbose" \ 2508 "\n -u,--username Username" \ 2509 "\n -p,--password Password" \ 2510 "\n -P,--port Port number" \ 2511 ) \ 2512 IF_NOT_FEATURE_FTPGETPUT_LONG_OPTIONS( \ 2513 "\n -v Verbose" \ 2514 "\n -u Username" \ 2515 "\n -p Password" \ 2516 "\n -P Port number" \ 2517 ) 1086 2518 1087 2519 #define fuser_trivial_usage \ 1088 "[ options] file OR port/proto"1089 #define fuser_full_usage \1090 " Options:\n" \1091 " -m Show all processes on the same mounted fs\n" \1092 " -k Kill all processes that match\n" \1093 " -s Don't print or kill anything\n" \1094 " -4 When using port/proto only search IPv4 space\n" \1095 " -6 When using port/proto only search IPv6 space\n" \1096 " -SIGNAL When used with -k, this signal will be used to kill"1097 1098 #define getenforce_trivial_usage 1099 #define getenforce_full_usage 2520 "[OPTIONS] FILE or PORT/PROTO" 2521 #define fuser_full_usage "\n\n" \ 2522 "Find processes which use FILEs or PORTs\n" \ 2523 "\nOptions:" \ 2524 "\n -m Find processes which use same fs as FILEs" \ 2525 "\n -4,-6 Search only IPv4/IPv6 space" \ 2526 "\n -s Don't display PIDs" \ 2527 "\n -k Kill found processes" \ 2528 "\n -SIGNAL Signal to send (default: KILL)" \ 2529 2530 #define getenforce_trivial_usage NOUSAGE_STR 2531 #define getenforce_full_usage "" 1100 2532 1101 2533 #define getopt_trivial_usage \ 1102 "[OPTIONS]..." 1103 #define getopt_full_usage \ 1104 "Parse command options\n" \ 1105 " -a, --alternative Allow long options starting with single -\n" \ 1106 " -l, --longoptions=longopts Long options to be recognized\n" \ 1107 " -n, --name=progname The name under which errors are reported\n" \ 1108 " -o, --options=optstring Short options to be recognized\n" \ 1109 " -q, --quiet Disable error reporting by getopt(3)\n" \ 1110 " -Q, --quiet-output No normal output\n" \ 1111 " -s, --shell=shell Set shell quoting conventions\n" \ 1112 " -T, --test Test for getopt(1) version\n" \ 1113 " -u, --unquoted Do not quote the output" 2534 "[OPTIONS]" 2535 #define getopt_full_usage "\n\n" \ 2536 "Options:" \ 2537 IF_LONG_OPTS( \ 2538 "\n -a,--alternative Allow long options starting with single -" \ 2539 "\n -l,--longoptions=longopts Long options to be recognized" \ 2540 "\n -n,--name=progname The name under which errors are reported" \ 2541 "\n -o,--options=optstring Short options to be recognized" \ 2542 "\n -q,--quiet Disable error reporting by getopt(3)" \ 2543 "\n -Q,--quiet-output No normal output" \ 2544 "\n -s,--shell=shell Set shell quoting conventions" \ 2545 "\n -T,--test Test for getopt(1) version" \ 2546 "\n -u,--unquoted Don't quote the output" \ 2547 ) \ 2548 IF_NOT_LONG_OPTS( \ 2549 "\n -a Allow long options starting with single -" \ 2550 "\n -l longopts Long options to be recognized" \ 2551 "\n -n progname The name under which errors are reported" \ 2552 "\n -o optstring Short options to be recognized" \ 2553 "\n -q Disable error reporting by getopt(3)" \ 2554 "\n -Q No normal output" \ 2555 "\n -s shell Set shell quoting conventions" \ 2556 "\n -T Test for getopt(1) version" \ 2557 "\n -u Don't quote the output" \ 2558 ) 1114 2559 #define getopt_example_usage \ 1115 2560 "$ cat getopt.test\n" \ … … 1117 2562 "GETOPT=`getopt -o ab:c:: --long a-long,b-long:,c-long:: \\\n" \ 1118 2563 " -n 'example.busybox' -- \"$@\"`\n" \ 1119 "if [ $? != 0 ]; then 2564 "if [ $? != 0 ]; then exit 1; fi\n" \ 1120 2565 "eval set -- \"$GETOPT\"\n" \ 1121 2566 "while true; do\n" \ … … 1135 2580 #define getsebool_trivial_usage \ 1136 2581 "-a or getsebool boolean..." 1137 #define getsebool_full_usage \1138 " -a Show all SELinux booleans"2582 #define getsebool_full_usage "\n\n" \ 2583 " -a Show all selinux booleans" 1139 2584 1140 2585 #define getty_trivial_usage \ 1141 "[OPTIONS]... baud_rate,... line [termtype]" 1142 #define getty_full_usage \ 1143 "Open a tty, prompt for a login name, then invoke /bin/login" \ 1144 "\n\nOptions:\n" \ 1145 " -h Enable hardware (RTS/CTS) flow control\n" \ 1146 " -i Do not display /etc/issue before running login\n" \ 1147 " -L Local line, so do not do carrier detect\n" \ 1148 " -m Get baud rate from modem's CONNECT status message\n" \ 1149 " -w Wait for a CR or LF before sending /etc/issue\n" \ 1150 " -n Do not prompt the user for a login name\n" \ 1151 " -f issue_file Display issue_file instead of /etc/issue\n" \ 1152 " -l login_app Invoke login_app instead of /bin/login\n" \ 1153 " -t timeout Terminate after timeout if no username is read\n" \ 1154 " -I initstring Sets the init string to send before anything else\n" \ 1155 " -H login_host Log login_host into the utmp file as the hostname" 1156 1157 #define grep_trivial_usage \ 1158 "[-HhrilLnqvso" \ 1159 USE_DESKTOP("w") \ 1160 "eF" \ 1161 USE_FEATURE_GREP_EGREP_ALIAS("E") \ 1162 USE_FEATURE_GREP_CONTEXT("ABC") \ 1163 "] PATTERN [FILEs...]" 1164 #define grep_full_usage \ 1165 "Search for PATTERN in each FILE or standard input" \ 1166 "\n\nOptions:" \ 1167 "\n -H Prefix output lines with filename where match was found" \ 1168 "\n -h Suppress the prefixing filename on output" \ 1169 "\n -r Recurse subdirectories" \ 1170 "\n -i Ignore case distinctions" \ 1171 "\n -l List names of files that match" \ 1172 "\n -L List names of files that do not match" \ 1173 "\n -n Print line number with output lines" \ 1174 "\n -q Quiet. Returns 0 if PATTERN was found, 1 otherwise" \ 1175 "\n -v Select non-matching lines" \ 1176 "\n -s Suppress file open/read error messages" \ 1177 "\n -c Only print count of matching lines" \ 1178 "\n -o Show only the part of a line that matches PATTERN" \ 1179 "\n -m MAX Match up to MAX times per file" \ 1180 USE_DESKTOP( \ 1181 "\n -w Match whole words only") \ 1182 "\n -F PATTERN is a set of newline-separated strings" \ 1183 USE_FEATURE_GREP_EGREP_ALIAS( \ 1184 "\n -E PATTERN is an extended regular expression") \ 1185 "\n -e PTRN Pattern to match" \ 1186 "\n -f FILE Read pattern from file" \ 1187 USE_FEATURE_GREP_CONTEXT( \ 1188 "\n -A Print NUM lines of trailing context" \ 1189 "\n -B Print NUM lines of leading context" \ 1190 "\n -C Print NUM lines of output context") \ 1191 1192 #define grep_example_usage \ 1193 "$ grep root /etc/passwd\n" \ 1194 "root:x:0:0:root:/root:/bin/bash\n" \ 1195 "$ grep ^[rR]oo. /etc/passwd\n" \ 1196 "root:x:0:0:root:/root:/bin/bash\n" 2586 "[OPTIONS] BAUD_RATE TTY [TERMTYPE]" 2587 #define getty_full_usage "\n\n" \ 2588 "Open a tty, prompt for a login name, then invoke /bin/login\n" \ 2589 "\nOptions:" \ 2590 "\n -h Enable hardware (RTS/CTS) flow control" \ 2591 "\n -i Don't display /etc/issue before running login" \ 2592 "\n -L Local line, don't do carrier detect" \ 2593 "\n -m Get baud rate from modem's CONNECT status message" \ 2594 "\n -w Wait for a CR or LF before sending /etc/issue" \ 2595 "\n -n Don't prompt the user for a login name" \ 2596 "\n -f ISSUE_FILE Display ISSUE_FILE instead of /etc/issue" \ 2597 "\n -l LOGIN Invoke LOGIN instead of /bin/login" \ 2598 "\n -t SEC Terminate after SEC if no username is read" \ 2599 "\n -I INITSTR Send INITSTR before anything else" \ 2600 "\n -H HOST Log HOST into the utmp file as the hostname" \ 1197 2601 1198 2602 #define gunzip_trivial_usage \ 1199 "[OPTION]... FILE" 1200 #define gunzip_full_usage \ 1201 "Uncompress FILE (or standard input if FILE is '-')" \ 1202 "\n\nOptions:\n" \ 1203 " -c Write output to standard output\n" \ 1204 " -f Force read when source is a terminal\n" \ 1205 " -t Test compressed file integrity" 2603 "[-cft] [FILE]..." 2604 #define gunzip_full_usage "\n\n" \ 2605 "Decompress FILEs (or stdin)\n" \ 2606 "\nOptions:" \ 2607 "\n -c Write to stdout" \ 2608 "\n -f Force" \ 2609 "\n -t Test file integrity" \ 2610 1206 2611 #define gunzip_example_usage \ 1207 2612 "$ ls -la /tmp/BusyBox*\n" \ … … 1212 2617 1213 2618 #define gzip_trivial_usage \ 1214 "[ OPTION]...[FILE]..."1215 #define gzip_full_usage \1216 "Compress FILE (s) with maximum compression.\n" \1217 "When FILE is '-' or unspecified, reads standard input. Implies -c." \1218 "\n\nOptions:\n" \1219 " -c Write output to standard output instead of FILE.gz\n" \1220 " -d Decompress\n" \1221 " -f Force write when destination is a terminal" 2619 "[-cfd] [FILE]..." 2620 #define gzip_full_usage "\n\n" \ 2621 "Compress FILEs (or stdin)\n" \ 2622 "\nOptions:" \ 2623 "\n -d Decompress" \ 2624 "\n -c Write to stdout" \ 2625 "\n -f Force" \ 2626 1222 2627 #define gzip_example_usage \ 1223 2628 "$ ls -la /tmp/busybox*\n" \ … … 1227 2632 "-rw-rw-r-- 1 andersen andersen 554058 Apr 14 17:49 /tmp/busybox.tar.gz\n" 1228 2633 1229 #define halt_trivial_usage \1230 "[-d delay] [-n] [-f]"1231 #define halt_full_usage \1232 "Halt the system" \1233 "\n\nOptions:\n" \1234 " -d Delay interval for halting\n" \1235 " -n No call to sync()\n" \1236 " -f Force halt (don't go through init)"1237 1238 2634 #define hdparm_trivial_usage \ 1239 "[options] [device] .." 1240 #define hdparm_full_usage \ 1241 USE_FEATURE_HDPARM_GET_IDENTITY( \ 1242 "If no device name is specified try to read from stdin.\n\n") \ 1243 "Options:\n" \ 1244 " -a Get/set fs readahead\n" \ 1245 " -A Set drive read-lookahead flag (0/1)\n" \ 1246 " -b Get/set bus state (0 == off, 1 == on, 2 == tristate)\n" \ 1247 " -B Set Advanced Power Management setting (1-255)\n" \ 1248 " -c Get/set IDE 32-bit IO setting\n" \ 1249 " -C Check IDE power mode status\n" \ 1250 USE_FEATURE_HDPARM_HDIO_GETSET_DMA( \ 1251 " -d Get/set using_dma flag\n") \ 1252 " -D Enable/disable drive defect-mgmt\n" \ 1253 " -f Flush buffer cache for device on exit\n" \ 1254 " -g Display drive geometry\n" \ 1255 " -h Display terse usage information\n" \ 1256 USE_FEATURE_HDPARM_GET_IDENTITY( \ 1257 " -i Display drive identification\n") \ 1258 USE_FEATURE_HDPARM_GET_IDENTITY( \ 1259 " -I Detailed/current information directly from drive\n") \ 1260 " -k Get/set keep_settings_over_reset flag (0/1)\n" \ 1261 " -K Set drive keep_features_over_reset flag (0/1)\n" \ 1262 " -L Set drive doorlock (0/1) (removable harddisks only)\n" \ 1263 " -m Get/set multiple sector count\n" \ 1264 " -n Get/set ignore-write-errors flag (0/1)\n" \ 1265 " -p Set PIO mode on IDE interface chipset (0,1,2,3,4,...)\n" \ 1266 " -P Set drive prefetch count\n" \ 1267 " -q Change next setting quietly\n" \ 1268 " -Q Get/set DMA tagged-queuing depth (if supported)\n" \ 1269 " -r Get/set readonly flag (DANGEROUS to set)\n" \ 1270 USE_FEATURE_HDPARM_HDIO_SCAN_HWIF( \ 1271 " -R Register an IDE interface (DANGEROUS)\n") \ 1272 " -S Set standby (spindown) timeout\n" \ 1273 " -t Perform device read timings\n" \ 1274 " -T Perform cache read timings\n" \ 1275 " -u Get/set unmaskirq flag (0/1)\n" \ 1276 USE_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF( \ 1277 " -U Un-register an IDE interface (DANGEROUS)\n") \ 1278 " -v Defaults; same as -mcudkrag for IDE drives\n" \ 1279 " -V Display program version and exit immediately\n" \ 1280 USE_FEATURE_HDPARM_HDIO_DRIVE_RESET( \ 1281 " -w Perform device reset (DANGEROUS)\n") \ 1282 " -W Set drive write-caching flag (0/1) (DANGEROUS)\n" \ 1283 USE_FEATURE_HDPARM_HDIO_TRISTATE_HWIF( \ 1284 " -x Tristate device for hotswap (0/1) (DANGEROUS)\n") \ 1285 " -X Set IDE xfer mode (DANGEROUS)\n" \ 1286 " -y Put IDE drive in standby mode\n" \ 1287 " -Y Put IDE drive to sleep\n" \ 1288 " -Z Disable Seagate auto-powersaving mode\n" \ 1289 " -z Re-read partition table" 2635 "[OPTIONS] [DEVICE]" 2636 #define hdparm_full_usage "\n\n" \ 2637 "Options:" \ 2638 "\n -a Get/set fs readahead" \ 2639 "\n -A Set drive read-lookahead flag (0/1)" \ 2640 "\n -b Get/set bus state (0 == off, 1 == on, 2 == tristate)" \ 2641 "\n -B Set Advanced Power Management setting (1-255)" \ 2642 "\n -c Get/set IDE 32-bit IO setting" \ 2643 "\n -C Check IDE power mode status" \ 2644 IF_FEATURE_HDPARM_HDIO_GETSET_DMA( \ 2645 "\n -d Get/set using_dma flag") \ 2646 "\n -D Enable/disable drive defect-mgmt" \ 2647 "\n -f Flush buffer cache for device on exit" \ 2648 "\n -g Display drive geometry" \ 2649 "\n -h Display terse usage information" \ 2650 IF_FEATURE_HDPARM_GET_IDENTITY( \ 2651 "\n -i Display drive identification") \ 2652 IF_FEATURE_HDPARM_GET_IDENTITY( \ 2653 "\n -I Detailed/current information directly from drive") \ 2654 "\n -k Get/set keep_settings_over_reset flag (0/1)" \ 2655 "\n -K Set drive keep_features_over_reset flag (0/1)" \ 2656 "\n -L Set drive doorlock (0/1) (removable harddisks only)" \ 2657 "\n -m Get/set multiple sector count" \ 2658 "\n -n Get/set ignore-write-errors flag (0/1)" \ 2659 "\n -p Set PIO mode on IDE interface chipset (0,1,2,3,4,...)" \ 2660 "\n -P Set drive prefetch count" \ 2661 /* "\n -q Change next setting quietly" - not supported ib bbox */ \ 2662 "\n -Q Get/set DMA tagged-queuing depth (if supported)" \ 2663 "\n -r Get/set readonly flag (DANGEROUS to set)" \ 2664 IF_FEATURE_HDPARM_HDIO_SCAN_HWIF( \ 2665 "\n -R Register an IDE interface (DANGEROUS)") \ 2666 "\n -S Set standby (spindown) timeout" \ 2667 "\n -t Perform device read timings" \ 2668 "\n -T Perform cache read timings" \ 2669 "\n -u Get/set unmaskirq flag (0/1)" \ 2670 IF_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF( \ 2671 "\n -U Unregister an IDE interface (DANGEROUS)") \ 2672 "\n -v Defaults; same as -mcudkrag for IDE drives" \ 2673 "\n -V Display program version and exit immediately" \ 2674 IF_FEATURE_HDPARM_HDIO_DRIVE_RESET( \ 2675 "\n -w Perform device reset (DANGEROUS)") \ 2676 "\n -W Set drive write-caching flag (0/1) (DANGEROUS)" \ 2677 IF_FEATURE_HDPARM_HDIO_TRISTATE_HWIF( \ 2678 "\n -x Tristate device for hotswap (0/1) (DANGEROUS)") \ 2679 "\n -X Set IDE xfer mode (DANGEROUS)" \ 2680 "\n -y Put IDE drive in standby mode" \ 2681 "\n -Y Put IDE drive to sleep" \ 2682 "\n -Z Disable Seagate auto-powersaving mode" \ 2683 "\n -z Reread partition table" \ 1290 2684 1291 2685 #define head_trivial_usage \ 1292 "[OPTION]... [FILE]..." 1293 #define head_full_usage \ 1294 "Print first 10 lines of each FILE to standard output.\n" \ 1295 "With more than one FILE, precede each with a header giving the\n" \ 1296 "file name. With no FILE, or when FILE is -, read standard input." \ 1297 "\n\nOptions:" \ 1298 "\n -n NUM Print first NUM lines instead of first 10" \ 1299 USE_FEATURE_FANCY_HEAD( \ 1300 "\n -c NUM Output the first NUM bytes" \ 1301 "\n -q Never output headers giving file names" \ 1302 "\n -v Always output headers giving file names") 2686 "[OPTIONS] [FILE]..." 2687 #define head_full_usage "\n\n" \ 2688 "Print first 10 lines of each FILE (or stdin) to stdout.\n" \ 2689 "With more than one FILE, precede each with a filename header.\n" \ 2690 "\nOptions:" \ 2691 "\n -n N[kbm] Print first N lines" \ 2692 IF_FEATURE_FANCY_HEAD( \ 2693 "\n -c N[kbm] Print first N bytes" \ 2694 "\n -q Never print headers" \ 2695 "\n -v Always print headers" \ 2696 ) \ 2697 "\n" \ 2698 "\nN may be suffixed by k (x1024), b (x512), or m (x1024^2)." \ 2699 1303 2700 #define head_example_usage \ 1304 2701 "$ head -n 2 /etc/passwd\n" \ … … 1306 2703 "daemon:x:1:1:daemon:/usr/sbin:/bin/sh\n" 1307 2704 2705 #define tail_trivial_usage \ 2706 "[OPTIONS] [FILE]..." 2707 #define tail_full_usage "\n\n" \ 2708 "Print last 10 lines of each FILE (or stdin) to stdout.\n" \ 2709 "With more than one FILE, precede each with a filename header.\n" \ 2710 "\nOptions:" \ 2711 "\n -f Print data as file grows" \ 2712 IF_FEATURE_FANCY_TAIL( \ 2713 "\n -s SECONDS Wait SECONDS between reads with -f" \ 2714 ) \ 2715 "\n -n N[kbm] Print last N lines" \ 2716 IF_FEATURE_FANCY_TAIL( \ 2717 "\n -c N[kbm] Print last N bytes" \ 2718 "\n -q Never print headers" \ 2719 "\n -v Always print headers" \ 2720 "\n" \ 2721 "\nN may be suffixed by k (x1024), b (x512), or m (x1024^2)." \ 2722 "\nIf N starts with a '+', output begins with the Nth item from the start" \ 2723 "\nof each file, not from the end." \ 2724 ) \ 2725 2726 #define tail_example_usage \ 2727 "$ tail -n 1 /etc/resolv.conf\n" \ 2728 "nameserver 10.0.0.1\n" 2729 1308 2730 #define hexdump_trivial_usage \ 1309 "[-[bcCdefnosvx]] [OPTION] FILE" 1310 #define hexdump_full_usage \ 1311 "Display file(s) or standard input in a user specified format" \ 1312 "\n\nOptions:\n" \ 1313 " -b One-byte octal display\n" \ 1314 " -c One-byte character display\n" \ 1315 " -C Canonical hex+ASCII, 16 bytes per line\n" \ 1316 " -d Two-byte decimal display\n" \ 1317 " -e FORMAT STRING\n" \ 1318 " -f FORMAT FILE\n" \ 1319 " -n LENGTH Interpret only length bytes of input\n" \ 1320 " -o Two-byte octal display\n" \ 1321 " -s OFFSET Skip offset bytes\n" \ 1322 " -v Display all input data\n" \ 1323 " -x Two-byte hexadecimal display" 2731 "[-bcCdefnosvx" IF_FEATURE_HEXDUMP_REVERSE("R") "] [FILE]..." 2732 #define hexdump_full_usage "\n\n" \ 2733 "Display FILEs (or stdin) in a user specified format\n" \ 2734 "\nOptions:" \ 2735 "\n -b One-byte octal display" \ 2736 "\n -c One-byte character display" \ 2737 "\n -C Canonical hex+ASCII, 16 bytes per line" \ 2738 "\n -d Two-byte decimal display" \ 2739 "\n -e FORMAT STRING" \ 2740 "\n -f FORMAT FILE" \ 2741 "\n -n LENGTH Interpret only LENGTH bytes of input" \ 2742 "\n -o Two-byte octal display" \ 2743 "\n -s OFFSET Skip OFFSET bytes" \ 2744 "\n -v Display all input data" \ 2745 "\n -x Two-byte hexadecimal display" \ 2746 IF_FEATURE_HEXDUMP_REVERSE( \ 2747 "\n -R Reverse of 'hexdump -Cv'") \ 2748 2749 #define hd_trivial_usage \ 2750 "FILE..." 2751 #define hd_full_usage "\n\n" \ 2752 "hd is an alias for hexdump -C" 1324 2753 1325 2754 #define hostid_trivial_usage \ 1326 2755 "" 1327 #define hostid_full_usage \2756 #define hostid_full_usage "\n\n" \ 1328 2757 "Print out a unique 32-bit identifier for the machine" 1329 2758 1330 2759 #define hostname_trivial_usage \ 1331 "[OPTION ] {hostname | -F FILE}"1332 #define hostname_full_usage \1333 "Get or set the hostname or DNS domain name. If a hostname is given\n" \1334 "(or FILE with the -F parameter), the host name will be set." \1335 "\n\nOptions:\n" \1336 " -s Short\n" \1337 " -i Addresses for the hostname\n" \1338 " -d DNS domain name\n" \1339 " -f Fully qualified domain name\n" \1340 " -F FILE Use the contents of FILE to specify the hostname" 2760 "[OPTIONS] [HOSTNAME | -F FILE]" 2761 #define hostname_full_usage "\n\n" \ 2762 "Get or set hostname or DNS domain name\n" \ 2763 "\nOptions:" \ 2764 "\n -s Short" \ 2765 "\n -i Addresses for the hostname" \ 2766 "\n -d DNS domain name" \ 2767 "\n -f Fully qualified domain name" \ 2768 "\n -F FILE Use FILE's content as hostname" \ 2769 1341 2770 #define hostname_example_usage \ 1342 2771 "$ hostname\n" \ 1343 2772 "sage\n" 1344 2773 2774 #define dnsdomainname_trivial_usage NOUSAGE_STR 2775 #define dnsdomainname_full_usage "" 2776 1345 2777 #define httpd_trivial_usage \ 1346 "[-c conffile]" \ 1347 " [-p [ip:]port]" \ 1348 " [-i] [-f] [-v[v]]" \ 1349 USE_FEATURE_HTTPD_SETUID(" [-u user[:grp]]") \ 1350 USE_FEATURE_HTTPD_BASIC_AUTH(" [-r realm]") \ 1351 USE_FEATURE_HTTPD_AUTH_MD5(" [-m pass]") \ 1352 " [-h home]" \ 1353 " [-d/-e string]" 1354 #define httpd_full_usage \ 1355 "Listen for incoming HTTP requests" \ 1356 "\n\nOptions:" \ 1357 "\n -c FILE Configuration file (default httpd.conf)" \ 1358 "\n -p [IP:]PORT Bind to ip:port (default *:80)" \ 1359 "\n -i Inetd mode" \ 1360 "\n -f Do not daemonize" \ 1361 "\n -v[v] Verbose" \ 1362 USE_FEATURE_HTTPD_SETUID( \ 1363 "\n -u USER[:GRP] Set uid/gid after binding to port") \ 1364 USE_FEATURE_HTTPD_BASIC_AUTH( \ 1365 "\n -r REALM Authentication Realm for Basic Authentication") \ 1366 USE_FEATURE_HTTPD_AUTH_MD5( \ 1367 "\n -m PASS Crypt PASS with md5 algorithm") \ 1368 "\n -h HOME Home directory (default .)" \ 1369 "\n -e STRING HTML encode STRING" \ 1370 "\n -d STRING URL decode STRING" \ 2778 "[-ifv[v]]" \ 2779 " [-c CONFFILE]" \ 2780 " [-p [IP:]PORT]" \ 2781 IF_FEATURE_HTTPD_SETUID(" [-u USER[:GRP]]") \ 2782 IF_FEATURE_HTTPD_BASIC_AUTH(" [-r REALM]") \ 2783 " [-h HOME]\n" \ 2784 "or httpd -d/-e" IF_FEATURE_HTTPD_AUTH_MD5("/-m") " STRING" 2785 #define httpd_full_usage "\n\n" \ 2786 "Listen for incoming HTTP requests\n" \ 2787 "\nOptions:" \ 2788 "\n -i Inetd mode" \ 2789 "\n -f Don't daemonize" \ 2790 "\n -v[v] Verbose" \ 2791 "\n -p [IP:]PORT Bind to IP:PORT (default *:80)" \ 2792 IF_FEATURE_HTTPD_SETUID( \ 2793 "\n -u USER[:GRP] Set uid/gid after binding to port") \ 2794 IF_FEATURE_HTTPD_BASIC_AUTH( \ 2795 "\n -r REALM Authentication Realm for Basic Authentication") \ 2796 "\n -h HOME Home directory (default .)" \ 2797 "\n -c FILE Configuration file (default {/etc,HOME}/httpd.conf)" \ 2798 IF_FEATURE_HTTPD_AUTH_MD5( \ 2799 "\n -m STRING MD5 crypt STRING") \ 2800 "\n -e STRING HTML encode STRING" \ 2801 "\n -d STRING URL decode STRING" \ 1371 2802 1372 2803 #define hwclock_trivial_usage \ 2804 IF_FEATURE_HWCLOCK_LONG_OPTIONS( \ 1373 2805 "[-r|--show] [-s|--hctosys] [-w|--systohc]" \ 1374 2806 " [-l|--localtime] [-u|--utc]" \ 1375 " [-f FILE]" 1376 #define hwclock_full_usage \ 1377 "Query and set a hardware clock (RTC)" \ 1378 "\n\nOptions:\n" \ 1379 " -r Read hardware clock and print result\n" \ 1380 " -s Set the system time from the hardware clock\n" \ 1381 " -w Set the hardware clock to the current system time\n" \ 1382 " -u The hardware clock is kept in coordinated universal time\n" \ 1383 " -l The hardware clock is kept in local time\n" \ 1384 " -f FILE Use the specified clock (e.g. /dev/rtc2)" 2807 " [-f FILE]" \ 2808 ) \ 2809 IF_NOT_FEATURE_HWCLOCK_LONG_OPTIONS( \ 2810 "[-r] [-s] [-w] [-l] [-u] [-f FILE]" \ 2811 ) 2812 #define hwclock_full_usage "\n\n" \ 2813 "Query and set hardware clock (RTC)\n" \ 2814 "\nOptions:" \ 2815 "\n -r Show hardware clock time" \ 2816 "\n -s Set system time from hardware clock" \ 2817 "\n -w Set hardware clock to system time" \ 2818 "\n -u Hardware clock is in UTC" \ 2819 "\n -l Hardware clock is in local time" \ 2820 "\n -f FILE Use specified device (e.g. /dev/rtc2)" \ 1385 2821 1386 2822 #define id_trivial_usage \ 1387 "[OPTIONS]... [USERNAME]" 1388 #define id_full_usage \ 1389 "Print information for USERNAME or the current user" \ 1390 "\n\nOptions:\n" \ 1391 USE_SELINUX( \ 1392 " -Z prints only the security context\n" \ 1393 ) \ 1394 " -g Prints only the group ID\n" \ 1395 " -u Prints only the user ID\n" \ 1396 " -n Print a name instead of a number\n" \ 1397 " -r Prints the real user ID instead of the effective ID" 2823 "[OPTIONS] [USER]" 2824 #define id_full_usage "\n\n" \ 2825 "Print information about USER or the current user\n" \ 2826 "\nOptions:" \ 2827 IF_SELINUX( \ 2828 "\n -Z Security context" \ 2829 ) \ 2830 "\n -u User ID" \ 2831 "\n -g Group ID" \ 2832 "\n -G Supplementary group IDs" \ 2833 "\n -n Print names instead of numbers" \ 2834 "\n -r Print real ID instead of effective ID" \ 2835 1398 2836 #define id_example_usage \ 1399 2837 "$ id\n" \ … … 1401 2839 1402 2840 #define ifconfig_trivial_usage \ 1403 USE_FEATURE_IFCONFIG_STATUS("[-a]") " interface [address]" 1404 #define ifconfig_full_usage \ 1405 "Configure a network interface" \ 1406 "\n\nOptions:\n" \ 1407 USE_FEATURE_IPV6( \ 2841 IF_FEATURE_IFCONFIG_STATUS("[-a]") " interface [address]" 2842 #define ifconfig_full_usage "\n\n" \ 2843 "Configure a network interface\n" \ 2844 "\nOptions:" \ 2845 "\n" \ 2846 IF_FEATURE_IPV6( \ 1408 2847 " [add ADDRESS[/PREFIXLEN]]\n") \ 1409 USE_FEATURE_IPV6( \2848 IF_FEATURE_IPV6( \ 1410 2849 " [del ADDRESS[/PREFIXLEN]]\n") \ 1411 2850 " [[-]broadcast [ADDRESS]] [[-]pointopoint [ADDRESS]]\n" \ 1412 2851 " [netmask ADDRESS] [dstaddr ADDRESS]\n" \ 1413 USE_FEATURE_IFCONFIG_SLIP( \2852 IF_FEATURE_IFCONFIG_SLIP( \ 1414 2853 " [outfill NN] [keepalive NN]\n") \ 1415 " " USE_FEATURE_IFCONFIG_HW("[hw etherADDRESS] ") "[metric NN] [mtu NN]\n" \2854 " " IF_FEATURE_IFCONFIG_HW("[hw ether" IF_FEATURE_HWIB("|infiniband")" ADDRESS] ") "[metric NN] [mtu NN]\n" \ 1416 2855 " [[-]trailers] [[-]arp] [[-]allmulti]\n" \ 1417 2856 " [multicast] [[-]promisc] [txqueuelen NN] [[-]dynamic]\n" \ 1418 USE_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ( \2857 IF_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ( \ 1419 2858 " [mem_start NN] [io_addr NN] [irq NN]\n") \ 1420 2859 " [up|down] ..." 1421 2860 2861 #define ifenslave_trivial_usage \ 2862 "[-cdf] MASTER_IFACE SLAVE_IFACE..." 2863 #define ifenslave_full_usage "\n\n" \ 2864 "Configure network interfaces for parallel routing\n" \ 2865 "\nOptions:" \ 2866 "\n -c,--change-active Change active slave" \ 2867 "\n -d,--detach Remove slave interface from bonding device" \ 2868 "\n -f,--force Force, even if interface is not Ethernet" \ 2869 /* "\n -r,--receive-slave Create a receive-only slave" */ 2870 2871 #define ifenslave_example_usage \ 2872 "To create a bond device, simply follow these three steps:\n" \ 2873 "- ensure that the required drivers are properly loaded:\n" \ 2874 " # modprobe bonding ; modprobe <3c59x|eepro100|pcnet32|tulip|...>\n" \ 2875 "- assign an IP address to the bond device:\n" \ 2876 " # ifconfig bond0 <addr> netmask <mask> broadcast <bcast>\n" \ 2877 "- attach all the interfaces you need to the bond device:\n" \ 2878 " # ifenslave bond0 eth0 eth1 eth2\n" \ 2879 " If bond0 didn't have a MAC address, it will take eth0's. Then, all\n" \ 2880 " interfaces attached AFTER this assignment will get the same MAC addr.\n\n" \ 2881 " To detach a dead interface without setting the bond device down:\n" \ 2882 " # ifenslave -d bond0 eth1\n\n" \ 2883 " To set the bond device down and automatically release all the slaves:\n" \ 2884 " # ifconfig bond0 down\n\n" \ 2885 " To change active slave:\n" \ 2886 " # ifenslave -c bond0 eth0\n" \ 2887 2888 #define ifplugd_trivial_usage \ 2889 "[OPTIONS]" 2890 #define ifplugd_full_usage "\n\n" \ 2891 "Network interface plug detection daemon\n" \ 2892 "\nOptions:" \ 2893 "\n -n Don't daemonize" \ 2894 "\n -s Don't log to syslog" \ 2895 "\n -i IFACE Interface" \ 2896 "\n -f/-F Treat link detection error as link down/link up" \ 2897 "\n (otherwise exit on error)" \ 2898 "\n -a Don't up interface at each link probe" \ 2899 "\n -M Monitor creation/destruction of interface" \ 2900 "\n (otherwise it must exist)" \ 2901 "\n -r PROG Script to run" \ 2902 "\n -x ARG Extra argument for script" \ 2903 "\n -I Don't exit on nonzero exit code from script" \ 2904 "\n -p Don't run script on daemon startup" \ 2905 "\n -q Don't run script on daemon quit" \ 2906 "\n -l Run script on startup even if no cable is detected" \ 2907 "\n -t SECS Poll time in seconds" \ 2908 "\n -u SECS Delay before running script after link up" \ 2909 "\n -d SECS Delay after link down" \ 2910 "\n -m MODE API mode (mii, priv, ethtool, wlan, iff, auto)" \ 2911 "\n -k Kill running daemon" \ 2912 1422 2913 #define ifup_trivial_usage \ 1423 "[-ahinv] ifaces..." 1424 #define ifup_full_usage \ 1425 "Options:\n" \ 1426 " -a De/configure all interfaces automatically\n" \ 1427 " -i FILE Use FILE for interface definitions\n" \ 1428 " -n Print out what would happen, but don't do it\n" \ 1429 " (note that this option doesn't disable mappings)\n" \ 1430 " -v Print out what would happen before doing it\n" \ 1431 " -m Don't run any mappings\n" \ 1432 " -f Force de/configuration" 2914 "[-an"IF_FEATURE_IFUPDOWN_MAPPING("m")"vf] [-i FILE] IFACE..." 2915 #define ifup_full_usage "\n\n" \ 2916 "Options:" \ 2917 "\n -a De/configure all interfaces automatically" \ 2918 "\n -i FILE Use FILE for interface definitions" \ 2919 "\n -n Print out what would happen, but don't do it" \ 2920 IF_FEATURE_IFUPDOWN_MAPPING( \ 2921 "\n (note: doesn't disable mappings)" \ 2922 "\n -m Don't run any mappings" \ 2923 ) \ 2924 "\n -v Print out what would happen before doing it" \ 2925 "\n -f Force de/configuration" \ 1433 2926 1434 2927 #define ifdown_trivial_usage \ 1435 "[-ahinv] ifaces..." 1436 #define ifdown_full_usage \ 1437 "Options:\n" \ 1438 " -a De/configure all interfaces automatically\n" \ 1439 " -i FILE Use FILE for interface definitions\n" \ 1440 " -n Print out what would happen, but don't do it\n" \ 1441 " (note that this option doesn't disable mappings)\n" \ 1442 " -v Print out what would happen before doing it\n" \ 1443 " -m Don't run any mappings\n" \ 1444 " -f Force de/configuration" 2928 "[-an"IF_FEATURE_IFUPDOWN_MAPPING("m")"vf] [-i FILE] IFACE..." 2929 #define ifdown_full_usage "\n\n" \ 2930 "Options:" \ 2931 "\n -a De/configure all interfaces automatically" \ 2932 "\n -i FILE Use FILE for interface definitions" \ 2933 "\n -n Print out what would happen, but don't do it" \ 2934 IF_FEATURE_IFUPDOWN_MAPPING( \ 2935 "\n (note: doesn't disable mappings)" \ 2936 "\n -m Don't run any mappings" \ 2937 ) \ 2938 "\n -v Print out what would happen before doing it" \ 2939 "\n -f Force de/configuration" \ 1445 2940 1446 2941 #define inetd_trivial_usage \ 1447 "[-f] [-q len] [conf]" 1448 #define inetd_full_usage \ 1449 "Listen for network connections and launch programs" \ 1450 "\n\nOptions:\n" \ 1451 " -f Run in foreground\n" \ 1452 " -q N Set the size of the socket listen queue to N\n" \ 1453 " (default: 128)" 1454 1455 #define init_trivial_usage \ 1456 "" 1457 #define init_full_usage \ 1458 "Init is the parent of all processes" 1459 #define init_notes_usage \ 1460 "This version of init is designed to be run only by the kernel.\n" \ 1461 "\n" \ 1462 "BusyBox init doesn't support multiple runlevels. The runlevels field of\n" \ 1463 "the /etc/inittab file is completely ignored by BusyBox init. If you want\n" \ 1464 "runlevels, use sysvinit.\n" \ 1465 "\n" \ 1466 "BusyBox init works just fine without an inittab. If no inittab is found,\n" \ 1467 "it has the following default behavior:\n" \ 1468 "\n" \ 1469 " ::sysinit:/etc/init.d/rcS\n" \ 1470 " ::askfirst:/bin/sh\n" \ 1471 " ::ctrlaltdel:/sbin/reboot\n" \ 1472 " ::shutdown:/sbin/swapoff -a\n" \ 1473 " ::shutdown:/bin/umount -a -r\n" \ 1474 " ::restart:/sbin/init\n" \ 1475 "\n" \ 1476 "if it detects that /dev/console is _not_ a serial console, it will also run:\n" \ 1477 "\n" \ 1478 " tty2::askfirst:/bin/sh\n" \ 1479 " tty3::askfirst:/bin/sh\n" \ 1480 " tty4::askfirst:/bin/sh\n" \ 1481 "\n" \ 1482 "If you choose to use an /etc/inittab file, the inittab entry format is as follows:\n" \ 1483 "\n" \ 1484 " <id>:<runlevels>:<action>:<process>\n" \ 1485 "\n" \ 1486 " <id>:\n" \ 1487 "\n" \ 1488 " WARNING: This field has a non-traditional meaning for BusyBox init!\n" \ 1489 " The id field is used by BusyBox init to specify the controlling tty for\n" \ 1490 " the specified process to run on. The contents of this field are\n" \ 1491 " appended to \"/dev/\" and used as-is. There is no need for this field to\n" \ 1492 " be unique, although if it isn't you may have strange results. If this\n" \ 1493 " field is left blank, the controlling tty is set to the console. Also\n" \ 1494 " note that if BusyBox detects that a serial console is in use, then only\n" \ 1495 " entries whose controlling tty is either the serial console or /dev/null\n" \ 1496 " will be run. BusyBox init does nothing with utmp. We don't need no\n" \ 1497 " stinkin' utmp.\n" \ 1498 "\n" \ 1499 " <runlevels>:\n" \ 1500 "\n" \ 1501 " The runlevels field is completely ignored.\n" \ 1502 "\n" \ 1503 " <action>:\n" \ 1504 "\n" \ 1505 " Valid actions include: sysinit, respawn, askfirst, wait,\n" \ 1506 " once, restart, ctrlaltdel, and shutdown.\n" \ 1507 "\n" \ 1508 " The available actions can be classified into two groups: actions\n" \ 1509 " that are run only once, and actions that are re-run when the specified\n" \ 1510 " process exits.\n" \ 1511 "\n" \ 1512 " Run only-once actions:\n" \ 1513 "\n" \ 1514 " 'sysinit' is the first item run on boot. init waits until all\n" \ 1515 " sysinit actions are completed before continuing. Following the\n" \ 1516 " completion of all sysinit actions, all 'wait' actions are run.\n" \ 1517 " 'wait' actions, like 'sysinit' actions, cause init to wait until\n" \ 1518 " the specified task completes. 'once' actions are asynchronous,\n" \ 1519 " therefore, init does not wait for them to complete. 'restart' is\n" \ 1520 " the action taken to restart the init process. By default this should\n" \ 1521 " simply run /sbin/init, but can be a script which runs pivot_root or it\n" \ 1522 " can do all sorts of other interesting things. The 'ctrlaltdel' init\n" \ 1523 " actions are run when the system detects that someone on the system\n" \ 1524 " console has pressed the CTRL-ALT-DEL key combination. Typically one\n" \ 1525 " wants to run 'reboot' at this point to cause the system to reboot.\n" \ 1526 " Finally the 'shutdown' action specifies the actions to taken when\n" \ 1527 " init is told to reboot. Unmounting filesystems and disabling swap\n" \ 1528 " is a very good here.\n" \ 1529 "\n" \ 1530 " Run repeatedly actions:\n" \ 1531 "\n" \ 1532 " 'respawn' actions are run after the 'once' actions. When a process\n" \ 1533 " started with a 'respawn' action exits, init automatically restarts\n" \ 1534 " it. Unlike sysvinit, BusyBox init does not stop processes from\n" \ 1535 " respawning out of control. The 'askfirst' actions acts just like\n" \ 1536 " respawn, except that before running the specified process it\n" \ 1537 " displays the line \"Please press Enter to activate this console.\"\n" \ 1538 " and then waits for the user to press enter before starting the\n" \ 1539 " specified process.\n" \ 1540 "\n" \ 1541 " Unrecognized actions (like initdefault) will cause init to emit an\n" \ 1542 " error message, and then go along with its business. All actions are\n" \ 1543 " run in the order they appear in /etc/inittab.\n" \ 1544 "\n" \ 1545 " <process>:\n" \ 1546 "\n" \ 1547 " Specifies the process to be executed and its command line.\n" \ 1548 "\n" \ 1549 "Example /etc/inittab file:\n" \ 1550 "\n" \ 1551 " # This is run first except when booting in single-user mode\n" \ 1552 " #\n" \ 1553 " ::sysinit:/etc/init.d/rcS\n" \ 1554 " \n" \ 1555 " # /bin/sh invocations on selected ttys\n" \ 1556 " #\n" \ 1557 " # Start an \"askfirst\" shell on the console (whatever that may be)\n" \ 1558 " ::askfirst:-/bin/sh\n" \ 1559 " # Start an \"askfirst\" shell on /dev/tty2-4\n" \ 1560 " tty2::askfirst:-/bin/sh\n" \ 1561 " tty3::askfirst:-/bin/sh\n" \ 1562 " tty4::askfirst:-/bin/sh\n" \ 1563 " \n" \ 1564 " # /sbin/getty invocations for selected ttys\n" \ 1565 " #\n" \ 1566 " tty4::respawn:/sbin/getty 38400 tty4\n" \ 1567 " tty5::respawn:/sbin/getty 38400 tty5\n" \ 1568 " \n" \ 1569 " \n" \ 1570 " # Example of how to put a getty on a serial line (for a terminal)\n" \ 1571 " #\n" \ 1572 " #::respawn:/sbin/getty -L ttyS0 9600 vt100\n" \ 1573 " #::respawn:/sbin/getty -L ttyS1 9600 vt100\n" \ 1574 " #\n" \ 1575 " # Example how to put a getty on a modem line\n" \ 1576 " #::respawn:/sbin/getty 57600 ttyS2\n" \ 1577 " \n" \ 1578 " # Stuff to do when restarting the init process\n" \ 1579 " ::restart:/sbin/init\n" \ 1580 " \n" \ 1581 " # Stuff to do before rebooting\n" \ 1582 " ::ctrlaltdel:/sbin/reboot\n" \ 1583 " ::shutdown:/bin/umount -a -r\n" \ 1584 " ::shutdown:/sbin/swapoff -a\n" 1585 1586 #define insmod_trivial_usage \ 1587 "[OPTION]... MODULE [symbol=value]..." 1588 #define insmod_full_usage \ 1589 "Load the specified kernel modules into the kernel" \ 1590 "\n\nOptions:\n" \ 1591 " -f Force module to load into the wrong kernel version\n" \ 1592 " -k Make module autoclean-able\n" \ 1593 " -v Verbose\n" \ 1594 " -q Quiet\n" \ 1595 " -L Lock to prevent simultaneous loads of a module\n" \ 1596 USE_FEATURE_INSMOD_LOAD_MAP( \ 1597 " -m Output load map to stdout\n") \ 1598 " -o NAME Set internal module name to NAME\n" \ 1599 " -x Do not export externs" 1600 2942 "[-fe] [-q N] [-R N] [CONFFILE]" 2943 #define inetd_full_usage "\n\n" \ 2944 "Listen for network connections and launch programs\n" \ 2945 "\nOptions:" \ 2946 "\n -f Run in foreground" \ 2947 "\n -e Log to stderr" \ 2948 "\n -q N Socket listen queue (default: 128)" \ 2949 "\n -R N Pause services after N connects/min" \ 2950 "\n (default: 0 - disabled)" \ 2951 2952 #define inotifyd_trivial_usage \ 2953 "PROG FILE1[:MASK]..." 2954 #define inotifyd_full_usage "\n\n" \ 2955 "Run PROG on filesystem changes." \ 2956 "\nWhen a filesystem event matching MASK occurs on FILEn," \ 2957 "\nPROG ACTUAL_EVENTS FILEn [SUBFILE] is run." \ 2958 "\nEvents:" \ 2959 "\n a File is accessed" \ 2960 "\n c File is modified" \ 2961 "\n e Metadata changed" \ 2962 "\n w Writable file is closed" \ 2963 "\n 0 Unwritable file is closed" \ 2964 "\n r File is opened" \ 2965 "\n D File is deleted" \ 2966 "\n M File is moved" \ 2967 "\n u Backing fs is unmounted" \ 2968 "\n o Event queue overflowed" \ 2969 "\n x File can't be watched anymore" \ 2970 "\nIf watching a directory:" \ 2971 "\n m Subfile is moved into dir" \ 2972 "\n y Subfile is moved out of dir" \ 2973 "\n n Subfile is created" \ 2974 "\n d Subfile is deleted" \ 2975 "\n" \ 2976 "\ninotifyd waits for PROG to exit." \ 2977 "\nWhen x event happens for all FILEs, inotifyd exits." \ 2978 2979 /* -v, -b, -c are ignored */ 1601 2980 #define install_trivial_usage \ 1602 "[-cgmops] [sources] dest|directory" 1603 #define install_full_usage \ 1604 "Copy files and set attributes" \ 1605 "\n\nOptions:\n" \ 1606 " -c Copy the file, default\n" \ 1607 " -d Create directories\n" \ 1608 " -g Set group ownership\n" \ 1609 " -m Set permission modes\n" \ 1610 " -o Set ownership\n" \ 1611 " -p Preserve date\n" \ 1612 " -s Strip symbol tables" \ 1613 USE_SELINUX( \ 1614 "\n -Z Set security context of copy" \ 2981 "[-cdDsp] [-o USER] [-g GRP] [-m MODE] [SOURCE]... DEST" 2982 #define install_full_usage "\n\n" \ 2983 "Copy files and set attributes\n" \ 2984 "\nOptions:" \ 2985 "\n -c Just copy (default)" \ 2986 "\n -d Create directories" \ 2987 "\n -D Create leading target directories" \ 2988 "\n -s Strip symbol table" \ 2989 "\n -p Preserve date" \ 2990 "\n -o USER Set ownership" \ 2991 "\n -g GRP Set group ownership" \ 2992 "\n -m MODE Set permissions" \ 2993 IF_SELINUX( \ 2994 "\n -Z Set security context" \ 1615 2995 ) 1616 /* would need to make the " | " optional depending on more than one selected */ 2996 2997 /* would need to make the " | " optional depending on more than one selected: */ 1617 2998 #define ip_trivial_usage \ 1618 2999 "[OPTIONS] {" \ 1619 USE_FEATURE_IP_ADDRESS("address | ") \1620 USE_FEATURE_IP_ROUTE("route | ") \1621 USE_FEATURE_IP_LINK("link | ") \1622 USE_FEATURE_IP_TUNNEL("tunnel | ") \1623 USE_FEATURE_IP_RULE("rule") \3000 IF_FEATURE_IP_ADDRESS("address | ") \ 3001 IF_FEATURE_IP_ROUTE("route | ") \ 3002 IF_FEATURE_IP_LINK("link | ") \ 3003 IF_FEATURE_IP_TUNNEL("tunnel | ") \ 3004 IF_FEATURE_IP_RULE("rule") \ 1624 3005 "} {COMMAND}" 1625 #define ip_full_usage \3006 #define ip_full_usage "\n\n" \ 1626 3007 "ip [OPTIONS] OBJECT {COMMAND}\n" \ 1627 3008 "where OBJECT := {" \ 1628 USE_FEATURE_IP_ADDRESS("address | ") \1629 USE_FEATURE_IP_ROUTE("route | ") \1630 USE_FEATURE_IP_LINK("link | ") \1631 USE_FEATURE_IP_TUNNEL("tunnel | ") \1632 USE_FEATURE_IP_RULE("rule") \3009 IF_FEATURE_IP_ADDRESS("address | ") \ 3010 IF_FEATURE_IP_ROUTE("route | ") \ 3011 IF_FEATURE_IP_LINK("link | ") \ 3012 IF_FEATURE_IP_TUNNEL("tunnel | ") \ 3013 IF_FEATURE_IP_RULE("rule") \ 1633 3014 "}\n" \ 1634 "OPTIONS := { -f[amily] { inet | inet6 | link } | -o[neline] }" 3015 "OPTIONS := { -f[amily] { inet | inet6 | link } | -o[neline] }" \ 1635 3016 1636 3017 #define ipaddr_trivial_usage \ 1637 3018 "{ {add|del} IFADDR dev STRING | {show|flush}\n" \ 1638 3019 " [dev STRING] [to PREFIX] }" 1639 #define ipaddr_full_usage \3020 #define ipaddr_full_usage "\n\n" \ 1640 3021 "ipaddr {add|delete} IFADDR dev STRING\n" \ 1641 3022 "ipaddr {show|flush} [dev STRING] [scope SCOPE-ID]\n" \ … … 1644 3025 " [broadcast ADDR] [anycast ADDR]\n" \ 1645 3026 " [label STRING] [scope SCOPE-ID]\n" \ 1646 " SCOPE-ID := [host | link | global | NUMBER]" 3027 " SCOPE-ID := [host | link | global | NUMBER]" \ 1647 3028 1648 3029 #define ipcalc_trivial_usage \ 1649 "[OPTION]... ADDRESS[[/]NETMASK] [NETMASK]" 1650 #define ipcalc_full_usage \ 1651 "Calculate IP network settings from a IP address" \ 1652 "\n\nOptions:" \ 1653 "\n -b --broadcast Display calculated broadcast address" \ 1654 "\n -n --network Display calculated network address" \ 1655 "\n -m --netmask Display default netmask for IP" \ 1656 USE_FEATURE_IPCALC_FANCY( \ 1657 "\n -p --prefix Display the prefix for IP/NETMASK" \ 1658 "\n -h --hostname Display first resolved host name" \ 1659 "\n -s --silent Don't ever display error messages") 3030 "[OPTIONS] ADDRESS[[/]NETMASK] [NETMASK]" 3031 #define ipcalc_full_usage "\n\n" \ 3032 "Calculate IP network settings from a IP address\n" \ 3033 "\nOptions:" \ 3034 IF_FEATURE_IPCALC_LONG_OPTIONS( \ 3035 "\n -b,--broadcast Display calculated broadcast address" \ 3036 "\n -n,--network Display calculated network address" \ 3037 "\n -m,--netmask Display default netmask for IP" \ 3038 IF_FEATURE_IPCALC_FANCY( \ 3039 "\n -p,--prefix Display the prefix for IP/NETMASK" \ 3040 "\n -h,--hostname Display first resolved host name" \ 3041 "\n -s,--silent Don't ever display error messages" \ 3042 ) \ 3043 ) \ 3044 IF_NOT_FEATURE_IPCALC_LONG_OPTIONS( \ 3045 "\n -b Display calculated broadcast address" \ 3046 "\n -n Display calculated network address" \ 3047 "\n -m Display default netmask for IP" \ 3048 IF_FEATURE_IPCALC_FANCY( \ 3049 "\n -p Display the prefix for IP/NETMASK" \ 3050 "\n -h Display first resolved host name" \ 3051 "\n -s Don't ever display error messages" \ 3052 ) \ 3053 ) 1660 3054 1661 3055 #define ipcrm_trivial_usage \ 1662 "[-[MQS] key] [-[mqs] id]" 1663 #define ipcrm_full_usage \ 1664 "The upper-case options MQS are used to remove a shared memory segment by a\n" \ 1665 "segment by a shmkey value. The lower-case options mqs are used\n" \ 1666 "to remove a segment by shmid value.\n" \ 1667 "\n\nOptions:\n" \ 1668 " -[mM] Remove the memory segment after the last detach\n" \ 1669 " -[qQ] Remove the message queue\n" \ 1670 " -[sS] Remove the semaphore" 3056 "[-MQS key] [-mqs id]" 3057 #define ipcrm_full_usage "\n\n" \ 3058 "Upper-case options MQS remove an object by shmkey value.\n" \ 3059 "Lower-case options remove an object by shmid value.\n" \ 3060 "\nOptions:" \ 3061 "\n -mM Remove memory segment after last detach" \ 3062 "\n -qQ Remove message queue" \ 3063 "\n -sS Remove semaphore" \ 1671 3064 1672 3065 #define ipcs_trivial_usage \ 1673 3066 "[[-smq] -i shmid] | [[-asmq] [-tcplu]]" 1674 #define ipcs_full_usage \1675 " -i S pecify a specific resource id\n" \1676 "Resource specification:\n" \1677 " -m Shared memory segments\n" \1678 " -q Message queues\n" \1679 " -s Semaphore arrays\n" \1680 " -a All (default)\n" \1681 "Output format:\n" \1682 " -t Time\n" \1683 " -c Creator\n" \1684 " -p Pid\n" \1685 " -l Limits\n" \1686 " -u Summary"3067 #define ipcs_full_usage "\n\n" \ 3068 " -i Show specific resource" \ 3069 "\nResource specification:" \ 3070 "\n -m Shared memory segments" \ 3071 "\n -q Message queues" \ 3072 "\n -s Semaphore arrays" \ 3073 "\n -a All (default)" \ 3074 "\nOutput format:" \ 3075 "\n -t Time" \ 3076 "\n -c Creator" \ 3077 "\n -p Pid" \ 3078 "\n -l Limits" \ 3079 "\n -u Summary" \ 1687 3080 1688 3081 #define iplink_trivial_usage \ 1689 3082 "{ set DEVICE { up | down | arp { on | off } | show [DEVICE] }" 1690 #define iplink_full_usage \3083 #define iplink_full_usage "\n\n" \ 1691 3084 "iplink set DEVICE { up | down | arp | multicast { on | off } |\n" \ 1692 3085 " dynamic { on | off } |\n" \ 1693 3086 " mtu MTU }\n" \ 1694 "iplink show [DEVICE]" 3087 "iplink show [DEVICE]" \ 1695 3088 1696 3089 #define iproute_trivial_usage \ 1697 3090 "{ list | flush | { add | del | change | append |\n" \ 1698 3091 " replace | monitor } ROUTE }" 1699 #define iproute_full_usage \3092 #define iproute_full_usage "\n\n" \ 1700 3093 "iproute { list | flush } SELECTOR\n" \ 1701 3094 "iproute get ADDRESS [from ADDRESS iif STRING]\n" \ … … 1703 3096 "iproute { add | del | change | append | replace | monitor } ROUTE\n" \ 1704 3097 " SELECTOR := [root PREFIX] [match PREFIX] [proto RTPROTO]\n" \ 1705 " ROUTE := [TYPE] PREFIX [tos TOS] [proto RTPROTO]" 3098 " ROUTE := [TYPE] PREFIX [tos TOS] [proto RTPROTO]\n" \ 3099 " [metric METRIC]" \ 1706 3100 1707 3101 #define iprule_trivial_usage \ 1708 3102 "{[list | add | del] RULE}" 1709 #define iprule_full_usage \3103 #define iprule_full_usage "\n\n" \ 1710 3104 "iprule [list | add | del] SELECTOR ACTION\n" \ 1711 3105 " SELECTOR := [from PREFIX] [to PREFIX] [tos TOS] [fwmark FWMARK]\n" \ … … 1714 3108 " [prohibit | reject | unreachable]\n" \ 1715 3109 " [realms [SRCREALM/]DSTREALM]\n" \ 1716 " TABLE_ID := [local | main | default | NUMBER]" 3110 " TABLE_ID := [local | main | default | NUMBER]" \ 1717 3111 1718 3112 #define iptunnel_trivial_usage \ … … 1720 3114 " [mode { ipip | gre | sit }]\n" \ 1721 3115 " [remote ADDR] [local ADDR] [ttl TTL]" 1722 #define iptunnel_full_usage \3116 #define iptunnel_full_usage "\n\n" \ 1723 3117 "iptunnel { add | change | del | show } [NAME]\n" \ 1724 3118 " [mode { ipip | gre | sit }] [remote ADDR] [local ADDR]\n" \ 1725 3119 " [[i|o]seq] [[i|o]key KEY] [[i|o]csum]\n" \ 1726 " [ttl TTL] [tos TOS] [[no]pmtudisc] [dev PHYS_DEV]" 3120 " [ttl TTL] [tos TOS] [[no]pmtudisc] [dev PHYS_DEV]" \ 3121 3122 #define kbd_mode_trivial_usage \ 3123 "[-a|k|s|u] [-C TTY]" 3124 #define kbd_mode_full_usage "\n\n" \ 3125 "Report or set the keyboard mode\n" \ 3126 "\nOptions:" \ 3127 "\n -a Default (ASCII)" \ 3128 "\n -k Medium-raw (keyboard)" \ 3129 "\n -s Raw (scancode)" \ 3130 "\n -u Unicode (utf-8)" \ 3131 "\n -C TTY Affect TTY instead of /dev/tty" \ 1727 3132 1728 3133 #define kill_trivial_usage \ 1729 "[-l] [-signal] process-id [process-id ...]" 1730 #define kill_full_usage \ 1731 "Send a signal (default is TERM) to the specified process(es)" \ 1732 "\n\nOptions:\n" \ 1733 " -l List all signal names and numbers" 3134 "[-l] [-SIG] PID..." 3135 #define kill_full_usage "\n\n" \ 3136 "Send a signal (default: TERM) to given PIDs\n" \ 3137 "\nOptions:" \ 3138 "\n -l List all signal names and numbers" \ 3139 /* "\n -s SIG Yet another way of specifying SIG" */ \ 3140 1734 3141 #define kill_example_usage \ 1735 3142 "$ ps | grep apache\n" \ … … 1743 3150 1744 3151 #define killall_trivial_usage \ 1745 "[-l] [-q] [-signal] process-name [process-name ...]" 1746 #define killall_full_usage \ 1747 "Send a signal (default is TERM) to the specified process(es)" \ 1748 "\n\nOptions:\n" \ 1749 " -l List all signal names and numbers\n" \ 1750 " -q Do not complain if no processes were killed" 3152 "[-l] [-q] [-SIG] PROCESS_NAME..." 3153 #define killall_full_usage "\n\n" \ 3154 "Send a signal (default: TERM) to given processes\n" \ 3155 "\nOptions:" \ 3156 "\n -l List all signal names and numbers" \ 3157 /* "\n -s SIG Yet another way of specifying SIG" */ \ 3158 "\n -q Don't complain if no processes were killed" \ 3159 1751 3160 #define killall_example_usage \ 1752 3161 "$ killall apache\n" 1753 3162 1754 3163 #define killall5_trivial_usage \ 1755 "[-l] [-signal]" 1756 #define killall5_full_usage \ 1757 "Send a signal (default is TERM) to all processes outside current session" \ 1758 "\n\nOptions:\n" \ 1759 " -l List all signal names and numbers\n" \ 3164 "[-l] [-SIG] [-o PID]..." 3165 #define killall5_full_usage "\n\n" \ 3166 "Send a signal (default: TERM) to all processes outside current session\n" \ 3167 "\nOptions:" \ 3168 "\n -l List all signal names and numbers" \ 3169 "\n -o PID Don't signal this PID" \ 3170 /* "\n -s SIG Yet another way of specifying SIG" */ \ 1760 3171 1761 3172 #define klogd_trivial_usage \ 1762 "[-c n] [-n]"1763 #define klogd_full_usage \1764 "Kernel logger " \1765 "\n\nOptions:\n" \1766 " -c n Sets the default log level of console messages to n\n" \1767 " -n Run as foreground process"3173 "[-c N] [-n]" 3174 #define klogd_full_usage "\n\n" \ 3175 "Kernel logger\n" \ 3176 "\nOptions:" \ 3177 "\n -c N Only messages with level < N are printed to console" \ 3178 "\n -n Run in foreground" \ 1768 3179 1769 3180 #define length_trivial_usage \ 1770 3181 "STRING" 1771 #define length_full_usage \ 1772 "Print out the length of the specified STRING" 3182 #define length_full_usage "\n\n" \ 3183 "Print STRING's length" 3184 1773 3185 #define length_example_usage \ 1774 3186 "$ length Hello\n" \ … … 1776 3188 1777 3189 #define less_trivial_usage \ 1778 "[-EMNmh~?] FILE1 FILE2..." 1779 #define less_full_usage \ 1780 "View a file or list of files. The position within files can be\n" \ 1781 "changed, and files can be manipulated in various ways." \ 1782 "\n\nOptions:\n" \ 1783 " -E Quit once the end of a file is reached\n" \ 1784 " -M Display a status line containing the current line numbers\n" \ 1785 " and the percentage through the file\n" \ 1786 " -N Prefix line numbers to each line\n" \ 1787 " -m Display a status line containing the percentage through the\n" \ 1788 " file\n" \ 1789 " -~ Suppress ~s displayed when input past the end of the file is\n" \ 1790 " reached" 3190 "[-EMNmh~I?] [FILE]..." 3191 #define less_full_usage "\n\n" \ 3192 "View FILE (or stdin) one screenful at a time\n" \ 3193 "\nOptions:" \ 3194 "\n -E Quit once the end of a file is reached" \ 3195 "\n -M,-m Display status line with line numbers" \ 3196 "\n and percentage through the file" \ 3197 "\n -N Prefix line number to each line" \ 3198 "\n -I Ignore case in all searches" \ 3199 "\n -~ Suppress ~s displayed past the end of the file" \ 3200 3201 #define linux32_trivial_usage NOUSAGE_STR 3202 #define linux32_full_usage "" 3203 #define linux64_trivial_usage NOUSAGE_STR 3204 #define linux64_full_usage "" 1791 3205 1792 3206 #define setarch_trivial_usage \ 1793 "personality program [args ...]"1794 #define setarch_full_usage \3207 "personality PROG ARGS" 3208 #define setarch_full_usage "\n\n" \ 1795 3209 "Personality may be:\n" \ 1796 3210 " linux32 Set 32bit uname emulation\n" \ 1797 " linux64 Set 64bit uname emulation" 3211 " linux64 Set 64bit uname emulation" \ 1798 3212 1799 3213 #define ln_trivial_usage \ 1800 "[OPTION ] TARGET... LINK_NAME|DIRECTORY"1801 #define ln_full_usage \1802 "Create a link named LINK_NAME or DIRECTORY to the specified TARGET.\n" \1803 "You may use '--' to indicate that all following arguments are non-options." \1804 "\n\nOptions:\n" \1805 " -s Make symlinks instead of hardlinks\n" \1806 " -f Remove existing destination files\n" \1807 " -n No dereference symlinks - treat like normal file\n" \1808 " -b Make a backup of the target (if exists) before link operation\n" \1809 " -S suf Use suffix instead of ~ when making backup files" 3214 "[OPTIONS] TARGET... LINK|DIR" 3215 #define ln_full_usage "\n\n" \ 3216 "Create a link LINK or DIR/TARGET to the specified TARGET(s)\n" \ 3217 "\nOptions:" \ 3218 "\n -s Make symlinks instead of hardlinks" \ 3219 "\n -f Remove existing destinations" \ 3220 "\n -n Don't dereference symlinks - treat like normal file" \ 3221 "\n -b Make a backup of the target (if exists) before link operation" \ 3222 "\n -S suf Use suffix instead of ~ when making backup files" \ 3223 1810 3224 #define ln_example_usage \ 1811 3225 "$ ln -s BusyBox /tmp/ls\n" \ … … 1813 3227 "lrwxrwxrwx 1 root root 7 Apr 12 18:39 ls -> BusyBox*\n" 1814 3228 1815 #define load_policy_trivial_usage \ 1816 "[FILE]" 1817 #define load_policy_full_usage 3229 #define load_policy_trivial_usage NOUSAGE_STR 3230 #define load_policy_full_usage "" 1818 3231 1819 3232 #define loadfont_trivial_usage \ 1820 3233 "< font" 1821 #define loadfont_full_usage \ 1822 "Load a console font from standard input" 3234 #define loadfont_full_usage "\n\n" \ 3235 "Load a console font from stdin" \ 3236 /* "\n -C TTY Affect TTY instead of /dev/tty" */ \ 3237 1823 3238 #define loadfont_example_usage \ 1824 3239 "$ loadfont < /etc/i18n/fontname\n" … … 1826 3241 #define loadkmap_trivial_usage \ 1827 3242 "< keymap" 1828 #define loadkmap_full_usage \ 1829 "Load a binary keyboard translation table from standard input" 3243 #define loadkmap_full_usage "\n\n" \ 3244 "Load a binary keyboard translation table from stdin\n" \ 3245 /* "\n -C TTY Affect TTY instead of /dev/tty" */ \ 3246 1830 3247 #define loadkmap_example_usage \ 1831 3248 "$ loadkmap < /etc/i18n/lang-keymap\n" 1832 3249 1833 3250 #define logger_trivial_usage \ 1834 "[OPTION ]...[MESSAGE]"1835 #define logger_full_usage \1836 "Write MESSAGE to the system log. If MESSAGE is omitted, log stdin." \1837 "\n\nOptions:\n" \1838 " -s Log to stderr as well as the system log\n" \1839 " -t TAG Log using the specified tag (defaults to user name)\n" \1840 " -p PRIO Enter the message with the specified priority.\n" \1841 " This may be numerical or a 'facility.level' pair." 3251 "[OPTIONS] [MESSAGE]" 3252 #define logger_full_usage "\n\n" \ 3253 "Write MESSAGE (or stdin) to syslog\n" \ 3254 "\nOptions:" \ 3255 "\n -s Log to stderr as well as the system log" \ 3256 "\n -t TAG Log using the specified tag (defaults to user name)" \ 3257 "\n -p PRIO Priority (numeric or facility.level pair)" \ 3258 1842 3259 #define logger_example_usage \ 1843 3260 "$ logger \"hello\"\n" 1844 3261 1845 3262 #define login_trivial_usage \ 1846 "[ OPTION]... [username] [ENV=VAR ...]"1847 #define login_full_usage \1848 "Begin a new session on the system " \1849 "\n\nOptions:\n" \1850 " -f Do not authenticate (user already authenticated)\n" \1851 " -h Name of the remote host for this login\n" \1852 " -p Preserve environment"3263 "[-p] [-h HOST] [[-f] USER]" 3264 #define login_full_usage "\n\n" \ 3265 "Begin a new session on the system\n" \ 3266 "\nOptions:" \ 3267 "\n -f Don't authenticate (user already authenticated)" \ 3268 "\n -h Name of the remote host" \ 3269 "\n -p Preserve environment" \ 1853 3270 1854 3271 #define logname_trivial_usage \ 1855 3272 "" 1856 #define logname_full_usage \3273 #define logname_full_usage "\n\n" \ 1857 3274 "Print the name of the current user" 1858 3275 #define logname_example_usage \ … … 1861 3278 1862 3279 #define logread_trivial_usage \ 1863 "[ OPTION]..."1864 #define logread_full_usage \1865 "Show the messages from syslogd (using circular buffer)" \1866 "\n\nOptions:\n" \1867 " -f Output data as the log grows"3280 "[-f]" 3281 #define logread_full_usage "\n\n" \ 3282 "Show messages in syslogd's circular buffer\n" \ 3283 "\nOptions:" \ 3284 "\n -f Output data as log grows" \ 1868 3285 1869 3286 #define losetup_trivial_usage \ 1870 "[-o OFFSET] [-d] LOOPDEVICE [FILE]]" 1871 #define losetup_full_usage \ 1872 "(Dis)associate LOOPDEVICE with FILE, or display current associations" \ 1873 "\n\nOptions:\n" \ 1874 " -d Disassociate LOOPDEVICE\n" \ 1875 " -o OFFSET Start OFFSET bytes into FILE" 3287 "[-o OFS] LOOPDEV FILE - associate loop devices\n" \ 3288 " losetup -d LOOPDEV - disassociate\n" \ 3289 " losetup [-f] - show" 3290 #define losetup_full_usage "\n\n" \ 3291 "Options:" \ 3292 "\n -o OFS Start OFS bytes into FILE" \ 3293 "\n -f Show first free loop device" \ 3294 1876 3295 #define losetup_notes_usage \ 1877 3296 "No arguments will display all current associations.\n" \ … … 1880 3299 "and filename of the file the loop device is currently bound to.\n\n" \ 1881 3300 "Two arguments (losetup /dev/loop1 file.img) create a new association,\n" \ 1882 "with an optional offset (-o 12345). Encryption is not yet supported.\n\n" 3301 "with an optional offset (-o 12345). Encryption is not yet supported.\n" \ 3302 "losetup -f will show the first loop free loop device\n\n" 3303 3304 #define lpd_trivial_usage \ 3305 "SPOOLDIR [HELPER [ARGS]]" 3306 #define lpd_full_usage "\n\n" \ 3307 "SPOOLDIR must contain (symlinks to) device nodes or directories" \ 3308 "\nwith names matching print queue names. In the first case, jobs are" \ 3309 "\nsent directly to the device. Otherwise each job is stored in queue" \ 3310 "\ndirectory and HELPER program is called. Name of file to print" \ 3311 "\nis passed in $DATAFILE variable." \ 3312 "\nExample:" \ 3313 "\n tcpsvd -E 0 515 softlimit -m 999999 lpd /var/spool ./print" \ 3314 3315 #define lpq_trivial_usage \ 3316 "[-P queue[@host[:port]]] [-U USERNAME] [-d JOBID]... [-fs]" 3317 #define lpq_full_usage "\n\n" \ 3318 "Options:" \ 3319 "\n -P lp service to connect to (else uses $PRINTER)" \ 3320 "\n -d Delete jobs" \ 3321 "\n -f Force any waiting job to be printed" \ 3322 "\n -s Short display" \ 3323 3324 #define lpr_trivial_usage \ 3325 "-P queue[@host[:port]] -U USERNAME -J TITLE -Vmh [FILE]..." 3326 /* -C CLASS exists too, not shown. 3327 * CLASS is supposed to be printed on banner page, if one is requested */ 3328 #define lpr_full_usage "\n\n" \ 3329 "Options:" \ 3330 "\n -P lp service to connect to (else uses $PRINTER)"\ 3331 "\n -m Send mail on completion" \ 3332 "\n -h Print banner page too" \ 3333 "\n -V Verbose" \ 1883 3334 1884 3335 #define ls_trivial_usage \ 1885 "[-1Aa" USE_FEATURE_LS_TIMESTAMPS("c") "Cd" \1886 USE_FEATURE_LS_TIMESTAMPS("e") USE_FEATURE_LS_FILETYPES("F") "iln" \1887 USE_FEATURE_LS_FILETYPES("p") USE_FEATURE_LS_FOLLOWLINKS("L") \1888 USE_FEATURE_LS_RECURSIVE("R") USE_FEATURE_LS_SORTFILES("rS") "s" \1889 USE_FEATURE_AUTOWIDTH("T") USE_FEATURE_LS_TIMESTAMPS("tu") \1890 USE_FEATURE_LS_SORTFILES("v") USE_FEATURE_AUTOWIDTH("w") "x" \1891 USE_FEATURE_LS_SORTFILES("X") USE_FEATURE_HUMAN_READABLE("h") "k" \1892 USE_SELINUX("K") "] [filenames...]"1893 #define ls_full_usage \1894 "List directory contents " \1895 "\n\nOptions:" \1896 "\n -1 List filesin a single column" \1897 "\n -A Do not list implied. and .." \1898 "\n -a Do not hide entries starting with ." \1899 "\n -C List entriesby columns" \1900 USE_FEATURE_LS_TIMESTAMPS( \1901 "\n -c With -l: showctime") \1902 USE_FEATURE_LS_COLOR( \1903 1904 1905 USE_FEATURE_LS_TIMESTAMPS( \1906 "\n -e List both full date and fulltime") \1907 USE_FEATURE_LS_FILETYPES( \1908 1909 "\n -i List the i-node for each file" \1910 "\n -l Use a long listing format" \1911 1912 USE_FEATURE_LS_FILETYPES( \1913 1914 USE_FEATURE_LS_FOLLOWLINKS( \1915 1916 USE_FEATURE_LS_RECURSIVE( \1917 "\n -R List subdirectories recursively") \1918 USE_FEATURE_LS_SORTFILES( \1919 "\n -r Sort the listingin reverse order") \1920 USE_FEATURE_LS_SORTFILES( \1921 "\n -S Sort the listingby file size") \1922 1923 USE_FEATURE_AUTOWIDTH( \1924 "\n -T NUM Assume Tabstop every NUMcolumns") \1925 USE_FEATURE_LS_TIMESTAMPS( \1926 "\n -t With -l: showmodification time") \1927 USE_FEATURE_LS_TIMESTAMPS( \1928 "\n -u With -l: showaccess time") \1929 USE_FEATURE_LS_SORTFILES( \1930 "\n -v Sort the listingby version") \1931 USE_FEATURE_AUTOWIDTH( \1932 "\n -w NUM Assume the terminal is NUMcolumns wide") \1933 "\n -x List entries by lines instead of by columns" \1934 USE_FEATURE_LS_SORTFILES( \1935 "\n -X Sort the listingby extension") \1936 USE_FEATURE_HUMAN_READABLE( \1937 "\n -h Print sizes in human readable format (e.g.,1K 243M 2G)") \1938 USE_SELINUX( \1939 "\n -k Print security context") \1940 USE_SELINUX( \1941 "\n -K Print security context in long format") \1942 USE_SELINUX( \1943 "\n -Z Print security context and permission")3336 "[-1Aa" IF_FEATURE_LS_TIMESTAMPS("c") "Cd" \ 3337 IF_FEATURE_LS_TIMESTAMPS("e") IF_FEATURE_LS_FILETYPES("F") "iln" \ 3338 IF_FEATURE_LS_FILETYPES("p") IF_FEATURE_LS_FOLLOWLINKS("L") \ 3339 IF_FEATURE_LS_RECURSIVE("R") IF_FEATURE_LS_SORTFILES("rS") "s" \ 3340 IF_FEATURE_AUTOWIDTH("T") IF_FEATURE_LS_TIMESTAMPS("tu") \ 3341 IF_FEATURE_LS_SORTFILES("v") IF_FEATURE_AUTOWIDTH("w") "x" \ 3342 IF_FEATURE_LS_SORTFILES("X") IF_FEATURE_HUMAN_READABLE("h") "k" \ 3343 IF_SELINUX("K") "] [FILE]..." 3344 #define ls_full_usage "\n\n" \ 3345 "List directory contents\n" \ 3346 "\nOptions:" \ 3347 "\n -1 List in a single column" \ 3348 "\n -A Don't list . and .." \ 3349 "\n -a Don't hide entries starting with ." \ 3350 "\n -C List by columns" \ 3351 IF_FEATURE_LS_TIMESTAMPS( \ 3352 "\n -c With -l: sort by ctime") \ 3353 IF_FEATURE_LS_COLOR( \ 3354 "\n --color[={always,never,auto}] Control coloring") \ 3355 "\n -d List directory entries instead of contents" \ 3356 IF_FEATURE_LS_TIMESTAMPS( \ 3357 "\n -e List full date and time") \ 3358 IF_FEATURE_LS_FILETYPES( \ 3359 "\n -F Append indicator (one of */=@|) to entries") \ 3360 "\n -i List inode numbers" \ 3361 "\n -l Long listing format" \ 3362 "\n -n List numeric UIDs and GIDs instead of names" \ 3363 IF_FEATURE_LS_FILETYPES( \ 3364 "\n -p Append indicator (one of /=@|) to entries") \ 3365 IF_FEATURE_LS_FOLLOWLINKS( \ 3366 "\n -L List entries pointed to by symlinks") \ 3367 IF_FEATURE_LS_RECURSIVE( \ 3368 "\n -R Recurse") \ 3369 IF_FEATURE_LS_SORTFILES( \ 3370 "\n -r Sort in reverse order") \ 3371 IF_FEATURE_LS_SORTFILES( \ 3372 "\n -S Sort by file size") \ 3373 "\n -s List the size of each file, in blocks" \ 3374 IF_FEATURE_AUTOWIDTH( \ 3375 "\n -T N Assume tabstop every N columns") \ 3376 IF_FEATURE_LS_TIMESTAMPS( \ 3377 "\n -t With -l: sort by modification time") \ 3378 IF_FEATURE_LS_TIMESTAMPS( \ 3379 "\n -u With -l: sort by access time") \ 3380 IF_FEATURE_LS_SORTFILES( \ 3381 "\n -v Sort by version") \ 3382 IF_FEATURE_AUTOWIDTH( \ 3383 "\n -w N Assume the terminal is N columns wide") \ 3384 "\n -x List by lines" \ 3385 IF_FEATURE_LS_SORTFILES( \ 3386 "\n -X Sort by extension") \ 3387 IF_FEATURE_HUMAN_READABLE( \ 3388 "\n -h List sizes in human readable format (1K 243M 2G)") \ 3389 IF_SELINUX( \ 3390 "\n -k List security context") \ 3391 IF_SELINUX( \ 3392 "\n -K List security context in long format") \ 3393 IF_SELINUX( \ 3394 "\n -Z List security context and permission") \ 1944 3395 1945 3396 #define lsattr_trivial_usage \ 1946 "[-Radlv] [files...]" 1947 #define lsattr_full_usage \ 1948 "List file attributes on an ext2 fs" \ 1949 "\n\nOptions:\n" \ 1950 " -R Recursively list subdirectories\n" \ 1951 " -a Do not hide entries starting with .\n" \ 1952 " -d List directory entries instead of contents\n" \ 1953 " -l Print long flag names\n" \ 1954 " -v List the file's version/generation number" 1955 1956 #define lsmod_trivial_usage \ 1957 "" 1958 #define lsmod_full_usage \ 1959 "List the currently loaded kernel modules" 3397 "[-Radlv] [FILE]..." 3398 #define lsattr_full_usage "\n\n" \ 3399 "List file attributes on an ext2 fs\n" \ 3400 "\nOptions:" \ 3401 "\n -R Recurse" \ 3402 "\n -a Don't hide entries starting with ." \ 3403 "\n -d List directory entries instead of contents" \ 3404 "\n -l List long flag names" \ 3405 "\n -v List the file's version/generation number" \ 3406 3407 #define lspci_trivial_usage \ 3408 "[-mk]" 3409 #define lspci_full_usage "\n\n" \ 3410 "List all PCI devices" \ 3411 "\n" \ 3412 "\n -m Parseable output" \ 3413 "\n -k Show driver" \ 3414 3415 #define lsusb_trivial_usage NOUSAGE_STR 3416 #define lsusb_full_usage "" 1960 3417 1961 3418 #if ENABLE_FEATURE_MAKEDEVS_LEAF 1962 3419 #define makedevs_trivial_usage \ 1963 3420 "NAME TYPE MAJOR MINOR FIRST LAST [s]" 1964 #define makedevs_full_usage \ 1965 "Create a range of block or character special files\n\n" \ 1966 "TYPEs include:\n" \ 1967 " b: Make a block (buffered) device\n" \ 1968 " c or u: Make a character (un-buffered) device\n" \ 1969 " p: Make a named pipe. MAJOR and MINOR are ignored for named pipes\n" \ 1970 "\n" \ 1971 "FIRST specifies the number appended to NAME to create the first device.\n" \ 1972 "LAST specifies the number of the last item that should be created\n" \ 1973 "If 's' is the last argument, the base device is created as well.\n\n" \ 1974 "For example:\n" \ 1975 " makedevs /dev/ttyS c 4 66 2 63 -> ttyS2-ttyS63\n" \ 1976 " makedevs /dev/hda b 3 0 0 8 s -> hda,hda1-hda8" 3421 #define makedevs_full_usage "\n\n" \ 3422 "Create a range of block or character special files" \ 3423 "\n" \ 3424 "\nTYPE is:" \ 3425 "\n b Block device" \ 3426 "\n c Character device" \ 3427 "\n f FIFO, MAJOR and MINOR are ignored" \ 3428 "\n" \ 3429 "\nFIRST..LAST specify numbers appended to NAME." \ 3430 "\nIf 's' is the last argument, the base device is created as well." \ 3431 "\n" \ 3432 "\nExamples:" \ 3433 "\n makedevs /dev/ttyS c 4 66 2 63 -> ttyS2-ttyS63" \ 3434 "\n makedevs /dev/hda b 3 0 0 8 s -> hda,hda1-hda8" 1977 3435 #define makedevs_example_usage \ 1978 3436 "# makedevs /dev/ttyS c 4 66 2 63\n" \ … … 1985 3443 #define makedevs_trivial_usage \ 1986 3444 "[-d device_table] rootdir" 1987 #define makedevs_full_usage \3445 #define makedevs_full_usage "\n\n" \ 1988 3446 "Create a range of special files as specified in a device table.\n" \ 1989 3447 "Device table entries take the form of:\n" \ 1990 3448 "<type> <mode> <uid> <gid> <major> <minor> <start> <inc> <count>\n" \ 1991 3449 "Where name is the file name, type can be one of:\n" \ 1992 " f A regular file\n" \3450 " f Regular file\n" \ 1993 3451 " d Directory\n" \ 1994 " c Character special device file\n" \1995 " b Block special device file\n" \3452 " c Character device\n" \ 3453 " b Block device\n" \ 1996 3454 " p Fifo (named pipe)\n" \ 1997 3455 "uid is the user id for the target file, gid is the group id for the\n" \ … … 2016 3474 #endif 2017 3475 3476 #define makemime_trivial_usage \ 3477 "[OPTIONS] [FILE]..." 3478 #define makemime_full_usage "\n\n" \ 3479 "Create multipart MIME-encoded message from FILEs\n" \ 3480 /* "Transfer encoding is base64, disposition is inline (not attachment)\n" */ \ 3481 "\nOptions:" \ 3482 "\n -o FILE Output. Default: stdout" \ 3483 "\n -a HDR Add header. Examples:" \ 3484 "\n \"From: user@host.org\", \"Date: `date -R`\"" \ 3485 "\n -c CT Content type. Default: text/plain" \ 3486 "\n -C CS Charset. Default: " CONFIG_FEATURE_MIME_CHARSET \ 3487 /* "\n -e ENC Transfer encoding. Ignored. base64 is assumed" */ \ 3488 "\n" \ 3489 "\nOther options are silently ignored" \ 3490 3491 #define man_trivial_usage \ 3492 "[-aw] [MANPAGE]..." 3493 #define man_full_usage "\n\n" \ 3494 "Format and display manual page\n" \ 3495 "\nOptions:" \ 3496 "\n -a Display all pages" \ 3497 "\n -w Show page locations" \ 3498 2018 3499 #define matchpathcon_trivial_usage \ 2019 3500 "[-n] [-N] [-f file_contexts_file] [-p prefix] [-V]" 2020 #define matchpathcon_full_usage \2021 " -n Do not display path" \2022 "\n -N Do not use translations" \2023 2024 2025 "\n -V Verify file context on disk matches defaults"3501 #define matchpathcon_full_usage "\n\n" \ 3502 " -n Don't display path" \ 3503 "\n -N Don't use translations" \ 3504 "\n -f Use alternate file_context file" \ 3505 "\n -p Use prefix to speed translations" \ 3506 "\n -V Verify file context on disk matches defaults" \ 2026 3507 2027 3508 #define md5sum_trivial_usage \ 2028 "[ OPTION] [FILEs...]" \2029 USE_FEATURE_MD5_SHA1_SUM_CHECK("\n or: md5sum [OPTION] -c[FILE]")2030 #define md5sum_full_usage \2031 "Print" USE_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " MD5 checksums" \2032 "\n\nOptions:\n" \2033 "With no FILE, or when FILE is -, read standard input." \2034 USE_FEATURE_MD5_SHA1_SUM_CHECK("\n\n" \2035 " -c Check MD5 sums against given list\n" \2036 "\nThe following two options are useful only when verifying checksums:\n" \2037 " -s Don't output anything, status code shows success\n" \ 2038 " -w Warn about improperly formatted MD5 checksum lines") 3509 "[FILE]..." \ 3510 IF_FEATURE_MD5_SHA1_SUM_CHECK("\n or: md5sum -c [-sw] [FILE]") 3511 #define md5sum_full_usage "\n\n" \ 3512 "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " MD5 checksums" \ 3513 IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n" \ 3514 "\nOptions:" \ 3515 "\n -c Check sums against given list" \ 3516 "\n -s Don't output anything, status code shows success" \ 3517 "\n -w Warn about improperly formatted checksum lines" \ 3518 ) 3519 2039 3520 #define md5sum_example_usage \ 2040 3521 "$ md5sum < busybox\n" \ … … 2047 3528 "^D\n" 2048 3529 3530 #define sha1sum_trivial_usage \ 3531 "[FILE]..." \ 3532 IF_FEATURE_MD5_SHA1_SUM_CHECK("\n or: sha1sum -c [-sw] [FILE]") 3533 #define sha1sum_full_usage "\n\n" \ 3534 "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA1 checksums" \ 3535 IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n" \ 3536 "\nOptions:" \ 3537 "\n -c Check sums against given list" \ 3538 "\n -s Don't output anything, status code shows success" \ 3539 "\n -w Warn about improperly formatted checksum lines" \ 3540 ) 3541 3542 #define sha256sum_trivial_usage \ 3543 "[FILE]..." \ 3544 IF_FEATURE_MD5_SHA1_SUM_CHECK("\n or: sha256sum -c [-sw] [FILE]") 3545 #define sha256sum_full_usage "\n\n" \ 3546 "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA256 checksums" \ 3547 IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n" \ 3548 "\nOptions:" \ 3549 "\n -c Check sums against given list" \ 3550 "\n -s Don't output anything, status code shows success" \ 3551 "\n -w Warn about improperly formatted checksum lines" \ 3552 ) 3553 3554 #define sha512sum_trivial_usage \ 3555 "[FILE]..." \ 3556 IF_FEATURE_MD5_SHA1_SUM_CHECK("\n or: sha512sum -c [-sw] [FILE]") 3557 #define sha512sum_full_usage "\n\n" \ 3558 "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA512 checksums" \ 3559 IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n" \ 3560 "\nOptions:" \ 3561 "\n -c Check sums against given list" \ 3562 "\n -s Don't output anything, status code shows success" \ 3563 "\n -w Warn about improperly formatted checksum lines" \ 3564 ) 3565 2049 3566 #define mdev_trivial_usage \ 2050 3567 "[-s]" 2051 #define mdev_full_usage \ 2052 " -s Scan /sys and populate /dev during system boot\n\n" \ 2053 "Called with no options (via hotplug) it uses environment variables\n" \ 2054 "to determine which device to add/remove." 3568 #define mdev_full_usage "\n\n" \ 3569 " -s Scan /sys and populate /dev during system boot\n" \ 3570 "\n" \ 3571 "It can be run by kernel as a hotplug helper. To activate it:\n" \ 3572 " echo /sbin/mdev > /proc/sys/kernel/hotplug\n" \ 3573 IF_FEATURE_MDEV_CONF( \ 3574 "It uses /etc/mdev.conf with lines\n" \ 3575 "[-]DEVNAME UID:GID PERM" \ 3576 IF_FEATURE_MDEV_RENAME(" [>|=PATH]") \ 3577 IF_FEATURE_MDEV_EXEC(" [@|$|*PROG]") \ 3578 ) \ 3579 2055 3580 #define mdev_notes_usage "" \ 2056 USE_FEATURE_MDEV_CONFIG( \3581 IF_FEATURE_MDEV_CONFIG( \ 2057 3582 "The mdev config file contains lines that look like:\n" \ 2058 3583 " hd[a-z][0-9]* 0:3 660\n\n" \ 2059 3584 "That's device name (with regex match), uid:gid, and permissions.\n\n" \ 2060 USE_FEATURE_MDEV_EXEC( \3585 IF_FEATURE_MDEV_EXEC( \ 2061 3586 "Optionally, that can be followed (on the same line) by a special character\n" \ 2062 3587 "and a command line to run after creating/before deleting the corresponding\n" \ … … 2068 3593 "the /dev directory, and use system() which calls /bin/sh.\n\n" \ 2069 3594 ) \ 2070 "Config file parsing stops on the first matching line. If no config\n" \2071 "entry is matched, devices are created with default 0:0 660. (Make\n" \3595 "Config file parsing stops on the first matching line. If no config\n" \ 3596 "entry is matched, devices are created with default 0:0 660. (Make\n" \ 2072 3597 "the last line match .* to override this.)\n\n" \ 2073 3598 ) 2074 3599 2075 #define mesg_trivial_usage \ 2076 "[y|n]" 2077 #define mesg_full_usage \ 2078 "Control write access to your terminal\n" \ 2079 " y Allow write access to your terminal\n" \ 2080 " n Disallow write access to your terminal" 3600 #define microcom_trivial_usage \ 3601 "[-d DELAY] [-t TIMEOUT] [-s SPEED] [-X] TTY" 3602 #define microcom_full_usage "\n\n" \ 3603 "Copy bytes for stdin to TTY and from TTY to stdout\n" \ 3604 "\nOptions:" \ 3605 "\n -d Wait up to DELAY ms for TTY output before sending every" \ 3606 "\n next byte to it" \ 3607 "\n -t Exit if both stdin and TTY are silent for TIMEOUT ms" \ 3608 "\n -s Set serial line to SPEED" \ 3609 "\n -X Disable special meaning of NUL and Ctrl-X from stdin" \ 2081 3610 2082 3611 #define mkdir_trivial_usage \ 2083 "[OPTION ] DIRECTORY..."2084 #define mkdir_full_usage \2085 "Create the DIRECTORY(ies) if they do not already exist" \2086 "\n\nOptions:\n" \2087 " -m Set permission mode (as in chmod), not rwxrwxrwx - umask\n" \2088 " -p No error if existing,make parent directories as needed" \2089 USE_SELINUX( \2090 3612 "[OPTIONS] DIRECTORY..." 3613 #define mkdir_full_usage "\n\n" \ 3614 "Create DIRECTORY\n" \ 3615 "\nOptions:" \ 3616 "\n -m MODE Mode" \ 3617 "\n -p No error if exists; make parent directories as needed" \ 3618 IF_SELINUX( \ 3619 "\n -Z Set security context" \ 2091 3620 ) 2092 3621 … … 2099 3628 "$ mkdir -p /tmp/foo/bar/baz\n" 2100 3629 2101 #define mke2fs_trivial_usage \2102 "[-c|-l filename] [-b block-size] [-f fragment-size] [-g blocks-per-group] " \2103 "[-i bytes-per-inode] [-j] [-J journal-options] [-N number-of-inodes] [-n] " \2104 "[-m reserved-blocks-percentage] [-o creator-os] [-O feature[,...]] [-q] " \2105 "[r fs-revision-level] [-E extended-options] [-v] [-F] [-L volume-label] " \2106 "[-M last-mounted-directory] [-S] [-T filesystem-type] " \2107 "device [blocks-count]"2108 #define mke2fs_full_usage \2109 " -b size Block size in bytes\n" \2110 " -c Check for bad blocks before creating\n" \2111 " -E opts Set extended options\n" \2112 " -f size Fragment size in bytes\n" \2113 " -F Force (ignore sanity checks)\n" \2114 " -g num Number of blocks in a block group\n" \2115 " -i ratio The bytes/inode ratio\n" \2116 " -j Create a journal (ext3)\n" \2117 " -J opts Set journal options (size/device)\n" \2118 " -l file Read bad blocks list from file\n" \2119 " -L lbl Set the volume label\n" \2120 " -m percent Percent of fs blocks to reserve for admin\n" \2121 " -M dir Set last mounted directory\n" \2122 " -n Do not actually create anything\n" \2123 " -N num Number of inodes to create\n" \2124 " -o os Set the 'creator os' field\n" \2125 " -O features Dir_index/filetype/has_journal/journal_dev/sparse_super\n" \2126 " -q Quiet\n" \2127 " -r rev Set filesystem revision\n" \2128 " -S Write superblock and group descriptors only\n" \2129 " -T fs-type Set usage type (news/largefile/largefile4)\n" \2130 " -v Verbose"2131 2132 3630 #define mkfifo_trivial_usage \ 2133 "[ OPTIONS] name"2134 #define mkfifo_full_usage \2135 "Create a named pipe (identical to 'mknod name p')" \2136 "\n\nOptions:\n" \2137 " -m Create the pipe using the specified mode (default a=rw)" \2138 USE_SELINUX( \2139 3631 "[-m MODE] " IF_SELINUX("[-Z] ") "NAME" 3632 #define mkfifo_full_usage "\n\n" \ 3633 "Create named pipe\n" \ 3634 "\nOptions:" \ 3635 "\n -m MODE Mode (default a=rw)" \ 3636 IF_SELINUX( \ 3637 "\n -Z Set security context" \ 2140 3638 ) 2141 3639 3640 #define mkfs_ext2_trivial_usage \ 3641 "[-Fn] " \ 3642 /* "[-c|-l filename] " */ \ 3643 "[-b BLK_SIZE] " \ 3644 /* "[-f fragment-size] [-g blocks-per-group] " */ \ 3645 "[-i INODE_RATIO] [-I INODE_SIZE] " \ 3646 /* "[-j] [-J journal-options] [-N number-of-inodes] " */ \ 3647 "[-m RESERVED_PERCENT] " \ 3648 /* "[-o creator-os] [-O feature[,...]] [-q] " */ \ 3649 /* "[r fs-revision-level] [-E extended-options] [-v] [-F] " */ \ 3650 "[-L LABEL] " \ 3651 /* "[-M last-mounted-directory] [-S] [-T filesystem-type] " */ \ 3652 "BLOCKDEV [KBYTES]" 3653 #define mkfs_ext2_full_usage "\n\n" \ 3654 " -b BLK_SIZE Block size, bytes" \ 3655 /* "\n -c Check device for bad blocks" */ \ 3656 /* "\n -E opts Set extended options" */ \ 3657 /* "\n -f size Fragment size in bytes" */ \ 3658 "\n -F Force" \ 3659 /* "\n -g N Number of blocks in a block group" */ \ 3660 "\n -i RATIO Max number of files is filesystem_size / RATIO" \ 3661 "\n -I BYTES Inode size (min 128)" \ 3662 /* "\n -j Create a journal (ext3)" */ \ 3663 /* "\n -J opts Set journal options (size/device)" */ \ 3664 /* "\n -l file Read bad blocks list from file" */ \ 3665 "\n -L LBL Volume label" \ 3666 "\n -m PERCENT Percent of blocks to reserve for admin" \ 3667 /* "\n -M dir Set last mounted directory" */ \ 3668 "\n -n Dry run" \ 3669 /* "\n -N N Number of inodes to create" */ \ 3670 /* "\n -o os Set the 'creator os' field" */ \ 3671 /* "\n -O features Dir_index/filetype/has_journal/journal_dev/sparse_super" */ \ 3672 /* "\n -q Quiet" */ \ 3673 /* "\n -r rev Set filesystem revision" */ \ 3674 /* "\n -S Write superblock and group descriptors only" */ \ 3675 /* "\n -T fs-type Set usage type (news/largefile/largefile4)" */ \ 3676 /* "\n -v Verbose" */ \ 3677 2142 3678 #define mkfs_minix_trivial_usage \ 2143 "[-c | -l filename] [-nXX] [-iXX] /dev/name [blocks]" 2144 #define mkfs_minix_full_usage \ 2145 "Make a MINIX filesystem" \ 2146 "\n\nOptions:\n" \ 2147 " -c Check the device for bad blocks\n" \ 2148 " -n [14|30] Specify the maximum length of filenames\n" \ 2149 " -i INODES Specify the number of inodes for the filesystem\n" \ 2150 " -l FILENAME Read the bad blocks list from FILENAME\n" \ 2151 " -v Make a Minix version 2 filesystem" 3679 "[-c | -l FILE] [-nXX] [-iXX] BLOCKDEV [KBYTES]" 3680 #define mkfs_minix_full_usage "\n\n" \ 3681 "Make a MINIX filesystem\n" \ 3682 "\nOptions:" \ 3683 "\n -c Check device for bad blocks" \ 3684 "\n -n [14|30] Maximum length of filenames" \ 3685 "\n -i INODES Number of inodes for the filesystem" \ 3686 "\n -l FILE Read bad blocks list from FILE" \ 3687 "\n -v Make version 2 filesystem" \ 3688 3689 #define mkfs_reiser_trivial_usage \ 3690 "[-f] [-l LABEL] BLOCKDEV [4K-BLOCKS]" 3691 3692 #define mkfs_reiser_full_usage "\n\n" \ 3693 "Make a ReiserFS V3 filesystem\n" \ 3694 "\nOptions:" \ 3695 "\n -f Force" \ 3696 "\n -l LBL Volume label" \ 3697 3698 #define mkfs_vfat_trivial_usage \ 3699 "[-v] [-n LABEL] BLOCKDEV [KBYTES]" 3700 /* Accepted but ignored: 3701 "[-c] [-C] [-I] [-l bad-block-file] [-b backup-boot-sector] " 3702 "[-m boot-msg-file] [-i volume-id] " 3703 "[-s sectors-per-cluster] [-S logical-sector-size] [-f number-of-FATs] " 3704 "[-h hidden-sectors] [-F fat-size] [-r root-dir-entries] [-R reserved-sectors] " 3705 */ 3706 #define mkfs_vfat_full_usage "\n\n" \ 3707 "Make a FAT32 filesystem\n" \ 3708 "\nOptions:" \ 3709 /* "\n -c Check device for bad blocks" */ \ 3710 "\n -v Verbose" \ 3711 /* "\n -I Allow to use entire disk device (e.g. /dev/hda)" */ \ 3712 "\n -n LBL Volume label" \ 2152 3713 2153 3714 #define mknod_trivial_usage \ 2154 "[ OPTIONS]NAME TYPE MAJOR MINOR"2155 #define mknod_full_usage \2156 "Create a special file (block, character, or pipe) " \2157 "\n\nOptions:\n" \2158 " -m Create the special file using the specifiedmode (default a=rw)" \2159 "\n\nTYPEs include:\n"\2160 " b: Make a block (buffered) device\n" \2161 " c or u: Make a character (un-buffered) device\n"\2162 " p: Make a named pipe. MAJOR and MINOR are ignored for named pipes" \2163 USE_SELINUX(\2164 "\n -Z Set security context" \2165 ) 3715 "[-m MODE] " IF_SELINUX("[-Z] ") "NAME TYPE MAJOR MINOR" 3716 #define mknod_full_usage "\n\n" \ 3717 "Create a special file (block, character, or pipe)\n" \ 3718 "\nOptions:" \ 3719 "\n -m MODE Creation mode (default a=rw)" \ 3720 IF_SELINUX( \ 3721 "\n -Z Set security context" \ 3722 ) \ 3723 "\nTYPE:" \ 3724 "\n b Block device" \ 3725 "\n c or u Character device" \ 3726 "\n p Named pipe (MAJOR and MINOR are ignored)" \ 2166 3727 2167 3728 #define mknod_example_usage \ … … 2170 3731 2171 3732 #define mkswap_trivial_usage \ 2172 "[-c] [-v0|-v1] device [block-count]" 2173 #define mkswap_full_usage \ 2174 "Prepare a disk partition to be used as swap partition" \ 2175 "\n\nOptions:\n" \ 2176 " -c Check for read-ability\n" \ 2177 " -v0 Make version 0 swap [max 128 Megs]\n" \ 2178 " -v1 Make version 1 swap [big!] (default for kernels > 2.1.117)\n" \ 2179 " block-count Number of block to use (default is entire partition)" 3733 "[-L LBL] BLOCKDEV [KBYTES]" 3734 #define mkswap_full_usage "\n\n" \ 3735 "Prepare BLOCKDEV to be used as swap partition\n" \ 3736 "\nOptions:" \ 3737 "\n -L LBL Label" \ 2180 3738 2181 3739 #define mktemp_trivial_usage \ 2182 "[-dq] TEMPLATE" 2183 #define mktemp_full_usage \ 2184 "Create a temporary file with its name based on TEMPLATE.\n" \ 2185 "TEMPLATE is any name with six 'Xs' (i.e., /tmp/temp.XXXXXX)." \ 2186 "\n\nOptions:\n" \ 2187 " -d Make a directory instead of a file\n" \ 2188 " -q Fail silently if an error occurs" 3740 "[-dt] [-p DIR] [TEMPLATE]" 3741 #define mktemp_full_usage "\n\n" \ 3742 "Create a temporary file with name based on TEMPLATE and print its name.\n" \ 3743 "TEMPLATE must end with XXXXXX (e.g. [/dir/]nameXXXXXX).\n" \ 3744 "\nOptions:" \ 3745 "\n -d Make a directory instead of a file" \ 3746 /* "\n -q Fail silently if an error occurs" - we ignore it */ \ 3747 "\n -t Generate a path rooted in temporary directory" \ 3748 "\n -p DIR Use DIR as a temporary directory (implies -t)" \ 3749 "\n" \ 3750 "\nFor -t or -p, directory is chosen as follows:" \ 3751 "\n$TMPDIR if set, else -p DIR, else /tmp" \ 3752 2189 3753 #define mktemp_example_usage \ 2190 3754 "$ mktemp /tmp/temp.XXXXXX\n" \ … … 2193 3757 "-rw------- 1 andersen andersen 0 Apr 25 17:10 /tmp/temp.mWiLjM\n" 2194 3758 2195 #define modprobe_trivial_usage \2196 "[-knqrsv] MODULE [symbol=value ...]"2197 #define modprobe_full_usage \2198 "Options:\n" \2199 " -k Make module autoclean-able\n" \2200 " -n Just show what would be done\n" \2201 " -q Quiet\n" \2202 " -r Remove module (stacks) or do autoclean\n" \2203 " -s Report via syslog instead of stderr\n" \2204 " -v Verbose"2205 #define modprobe_notes_usage \2206 "modprobe can (un)load a stack of modules, passing each module options (when\n" \2207 "loading). modprobe uses a configuration file to determine what option(s) to\n" \2208 "pass each module it loads.\n" \2209 "\n" \2210 "The configuration file is searched (in order) amongst:\n" \2211 "\n" \2212 " /etc/modprobe.conf (2.6 only)\n" \2213 " /etc/modules.conf\n" \2214 " /etc/conf.modules (deprecated)\n" \2215 "\n" \2216 "They all have the same syntax (see below). If none is present, it is\n" \2217 "_not_ an error; each loaded module is then expected to load without\n" \2218 "options. Once a file is found, the others are tested for.\n" \2219 "\n" \2220 "/etc/modules.conf entry format:\n" \2221 "\n" \2222 " alias <alias_name> <mod_name>\n" \2223 " Makes it possible to modprobe alias_name, when there is no such module.\n" \2224 " It makes sense if your mod_name is long, or you want a more representative\n" \2225 " name for that module (eg. 'scsi' in place of 'aha7xxx').\n" \2226 " This makes it also possible to use a different set of options (below) for\n" \2227 " the module and the alias.\n" \2228 " A module can be aliased more than once.\n" \2229 "\n" \2230 " options <mod_name|alias_name> <symbol=value ...>\n" \2231 " When loading module mod_name (or the module aliased by alias_name), pass\n" \2232 " the \"symbol=value\" pairs as option to that module.\n" \2233 "\n" \2234 "Sample /etc/modules.conf file:\n" \2235 "\n" \2236 " options tulip irq=3\n" \2237 " alias tulip tulip2\n" \2238 " options tulip2 irq=4 io=0x308\n" \2239 "\n" \2240 "Other functionality offered by 'classic' modprobe is not available in\n" \2241 "this implementation.\n" \2242 "\n" \2243 "If module options are present both in the config file, and on the command line,\n" \2244 "then the options from the command line will be passed to the module _after_\n" \2245 "the options from the config file. That way, you can have defaults in the config\n" \2246 "file, and override them for a specific usage from the command line.\n"2247 #define modprobe_example_usage \2248 "(with the above /etc/modules.conf):\n\n" \2249 "$ modprobe tulip\n" \2250 " will load the module 'tulip' with default option 'irq=3'\n\n" \2251 "$ modprobe tulip irq=5\n" \2252 " will load the module 'tulip' with option 'irq=5', thus overriding the default\n\n" \2253 "$ modprobe tulip2\n" \2254 " will load the module 'tulip' with default options 'irq=4 io=0x308',\n" \2255 " which are the default for alias 'tulip2'\n\n" \2256 "$ modprobe tulip2 irq=8\n" \2257 " will load the module 'tulip' with default options 'irq=4 io=0x308 irq=8',\n" \2258 " which are the default for alias 'tulip2' overridden by the option 'irq=8'\n\n" \2259 " from the command line\n\n" \2260 "$ modprobe tulip2 irq=2 io=0x210\n" \2261 " will load the module 'tulip' with default options 'irq=4 io=0x308 irq=4 io=0x210',\n" \2262 " which are the default for alias 'tulip2' overridden by the options 'irq=2 io=0x210'\n\n" \2263 " from the command line\n"2264 2265 3759 #define more_trivial_usage \ 2266 "[FILE ...]" 2267 #define more_full_usage \ 2268 "View FILE or standard input one screenful at a time" 3760 "[FILE]..." 3761 #define more_full_usage "\n\n" \ 3762 "View FILE (or stdin) one screenful at a time" 3763 2269 3764 #define more_example_usage \ 2270 3765 "$ dmesg | more\n" 2271 3766 2272 3767 #define mount_trivial_usage \ 2273 "[flags] DEVICE NODE [-o options,more-options]" 2274 #define mount_full_usage \ 2275 "Mount a filesystem. Filesystem autodetection requires /proc be mounted." \ 2276 "\n\nOptions:\n" \ 2277 " -a Mount all filesystems in fstab\n" \ 2278 USE_FEATURE_MTAB_SUPPORT( \ 2279 " -f \"Fake\" Add entry to mount table but don't mount it\n" \ 2280 " -n Don't write a mount table entry\n" \ 2281 ) \ 2282 " -o option One of many filesystem options, listed below\n" \ 2283 " -r Mount the filesystem read-only\n" \ 2284 " -t fs-type Specify the filesystem type\n" \ 2285 " -w Mount for reading and writing (default)\n" \ 2286 "\n" \ 2287 "Options for use with the \"-o\" flag:\n" \ 2288 USE_FEATURE_MOUNT_LOOP( \ 2289 " loop Ignored (loop devices are autodetected)\n" \ 2290 ) \ 2291 USE_FEATURE_MOUNT_FLAGS( \ 2292 " [a]sync Writes are asynchronous / synchronous\n" \ 2293 " [no]atime Disable / enable updates to inode access times\n" \ 2294 " [no]diratime Disable / enable atime updates to directories\n" \ 2295 " [no]dev Allow use of special device files / disallow them\n" \ 2296 " [no]exec Allow use of executable files / disallow them\n" \ 2297 " [no]suid Allow set-user-id-root programs / disallow them\n" \ 2298 " [r]shared Convert [recursively] to a shared subtree\n" \ 2299 " [r]slave Convert [recursively] to a slave subtree\n" \ 2300 " [r]private Convert [recursively] to a private subtree\n" \ 2301 " [un]bindable Make mount point [un]able to be bind mounted\n" \ 2302 " bind Bind a directory to an additional location\n" \ 2303 " move Relocate an existing mount point\n" \ 2304 ) \ 2305 " remount Remount a mounted filesystem, changing its flags\n" \ 2306 " ro/rw Mount for read-only / read-write\n" \ 2307 "\n" \ 2308 "There are EVEN MORE flags that are specific to each filesystem\n" \ 2309 "You'll have to see the written documentation for those filesystems" 3768 "[OPTIONS] [-o OPTS] DEVICE NODE" 3769 #define mount_full_usage "\n\n" \ 3770 "Mount a filesystem. Filesystem autodetection requires /proc.\n" \ 3771 "\nOptions:" \ 3772 "\n -a Mount all filesystems in fstab" \ 3773 IF_FEATURE_MOUNT_FAKE( \ 3774 IF_FEATURE_MTAB_SUPPORT( \ 3775 "\n -f Update /etc/mtab, but don't mount" \ 3776 ) \ 3777 IF_NOT_FEATURE_MTAB_SUPPORT( \ 3778 "\n -f Dry run" \ 3779 ) \ 3780 ) \ 3781 IF_FEATURE_MOUNT_HELPERS( \ 3782 "\n -i Don't run mount helper" \ 3783 ) \ 3784 IF_FEATURE_MTAB_SUPPORT( \ 3785 "\n -n Don't update /etc/mtab" \ 3786 ) \ 3787 "\n -r Read-only mount" \ 3788 "\n -w Read-write mount (default)" \ 3789 "\n -t FSTYPE Filesystem type" \ 3790 "\n -O OPT Mount only filesystems with option OPT (-a only)" \ 3791 "\n-o OPT:" \ 3792 IF_FEATURE_MOUNT_LOOP( \ 3793 "\n loop Ignored (loop devices are autodetected)" \ 3794 ) \ 3795 IF_FEATURE_MOUNT_FLAGS( \ 3796 "\n [a]sync Writes are [a]synchronous" \ 3797 "\n [no]atime Disable/enable updates to inode access times" \ 3798 "\n [no]diratime Disable/enable atime updates to directories" \ 3799 "\n [no]relatime Disable/enable atime updates relative to modification time" \ 3800 "\n [no]dev (Dis)allow use of special device files" \ 3801 "\n [no]exec (Dis)allow use of executable files" \ 3802 "\n [no]suid (Dis)allow set-user-id-root programs" \ 3803 "\n [r]shared Convert [recursively] to a shared subtree" \ 3804 "\n [r]slave Convert [recursively] to a slave subtree" \ 3805 "\n [r]private Convert [recursively] to a private subtree" \ 3806 "\n [un]bindable Make mount point [un]able to be bind mounted" \ 3807 "\n bind Bind a file or directory to another location" \ 3808 "\n move Relocate an existing mount point" \ 3809 ) \ 3810 "\n remount Remount a mounted filesystem, changing flags" \ 3811 "\n ro/rw Same as -r/-w" \ 3812 "\n" \ 3813 "\nThere are filesystem-specific -o flags." \ 3814 2310 3815 #define mount_example_usage \ 2311 3816 "$ mount\n" \ … … 2320 3825 2321 3826 #define mountpoint_trivial_usage \ 2322 "[-q] <[-d] DIR | -x DEVICE>" 2323 #define mountpoint_full_usage \ 2324 "mountpoint checks if the directory is a mountpoint" \ 2325 "\n\nOptions:\n" \ 2326 " -q Quiet\n" \ 2327 " -d Print major/minor device number of the filesystem\n" \ 2328 " -x Print major/minor device number of the blockdevice" 3827 "[-q] <[-dn] DIR | -x DEVICE>" 3828 #define mountpoint_full_usage "\n\n" \ 3829 "Check if the directory is a mountpoint\n" \ 3830 "\nOptions:" \ 3831 "\n -q Quiet" \ 3832 "\n -d Print major/minor device number of the filesystem" \ 3833 "\n -n Print device name of the filesystem" \ 3834 "\n -x Print major/minor device number of the blockdevice" \ 3835 2329 3836 #define mountpoint_example_usage \ 2330 3837 "$ mountpoint /proc\n" \ … … 2335 3842 #define mt_trivial_usage \ 2336 3843 "[-f device] opcode value" 2337 #define mt_full_usage \3844 #define mt_full_usage "\n\n" \ 2338 3845 "Control magnetic tape drive operation\n" \ 2339 "\nAvailable Opcodes:\n\n" \ 3846 "\n" \ 3847 "Available Opcodes:\n" \ 3848 "\n" \ 2340 3849 "bsf bsfm bsr bss datacompression drvbuffer eof eom erase\n" \ 2341 3850 "fsf fsfm fsr fss load lock mkpart nop offline ras1 ras2\n" \ 2342 3851 "ras3 reset retension rewind rewoffline seek setblk setdensity\n" \ 2343 "setpart tell unload unlock weof wset" 2344 2345 #define mv_trivial_usage \ 2346 "[OPTION]... SOURCE DEST\n" \ 2347 "or: mv [OPTION]... SOURCE... DIRECTORY" 2348 #define mv_full_usage \ 2349 "Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY" \ 2350 "\n\nOptions:\n" \ 2351 " -f Don't prompt before overwriting\n" \ 2352 " -i Interactive, prompt before overwrite" 2353 #define mv_example_usage \ 2354 "$ mv /tmp/foo /bin/bar\n" 3852 "setpart tell unload unlock weof wset" \ 2355 3853 2356 3854 #define nameif_trivial_usage \ 2357 3855 "[-s] [-c FILE] [{IFNAME MACADDR}]" 2358 #define nameif_full_usage \ 2359 "Rename network interface while it in the down state" \ 2360 "\n\nOptions:\n" \ 2361 " -c FILE Use configuration file (default is /etc/mactab)\n" \ 2362 " -s Use syslog (LOCAL0 facility)\n" \ 2363 " IFNAME MACADDR new_interface_name interface_mac_address" 3856 #define nameif_full_usage "\n\n" \ 3857 "Rename network interface while it in the down state\n" \ 3858 "\nOptions:" \ 3859 "\n -c FILE Use configuration file (default: /etc/mactab)" \ 3860 "\n -s Use syslog (LOCAL0 facility)" \ 3861 "\n IFNAME MACADDR new_interface_name interface_mac_address" \ 3862 2364 3863 #define nameif_example_usage \ 2365 3864 "$ nameif -s dmz0 00:A0:C9:8C:F6:3F\n" \ … … 2367 3866 "$ nameif -c /etc/my_mactab_file\n" \ 2368 3867 2369 #if !ENABLE_DESKTOP2370 2371 #if ENABLE_NC_SERVER || ENABLE_NC_EXTRA2372 #define NC_OPTIONS_STR "\n\nOptions:"2373 #else2374 #define NC_OPTIONS_STR2375 #endif2376 2377 #define nc_trivial_usage \2378 USE_NC_EXTRA("[-iN] [-wN] ")USE_NC_SERVER("[-l] [-p PORT] ") \2379 "["USE_NC_EXTRA("-f FILENAME|")"IPADDR PORTNUM]"USE_NC_EXTRA(" [-e COMMAND]")2380 #define nc_full_usage \2381 "Open a pipe to IP:port" USE_NC_EXTRA(" or file") \2382 NC_OPTIONS_STR \2383 USE_NC_EXTRA( \2384 "\n -e Exec rest of command line after connect" \2385 "\n -i SECS Delay interval for lines sent" \2386 "\n -w SECS Timeout for connect" \2387 "\n -f FILE Use file (ala /dev/ttyS0) instead of network" \2388 ) \2389 USE_NC_SERVER( \2390 "\n -l Listen mode, for inbound connects" \2391 USE_NC_EXTRA( \2392 "\n (use -l twice with -e for persistent server)") \2393 "\n -p PORT Local port number" \2394 )2395 2396 #define nc_notes_usage "" \2397 USE_NC_EXTRA( \2398 "To use netcat as a terminal emulator on a serial port:\n\n" \2399 "$ stty 115200 -F /dev/ttyS0\n" \2400 "$ stty raw -echo -ctlecho && nc -f /dev/ttyS0\n" \2401 )2402 2403 #define nc_example_usage \2404 "$ nc foobar.somedomain.com 25\n" \2405 "220 foobar ESMTP Exim 3.12 #1 Sat, 15 Apr 2000 00:03:02 -0600\n" \2406 "help\n" \2407 "214-Commands supported:\n" \2408 "214- HELO EHLO MAIL RCPT DATA AUTH\n" \2409 "214 NOOP QUIT RSET HELP\n" \2410 "quit\n" \2411 "221 foobar closing connection\n"2412 2413 #else /* DESKTOP nc - much more compatible with nc 1.10 */2414 2415 #define nc_trivial_usage \2416 "[-options] hostname port - connect" \2417 USE_NC_SERVER("\nnc [-options] -l -p port [hostname] [port] - listen")2418 #define nc_full_usage \2419 USE_NC_SERVER( \2420 "-l Listen mode, for inbound connects\n" \2421 ) \2422 "-n Do not do DNS resolution" \2423 "\n-s addr Local address" \2424 "\n-p port Local port" \2425 "\n-u UDP mode" \2426 "\n-v Verbose (cumulative: -vv)" \2427 "\n-w secs Timeout for connects and final net reads" \2428 USE_NC_EXTRA( \2429 "\n-i sec Delay interval for lines sent" /* ", ports scanned" */ \2430 "\n-o file Hex dump of traffic" \2431 "\n-z Zero-I/O mode (scanning)" \2432 ) \2433 "\n-e prog [args] Program to exec after connect (must be last)" \2434 /* "\n-r Randomize local and remote ports" */2435 /* "\n-g gateway Source-routing hop point[s], up to 8" */2436 /* "\n-G num Source-routing pointer: 4, 8, 12, ..." */2437 /* "\nport numbers can be individual or ranges: lo-hi [inclusive]" */2438 2439 #endif2440 2441 #define netstat_trivial_usage \2442 "[-laentuwxr"USE_FEATURE_NETSTAT_WIDE("W")"]"2443 #define netstat_full_usage \2444 "Display networking information" \2445 "\n\nOptions:" \2446 "\n -l Display listening server sockets" \2447 "\n -a Display all sockets (default: connected)" \2448 "\n -e Display other/more information" \2449 "\n -n Don't resolve names" \2450 "\n -t Tcp sockets" \2451 "\n -u Udp sockets" \2452 "\n -w Raw sockets" \2453 "\n -x Unix sockets" \2454 "\n -r Display routing table" \2455 USE_FEATURE_NETSTAT_WIDE( \2456 "\n -W Display with no column truncation" \2457 )2458 2459 #define nice_trivial_usage \2460 "[-n ADJUST] [COMMAND [ARG] ...]"2461 #define nice_full_usage \2462 "Run a program with modified scheduling priority" \2463 "\n\nOptions:\n" \2464 " -n ADJUST Adjust the scheduling priority by ADJUST"2465 2466 3868 #define nmeter_trivial_usage \ 2467 3869 "format_string" 2468 #define nmeter_full_usage \3870 #define nmeter_full_usage "\n\n" \ 2469 3871 "Monitor system in real time\n\n" \ 2470 3872 "Format specifiers:\n" \ 2471 " %Nc or %[cN] Monitor CPU. N - bar size, default 10\n" \3873 " %Nc or %[cN] Monitor CPU. N - bar size, default 10\n" \ 2472 3874 " (displays: S:system U:user N:niced D:iowait I:irq i:softirq)\n" \ 2473 "%[niface] Monitor network interface 'iface'\n" \ 2474 "%m Monitor allocated memory\n" \ 2475 "%[mf] Monitor free memory\n" \ 2476 "%[mt] Monitor total memory\n" \ 2477 "%s Monitor allocated swap\n" \ 2478 "%f Monitor number of used file descriptors\n" \ 2479 "%Ni Monitor total/specific IRQ rate\n" \ 2480 "%x Monitor context switch rate\n" \ 2481 "%p Monitor forks\n" \ 2482 "%[pn] Monitor # of processes\n" \ 2483 "%b Monitor block io\n" \ 2484 "%Nt Show time (with N decimal points)\n" \ 2485 "%Nd Milliseconds between updates (default=1000)\n" \ 2486 "%r Print <cr> instead of <lf> at EOL" 3875 " %[niface] Monitor network interface 'iface'\n" \ 3876 " %m Monitor allocated memory\n" \ 3877 " %[mf] Monitor free memory\n" \ 3878 " %[mt] Monitor total memory\n" \ 3879 " %s Monitor allocated swap\n" \ 3880 " %f Monitor number of used file descriptors\n" \ 3881 " %Ni Monitor total/specific IRQ rate\n" \ 3882 " %x Monitor context switch rate\n" \ 3883 " %p Monitor forks\n" \ 3884 " %[pn] Monitor # of processes\n" \ 3885 " %b Monitor block io\n" \ 3886 " %Nt Show time (with N decimal points)\n" \ 3887 " %Nd Milliseconds between updates (default:1000)\n" \ 3888 " %r Print <cr> instead of <lf> at EOL" \ 3889 2487 3890 #define nmeter_example_usage \ 2488 3891 "nmeter '%250d%t %20c int %i bio %b mem %m forks%p'" 2489 3892 2490 3893 #define nohup_trivial_usage \ 2491 " COMMAND [ARGS]"2492 #define nohup_full_usage \2493 "Run a commandimmune to hangups, with output to a non-tty"3894 "PROG ARGS" 3895 #define nohup_full_usage "\n\n" \ 3896 "Run PROG immune to hangups, with output to a non-tty" 2494 3897 #define nohup_example_usage \ 2495 3898 "$ nohup make &" … … 2497 3900 #define nslookup_trivial_usage \ 2498 3901 "[HOST] [SERVER]" 2499 #define nslookup_full_usage \3902 #define nslookup_full_usage "\n\n" \ 2500 3903 "Query the nameserver for the IP address of the given HOST\n" \ 2501 3904 "optionally using a specified DNS server" … … 2508 3911 "Address: 127.0.0.1\n" 2509 3912 3913 #define ntpd_trivial_usage \ 3914 "[-dnqNw"IF_FEATURE_NTPD_SERVER("l")"] [-S PROG] [-p PEER]..." 3915 #define ntpd_full_usage "\n\n" \ 3916 "NTP client/server\n" \ 3917 "\nOptions:" \ 3918 "\n -d Verbose" \ 3919 "\n -n Do not daemonize" \ 3920 "\n -q Quit after clock is set" \ 3921 "\n -N Run at high priority" \ 3922 "\n -w Do not set time (only query peers), implies -n" \ 3923 IF_FEATURE_NTPD_SERVER( \ 3924 "\n -l Run as server on port 123" \ 3925 ) \ 3926 "\n -S PROG Run PROG after stepping time, stratum change, and every 11 mins" \ 3927 "\n -p PEER Obtain time from PEER (may be repeated)" \ 3928 2510 3929 #define od_trivial_usage \ 2511 "[-aBbcDdeFfHhIiLlOovXx] [FILE]"2512 #define od_full_usage \3930 "[-aBbcDdeFfHhIiLlOovXx] " IF_DESKTOP("[-t TYPE] ") "[FILE]" 3931 #define od_full_usage "\n\n" \ 2513 3932 "Write an unambiguous representation, octal bytes by default, of FILE\n" \ 2514 " to standard output. With no FILE, or when FILE is -, read standard input."3933 "(or stdin) to stdout" 2515 3934 2516 3935 #define openvt_trivial_usage \ 2517 "VTNUM COMMAND [ARGS...]" 2518 #define openvt_full_usage \ 2519 "Start a command on a new virtual terminal" 3936 "[-c N] [-sw] [PROG ARGS]" 3937 #define openvt_full_usage "\n\n" \ 3938 "Start PROG on a new virtual terminal\n" \ 3939 "\nOptions:" \ 3940 "\n -c N Use specified VT" \ 3941 "\n -s Switch to the VT" \ 3942 /* "\n -l Run PROG as login shell (by prepending '-')" */ \ 3943 "\n -w Wait for PROG to exit" \ 3944 2520 3945 #define openvt_example_usage \ 2521 3946 "openvt 2 /bin/ash\n" 2522 3947 3948 /* 3949 #define parse_trivial_usage \ 3950 "[-n MAXTOKENS] [-m MINTOKENS] [-d DELIMS] [-f FLAGS] FILE..." 3951 #define parse_full_usage "" 3952 */ 3953 2523 3954 #define passwd_trivial_usage \ 2524 "[OPTION] [name]" 2525 #define passwd_full_usage \ 2526 "Change a user password. If no name is specified,\n" \ 2527 "changes the password for the current user." \ 2528 "\n\nOptions:\n" \ 2529 " -a Define which algorithm shall be used for the password\n" \ 2530 " (choices: des, md5)\n" /* ", sha1)" */ \ 2531 " -d Delete the password for the specified user account\n" \ 2532 " -l Locks (disables) the specified user account\n" \ 2533 " -u Unlocks (re-enables) the specified user account" 3955 "[OPTIONS] [USER]" 3956 #define passwd_full_usage "\n\n" \ 3957 "Change USER's password. If no USER is specified,\n" \ 3958 "changes the password for the current user.\n" \ 3959 "\nOptions:" \ 3960 "\n -a ALG Algorithm to use for password (des, md5)" /* ", sha1)" */ \ 3961 "\n -d Delete password for the account" \ 3962 "\n -l Lock (disable) account" \ 3963 "\n -u Unlock (re-enable) account" \ 2534 3964 2535 3965 #define chpasswd_trivial_usage \ 2536 "[--md5|--encrypt]" 2537 #define chpasswd_full_usage \ 2538 "Read user:password information from stdin\n" \ 2539 "and update /etc/passwd accordingly." \ 2540 "\n\nOptions:" \ 2541 "\n -e, --encrypt Supplied passwords are in encrypted form" \ 2542 "\n -m, --md5 Use MD5 encryption instead of DES" 2543 2544 #define patch_trivial_usage \ 2545 "[-p num] [-i diff]" 2546 #define patch_full_usage \ 2547 " -p NUM Strip NUM leading components from file names\n" \ 2548 " -i DIFF Read DIFF instead of stdin" 2549 #define patch_example_usage \ 2550 "$ patch -p1 < example.diff\n" \ 2551 "$ patch -p0 -i example.diff" 3966 IF_LONG_OPTS("[--md5|--encrypted]") IF_NOT_LONG_OPTS("[-m|-e]") 3967 #define chpasswd_full_usage "\n\n" \ 3968 "Read user:password from stdin and update /etc/passwd\n" \ 3969 "\nOptions:" \ 3970 IF_LONG_OPTS( \ 3971 "\n -e,--encrypted Supplied passwords are in encrypted form" \ 3972 "\n -m,--md5 Use MD5 encryption instead of DES" \ 3973 ) \ 3974 IF_NOT_LONG_OPTS( \ 3975 "\n -e Supplied passwords are in encrypted form" \ 3976 "\n -m Use MD5 encryption instead of DES" \ 3977 ) 3978 3979 #define pgrep_trivial_usage \ 3980 "[-flnovx] [-s SID|-P PPID|PATTERN]" 3981 #define pgrep_full_usage "\n\n" \ 3982 "Display process(es) selected by regex PATTERN\n" \ 3983 "\nOptions:" \ 3984 "\n -l Show command name too" \ 3985 "\n -f Match against entire command line" \ 3986 "\n -n Show the newest process only" \ 3987 "\n -o Show the oldest process only" \ 3988 "\n -v Negate the match" \ 3989 "\n -x Match whole name (not substring)" \ 3990 "\n -s Match session ID (0 for current)" \ 3991 "\n -P Match parent process ID" \ 2552 3992 2553 3993 #if (ENABLE_FEATURE_PIDOF_SINGLE || ENABLE_FEATURE_PIDOF_OMIT) 2554 #define USAGE_PIDOF "Options:" 3994 #define pidof_trivial_usage \ 3995 "[OPTIONS] [NAME]..." 3996 #define USAGE_PIDOF "\n\nOptions:" 2555 3997 #else 2556 #define USAGE_PIDOF "\nThis version of pidof accepts no options." 3998 #define pidof_trivial_usage \ 3999 "[NAME]..." 4000 #define USAGE_PIDOF /* none */ 2557 4001 #endif 2558 2559 #define pidof_trivial_usage \ 2560 "process-name [OPTION] [process-name ...]" 2561 2562 #define pidof_full_usage \ 2563 "List the PIDs of all processes with names that match the\n" \ 2564 "names on the command line\n" \ 4002 #define pidof_full_usage "\n\n" \ 4003 "List PIDs of all processes with names that match NAMEs" \ 2565 4004 USAGE_PIDOF \ 2566 USE_FEATURE_PIDOF_SINGLE( \ 2567 "\n -s Display only a single PID") \ 2568 USE_FEATURE_PIDOF_OMIT( \ 2569 "\n -o PID Omit given pid") \ 2570 USE_FEATURE_PIDOF_OMIT( \ 2571 "\n Use %PPID to omit the parent pid of pidof itself") 4005 IF_FEATURE_PIDOF_SINGLE( \ 4006 "\n -s Show only one PID" \ 4007 ) \ 4008 IF_FEATURE_PIDOF_OMIT( \ 4009 "\n -o PID Omit given pid" \ 4010 "\n Use %PPID to omit pid of pidof's parent" \ 4011 ) \ 4012 2572 4013 #define pidof_example_usage \ 2573 4014 "$ pidof init\n" \ 2574 4015 "1\n" \ 2575 USE_FEATURE_PIDOF_OMIT( \4016 IF_FEATURE_PIDOF_OMIT( \ 2576 4017 "$ pidof /bin/sh\n20351 5973 5950\n") \ 2577 USE_FEATURE_PIDOF_OMIT( \4018 IF_FEATURE_PIDOF_OMIT( \ 2578 4019 "$ pidof /bin/sh -o %PPID\n20351 5950") 2579 4020 … … 2581 4022 #define ping_trivial_usage \ 2582 4023 "host" 2583 #define ping_full_usage \4024 #define ping_full_usage "\n\n" \ 2584 4025 "Send ICMP ECHO_REQUEST packets to network hosts" 2585 4026 #define ping6_trivial_usage \ 2586 4027 "host" 2587 #define ping6_full_usage \4028 #define ping6_full_usage "\n\n" \ 2588 4029 "Send ICMP ECHO_REQUEST packets to network hosts" 2589 4030 #else 2590 4031 #define ping_trivial_usage \ 2591 "[OPTION]... host" 2592 #define ping_full_usage \ 2593 "Send ICMP ECHO_REQUEST packets to network hosts" \ 2594 "\n\nOptions:\n" \ 2595 " -4, -6 Force IPv4 or IPv6 hostname resolution\n" \ 2596 " -c CNT Send only CNT pings\n" \ 2597 " -s SIZE Send SIZE data bytes in packets (default=56)\n" \ 2598 " -I iface/IP Use interface or IP address as source\n" \ 2599 " -q Quiet, only displays output at start\n" \ 2600 " and when finished" 4032 "[OPTIONS] HOST" 4033 #define ping_full_usage "\n\n" \ 4034 "Send ICMP ECHO_REQUEST packets to network hosts\n" \ 4035 "\nOptions:" \ 4036 "\n -4,-6 Force IP or IPv6 name resolution" \ 4037 "\n -c CNT Send only CNT pings" \ 4038 "\n -s SIZE Send SIZE data bytes in packets (default:56)" \ 4039 "\n -I IFACE/IP Use interface or IP address as source" \ 4040 "\n -W SEC Seconds to wait for the first response (default:10)" \ 4041 "\n (after all -c CNT packets are sent)" \ 4042 "\n -w SEC Seconds until ping exits (default:infinite)" \ 4043 "\n (can exit earlier with -c CNT)" \ 4044 "\n -q Quiet, only displays output at start" \ 4045 "\n and when finished" \ 4046 2601 4047 #define ping6_trivial_usage \ 2602 "[OPTION]... host" 2603 #define ping6_full_usage \ 2604 "Send ICMP ECHO_REQUEST packets to network hosts" \ 2605 "\n\nOptions:\n" \ 2606 " -c CNT Send only CNT pings\n" \ 2607 " -s SIZE Send SIZE data bytes in packets (default=56)\n" \ 2608 " -I iface/IP Use interface or IP address as source\n" \ 2609 " -q Quiet, only displays output at start\n" \ 2610 " and when finished" 4048 "[OPTIONS] HOST" 4049 #define ping6_full_usage "\n\n" \ 4050 "Send ICMP ECHO_REQUEST packets to network hosts\n" \ 4051 "\nOptions:" \ 4052 "\n -c CNT Send only CNT pings" \ 4053 "\n -s SIZE Send SIZE data bytes in packets (default:56)" \ 4054 "\n -I IFACE/IP Use interface or IP address as source" \ 4055 "\n -q Quiet, only displays output at start" \ 4056 "\n and when finished" \ 4057 2611 4058 #endif 2612 4059 #define ping_example_usage \ … … 2627 4074 "round-trip min/avg/max = 20.1/20.1/20.1 ms\n" 2628 4075 4076 #define pipe_progress_trivial_usage NOUSAGE_STR 4077 #define pipe_progress_full_usage "" 4078 2629 4079 #define pivot_root_trivial_usage \ 2630 4080 "NEW_ROOT PUT_OLD" 2631 #define pivot_root_full_usage \4081 #define pivot_root_full_usage "\n\n" \ 2632 4082 "Move the current root file system to PUT_OLD and make NEW_ROOT\n" \ 2633 4083 "the new root file system" 2634 4084 2635 #define poweroff_trivial_usage \ 2636 "[-d delay] [-n] [-f]" 2637 #define poweroff_full_usage \ 2638 "Halt and shut off power" \ 2639 "\n\nOptions:\n" \ 2640 " -d Delay interval for halting\n" \ 2641 " -n No call to sync()\n" \ 2642 " -f Force power off (don't go through init)" 4085 #define pkill_trivial_usage \ 4086 "[-l|-SIGNAL] [-fnovx] [-s SID|-P PPID|PATTERN]" 4087 #define pkill_full_usage "\n\n" \ 4088 "Send a signal to process(es) selected by regex PATTERN\n" \ 4089 "\nOptions:" \ 4090 "\n -l List all signals" \ 4091 "\n -f Match against entire command line" \ 4092 "\n -n Signal the newest process only" \ 4093 "\n -o Signal the oldest process only" \ 4094 "\n -v Negate the match" \ 4095 "\n -x Match whole name (not substring)" \ 4096 "\n -s Match session ID (0 for current)" \ 4097 "\n -P Match parent process ID" \ 4098 4099 #define popmaildir_trivial_usage \ 4100 "[OPTIONS] MAILDIR [CONN_HELPER ARGS]" 4101 #define popmaildir_full_usage "\n\n" \ 4102 "Fetch content of remote mailbox to local maildir\n" \ 4103 "\nOptions:" \ 4104 /* "\n -b Binary mode. Ignored" */ \ 4105 /* "\n -d Debug. Ignored" */ \ 4106 /* "\n -m Show used memory. Ignored" */ \ 4107 /* "\n -V Show version. Ignored" */ \ 4108 /* "\n -c Use tcpclient. Ignored" */ \ 4109 /* "\n -a Use APOP protocol. Implied. If server supports APOP -> use it" */ \ 4110 "\n -s Skip authorization" \ 4111 "\n -T Get messages with TOP instead of RETR" \ 4112 "\n -k Keep retrieved messages on the server" \ 4113 "\n -t SEC Network timeout" \ 4114 IF_FEATURE_POPMAILDIR_DELIVERY( \ 4115 "\n -F \"PROG ARGS\" Filter program (may be repeated)" \ 4116 "\n -M \"PROG ARGS\" Delivery program" \ 4117 ) \ 4118 "\n" \ 4119 "\nFetch from plain POP3 server:" \ 4120 "\npopmaildir -k DIR nc pop3.server.com 110 <user_and_pass.txt" \ 4121 "\nFetch from SSLed POP3 server and delete fetched emails:" \ 4122 "\npopmaildir DIR -- openssl s_client -quiet -connect pop3.server.com:995 <user_and_pass.txt" 4123 /* "\n -R BYTES Remove old messages on the server >= BYTES. Ignored" */ 4124 /* "\n -Z N1-N2 Remove messages from N1 to N2 (dangerous). Ignored" */ 4125 /* "\n -L BYTES Don't retrieve new messages >= BYTES. Ignored" */ 4126 /* "\n -H LINES Type first LINES of a message. Ignored" */ 4127 #define popmaildir_example_usage \ 4128 "$ popmaildir -k ~/Maildir -- nc pop.drvv.ru 110 [<password_file]\n" \ 4129 "$ popmaildir ~/Maildir -- openssl s_client -quiet -connect pop.gmail.com:995 [<password_file]\n" 2643 4130 2644 4131 #define printenv_trivial_usage \ 2645 "[VARIABLE S...]"2646 #define printenv_full_usage \2647 "Print all or part of environment.\n" \2648 "If no environment VARIABLE specified, print themall."4132 "[VARIABLE]..." 4133 #define printenv_full_usage "\n\n" \ 4134 "Print environment VARIABLEs.\n" \ 4135 "If no VARIABLE specified, print all." 2649 4136 2650 4137 #define printf_trivial_usage \ 2651 "FORMAT [ARGUMENT ...]"2652 #define printf_full_usage \4138 "FORMAT [ARGUMENT]..." 4139 #define printf_full_usage "\n\n" \ 2653 4140 "Format and print ARGUMENT(s) according to FORMAT,\n" \ 2654 4141 "where FORMAT controls the output exactly as in C printf" … … 2661 4148 2662 4149 #define ps_trivial_usage \ 2663 "" 2664 #define ps_full_usage \ 2665 "Report process status" \ 2666 "\n\nOptions:" \ 2667 "\n -o col1,col2=header Select columns for display" \ 4150 "[-o COL1,COL2=HEADER]" IF_FEATURE_SHOW_THREADS(" [-T]") 4151 #define ps_full_usage "\n\n" \ 4152 "Show list of processes\n" \ 4153 "\nOptions:" \ 4154 "\n -o COL1,COL2=HEADER Select columns for display" \ 4155 IF_FEATURE_SHOW_THREADS( \ 4156 "\n -T Show threads" \ 4157 ) 2668 4158 2669 4159 #else /* !ENABLE_DESKTOP */ 2670 4160 2671 #if ! defined CONFIG_SELINUX && !ENABLE_FEATURE_PS_WIDE4161 #if !ENABLE_SELINUX && !ENABLE_FEATURE_PS_WIDE 2672 4162 #define USAGE_PS "\nThis version of ps accepts no options" 2673 4163 #else … … 2677 4167 #define ps_trivial_usage \ 2678 4168 "" 2679 #define ps_full_usage \2680 " Report process status\n" \4169 #define ps_full_usage "\n\n" \ 4170 "Show list of processes\n" \ 2681 4171 USAGE_PS \ 2682 USE_SELINUX( \ 2683 "\n -Z Show SE Linux context") \ 2684 USE_FEATURE_PS_WIDE( \ 2685 "\n w Wide output") 4172 IF_SELINUX( \ 4173 "\n -Z Show selinux context" \ 4174 ) \ 4175 IF_FEATURE_PS_WIDE( \ 4176 "\n w Wide output" \ 4177 ) 2686 4178 2687 4179 #endif /* ENABLE_DESKTOP */ … … 2698 4190 " 743 andersen andersen S -bash\n" \ 2699 4191 " 745 root root S [getty]\n" \ 2700 " 2990 andersen andersen R ps\n" 4192 " 2990 andersen andersen R ps\n" \ 2701 4193 2702 4194 #define pscan_trivial_usage \ 2703 "[-p MIN_PORT] [-P MAX_PORT] [-t TIMEOUT] [-T MIN_RTT] HOST" 2704 #define pscan_full_usage \ 2705 "Scan a host, print all open ports" \ 2706 "\n\nOptions:" \ 4195 "[-cb] [-p MIN_PORT] [-P MAX_PORT] [-t TIMEOUT] [-T MIN_RTT] HOST" 4196 #define pscan_full_usage "\n\n" \ 4197 "Scan a host, print all open ports\n" \ 4198 "\nOptions:" \ 4199 "\n -c Show closed ports too" \ 4200 "\n -b Show blocked ports too" \ 2707 4201 "\n -p Scan from this port (default 1)" \ 2708 4202 "\n -P Scan up to this port (default 1024)" \ … … 2712 4206 #define pwd_trivial_usage \ 2713 4207 "" 2714 #define pwd_full_usage \4208 #define pwd_full_usage "\n\n" \ 2715 4209 "Print the full filename of the current working directory" 2716 4210 #define pwd_example_usage \ … … 2720 4214 #define raidautorun_trivial_usage \ 2721 4215 "DEVICE" 2722 #define raidautorun_full_usage \4216 #define raidautorun_full_usage "\n\n" \ 2723 4217 "Tell the kernel to automatically search and start RAID arrays" 2724 4218 #define raidautorun_example_usage \ … … 2727 4221 #define rdate_trivial_usage \ 2728 4222 "[-sp] HOST" 2729 #define rdate_full_usage \ 2730 "Get and possibly set the system date and time from a remote HOST" \ 2731 "\n\nOptions:\n" \ 2732 " -s Set the system date and time (default)\n" \ 2733 " -p Print the date and time" 4223 #define rdate_full_usage "\n\n" \ 4224 "Get and possibly set the system date and time from a remote HOST\n" \ 4225 "\nOptions:" \ 4226 "\n -s Set the system date and time (default)" \ 4227 "\n -p Print the date and time" \ 4228 4229 #define rdev_trivial_usage \ 4230 "" 4231 #define rdev_full_usage "\n\n" \ 4232 "Print the device node associated with the filesystem mounted at '/'" 4233 #define rdev_example_usage \ 4234 "$ rdev\n" \ 4235 "/dev/mtdblock9 /\n" 2734 4236 2735 4237 #define readahead_trivial_usage \ 2736 4238 "[FILE]..." 2737 #define readahead_full_usage \ 2738 "Preload FILE(s) in RAM cache so that subsequent reads for those" \ 2739 "files do not block on disk I/O" 4239 #define readahead_full_usage "\n\n" \ 4240 "Preload FILEs to RAM" 2740 4241 2741 4242 #define readlink_trivial_usage \ 2742 USE_FEATURE_READLINK_FOLLOW("[-f] ") "FILE"2743 #define readlink_full_usage \4243 IF_FEATURE_READLINK_FOLLOW("[-fnv] ") "FILE" 4244 #define readlink_full_usage "\n\n" \ 2744 4245 "Display the value of a symlink" \ 2745 USE_FEATURE_READLINK_FOLLOW( \ 2746 "\n\nOptions:\n" \ 2747 " -f Canonicalize by following all symlinks") 4246 IF_FEATURE_READLINK_FOLLOW( "\n" \ 4247 "\nOptions:" \ 4248 "\n -f Canonicalize by following all symlinks" \ 4249 "\n -n Don't add newline" \ 4250 "\n -v Verbose" \ 4251 ) \ 2748 4252 2749 4253 #define readprofile_trivial_usage \ 2750 "[OPTIONS] ..."2751 #define readprofile_full_usage \2752 "Options: \n" \2753 " -m mapfile (Default: /boot/System.map)\n" \2754 " -p profile (Default: /proc/profile)\n" \2755 " -M mult Set the profiling multiplier to mult\n" \2756 " -i Print only info about the sampling step\n" \2757 " -v Verbose\n" \2758 " -a Print all symbols, even if count is 0\n" \2759 " -b Print individual histogram-bin counts\n" \2760 " -s Print individual counters within functions\n" \2761 " -r Reset all the counters (root only)\n" \2762 " -n Disable byte order auto-detection"4254 "[OPTIONS]" 4255 #define readprofile_full_usage "\n\n" \ 4256 "Options:" \ 4257 "\n -m mapfile (Default: /boot/System.map)" \ 4258 "\n -p profile (Default: /proc/profile)" \ 4259 "\n -M NUM Set the profiling multiplier to NUM" \ 4260 "\n -i Print only info about the sampling step" \ 4261 "\n -v Verbose" \ 4262 "\n -a Print all symbols, even if count is 0" \ 4263 "\n -b Print individual histogram-bin counts" \ 4264 "\n -s Print individual counters within functions" \ 4265 "\n -r Reset all the counters (root only)" \ 4266 "\n -n Disable byte order auto-detection" \ 2763 4267 2764 4268 #define realpath_trivial_usage \ 2765 "pathname ..." 2766 #define realpath_full_usage \ 2767 "Return the absolute pathnames of given argument" 2768 2769 #define reboot_trivial_usage \ 2770 "[-d delay] [-n] [-f]" 2771 #define reboot_full_usage \ 2772 "Reboot the system" \ 2773 "\n\nOptions:\n" \ 2774 " -d Delay interval for rebooting\n" \ 2775 " -n No call to sync()\n" \ 2776 " -f Force reboot (don't go through init)" 2777 2778 #define renice_trivial_usage \ 2779 "{{-n INCREMENT} | PRIORITY} [[-p | -g | -u] ID ...]" 2780 #define renice_full_usage \ 2781 "Change priority of running processes" \ 2782 "\n\nOptions:\n" \ 2783 " -n Adjusts current nice value (smaller is faster)\n" \ 2784 " -p Process id(s) (default)\n" \ 2785 " -g Process group id(s)\n" \ 2786 " -u Process user name(s) and/or id(s)" 4269 "FILE..." 4270 #define realpath_full_usage "\n\n" \ 4271 "Return the absolute pathnames of given FILE" 4272 4273 #define reformime_trivial_usage \ 4274 "[OPTIONS] [FILE]..." 4275 #define reformime_full_usage "\n\n" \ 4276 "Parse MIME-encoded message\n" \ 4277 "\nOptions:" \ 4278 "\n -x PREFIX Extract content of MIME sections to files" \ 4279 "\n -X PROG ARGS Filter content of MIME sections through PROG" \ 4280 "\n Must be the last option" \ 4281 "\n" \ 4282 "\nOther options are silently ignored" \ 4283 4284 #define scriptreplay_trivial_usage \ 4285 "timingfile [typescript [divisor]]" 4286 #define scriptreplay_full_usage "\n\n" \ 4287 "Play back typescripts, using timing information" 2787 4288 2788 4289 #define reset_trivial_usage \ 2789 4290 "" 2790 #define reset_full_usage \4291 #define reset_full_usage "\n\n" \ 2791 4292 "Reset the screen" 2792 4293 2793 4294 #define resize_trivial_usage \ 2794 4295 "" 2795 #define resize_full_usage \4296 #define resize_full_usage "\n\n" \ 2796 4297 "Resize the screen" 2797 4298 2798 4299 #define restorecon_trivial_usage \ 2799 "[-iFn rRv] [-e excludedir]... [-o filename] [-f filename | pathname]"2800 #define restorecon_full_usage \4300 "[-iFnRv] [-e EXCLUDEDIR]... [-o FILE] [-f FILE]" 4301 #define restorecon_full_usage "\n\n" \ 2801 4302 "Reset security contexts of files in pathname\n" \ 2802 "\n -i Ignore files that do not exist" \ 2803 "\n -f filename File with list of files to process. Use - for stdin" \ 2804 "\n -e directory Directory to exclude" \ 2805 "\n -R,-r Recurse directories" \ 2806 "\n -n Don't change any file labels" \ 2807 "\n -o filename Save list of files with incorrect context" \ 2808 "\n -v Verbose" \ 2809 "\n -vv Show changed labels" \ 2810 "\n -F Force reset of context to match file_context" \ 2811 "\n for customizable files, or the user section," \ 2812 "\n if it has changed" 4303 "\n -i Ignore files that don't exist" \ 4304 "\n -f FILE File with list of files to process" \ 4305 "\n -e DIR Directory to exclude" \ 4306 "\n -R,-r Recurse" \ 4307 "\n -n Don't change any file labels" \ 4308 "\n -o FILE Save list of files with incorrect context" \ 4309 "\n -v Verbose" \ 4310 "\n -vv Show changed labels" \ 4311 "\n -F Force reset of context to match file_context" \ 4312 "\n for customizable files, or the user section," \ 4313 "\n if it has changed" \ 4314 4315 #define rfkill_trivial_usage \ 4316 "COMMAND [INDEX|TYPE]" 4317 #define rfkill_full_usage "\n\n" \ 4318 "Enable/disable wireless devices\n" \ 4319 "\nCommands:" \ 4320 "\n list [INDEX|TYPE] List current state" \ 4321 "\n block INDEX|TYPE Disable device" \ 4322 "\n unblock INDEX|TYPE Enable device" \ 4323 "\n" \ 4324 "\n TYPE: all, wlan(wifi), bluetooth, uwb(ultrawideband)," \ 4325 "\n wimax, wwan, gps, fm" \ 2813 4326 2814 4327 #define rm_trivial_usage \ 2815 "[ OPTION]...FILE..."2816 #define rm_full_usage \2817 "Remove (unlink) the FILE(s). You may use '--' to\n" \2818 "indicate that all following arguments are non-options." \2819 "\n\nOptions:\n" \2820 " -i Always prompt before removing each destination\n" \2821 " -f Remove existing destinations, never prompt\n" \2822 " -r,-R Remove the contents of directories recursively" 4328 "[-irf] FILE..." 4329 #define rm_full_usage "\n\n" \ 4330 "Remove (unlink) FILEs\n" \ 4331 "\nOptions:" \ 4332 "\n -i Always prompt before removing" \ 4333 "\n -f Never prompt" \ 4334 "\n -R,-r Recurse" \ 4335 2823 4336 #define rm_example_usage \ 2824 4337 "$ rm -rf /tmp/foo\n" 2825 4338 2826 4339 #define rmdir_trivial_usage \ 2827 "[OPTION]... DIRECTORY..." 2828 #define rmdir_full_usage \ 2829 "Remove the DIRECTORY, if it is empty" 4340 "[OPTIONS] DIRECTORY..." 4341 #define rmdir_full_usage "\n\n" \ 4342 "Remove DIRECTORY if it is empty\n" \ 4343 "\nOptions:" \ 4344 IF_FEATURE_RMDIR_LONG_OPTIONS( \ 4345 "\n -p|--parents Include parents" \ 4346 "\n --ignore-fail-on-non-empty" \ 4347 ) \ 4348 IF_NOT_FEATURE_RMDIR_LONG_OPTIONS( \ 4349 "\n -p Include parents" \ 4350 ) 4351 2830 4352 #define rmdir_example_usage \ 2831 4353 "# rmdir /tmp/foo\n" 2832 4354 2833 #define rmmod_trivial_usage \2834 "[OPTION]... [MODULE]..."2835 #define rmmod_full_usage \2836 "Unload the specified kernel modules from the kernel" \2837 "\n\nOptions:\n" \2838 " -a Remove all unused modules (recursively)"2839 #define rmmod_example_usage \2840 "$ rmmod tulip\n"2841 2842 4355 #define route_trivial_usage \ 2843 4356 "[{add|del|delete}]" 2844 #define route_full_usage \2845 "Edit the kernel's routing tables" \2846 "\n\nOptions:\n" \2847 " -n Dont resolve names\n" \2848 " -e Display other/more information\n" \2849 " -A inet" USE_FEATURE_IPV6("{6}") " Select address family"4357 #define route_full_usage "\n\n" \ 4358 "Edit kernel routing tables\n" \ 4359 "\nOptions:" \ 4360 "\n -n Don't resolve names" \ 4361 "\n -e Display other/more information" \ 4362 "\n -A inet" IF_FEATURE_IPV6("{6}") " Select address family" \ 2850 4363 2851 4364 #define rpm_trivial_usage \ 2852 "-i -q[ildc]p package.rpm"2853 #define rpm_full_usage \2854 "Manipulate RPM packages " \2855 "\n\nOptions:" \2856 2857 "\n -qQuery package" \2858 "\n -p Query uninstalled package" \2859 2860 2861 2862 "\n -c List config files"4365 "-i PACKAGE.rpm; rpm -qp[ildc] PACKAGE.rpm" 4366 #define rpm_full_usage "\n\n" \ 4367 "Manipulate RPM packages\n" \ 4368 "\nCommands:" \ 4369 "\n -i Install package" \ 4370 "\n -qp Query package" \ 4371 "\nOptions:" \ 4372 "\n -i Show information" \ 4373 "\n -l List contents" \ 4374 "\n -d List documents" \ 4375 "\n -c List config files" \ 2863 4376 2864 4377 #define rpm2cpio_trivial_usage \ 2865 4378 "package.rpm" 2866 #define rpm2cpio_full_usage \4379 #define rpm2cpio_full_usage "\n\n" \ 2867 4380 "Output a cpio archive of the rpm file" 2868 4381 4382 #define rtcwake_trivial_usage \ 4383 "[-a | -l | -u] [-d DEV] [-m MODE] [-s SEC | -t TIME]" 4384 #define rtcwake_full_usage "\n\n" \ 4385 "Enter a system sleep state until specified wakeup time\n" \ 4386 IF_LONG_OPTS( \ 4387 "\n -a,--auto Read clock mode from adjtime" \ 4388 "\n -l,--local Clock is set to local time" \ 4389 "\n -u,--utc Clock is set to UTC time" \ 4390 "\n -d,--device=DEV Specify the RTC device" \ 4391 "\n -m,--mode=MODE Set the sleep state (default: standby)" \ 4392 "\n -s,--seconds=SEC Set the timeout in SEC seconds from now" \ 4393 "\n -t,--time=TIME Set the timeout to TIME seconds from epoch" \ 4394 ) \ 4395 IF_NOT_LONG_OPTS( \ 4396 "\n -a Read clock mode from adjtime" \ 4397 "\n -l Clock is set to local time" \ 4398 "\n -u Clock is set to UTC time" \ 4399 "\n -d DEV Specify the RTC device" \ 4400 "\n -m MODE Set the sleep state (default: standby)" \ 4401 "\n -s SEC Set the timeout in SEC seconds from now" \ 4402 "\n -t TIME Set the timeout to TIME seconds from epoch" \ 4403 ) 4404 2869 4405 #define runcon_trivial_usage \ 2870 "[-c] [-u USER] [-r ROLE] [-t TYPE] [-l RANGE] COMMAND [args]\n" \ 2871 " runcon CONTEXT COMMAND [args]" 2872 #define runcon_full_usage \ 2873 "runcon [-c] [-u USER] [-r ROLE] [-t TYPE] [-l RANGE] COMMAND [args]\n" \ 2874 "runcon CONTEXT COMMAND [args]\n" \ 2875 "Run a program in a different security context\n\n" \ 2876 " CONTEXT Complete security context\n" \ 2877 " -c, --compute Compute process transition context before modifying\n" \ 2878 " -t, --type=TYPE Type (for same role as parent)\n" \ 2879 " -u, --user=USER User identity\n" \ 2880 " -r, --role=ROLE Role\n" \ 2881 " -l, --range=RNG Levelrange" \ 4406 "[-c] [-u USER] [-r ROLE] [-t TYPE] [-l RANGE] PROG ARGS\n" \ 4407 "runcon CONTEXT PROG ARGS" 4408 #define runcon_full_usage "\n\n" \ 4409 "Run PROG in a different security context\n" \ 4410 "\n CONTEXT Complete security context\n" \ 4411 IF_FEATURE_RUNCON_LONG_OPTIONS( \ 4412 "\n -c,--compute Compute process transition context before modifying" \ 4413 "\n -t,--type=TYPE Type (for same role as parent)" \ 4414 "\n -u,--user=USER User identity" \ 4415 "\n -r,--role=ROLE Role" \ 4416 "\n -l,--range=RNG Levelrange" \ 4417 ) \ 4418 IF_NOT_FEATURE_RUNCON_LONG_OPTIONS( \ 4419 "\n -c Compute process transition context before modifying" \ 4420 "\n -t TYPE Type (for same role as parent)" \ 4421 "\n -u USER User identity" \ 4422 "\n -r ROLE Role" \ 4423 "\n -l RNG Levelrange" \ 4424 ) 2882 4425 2883 4426 #define run_parts_trivial_usage \ 2884 "[-t] "USE_FEATURE_RUN_PARTS_FANCY("[-l] ")"[-a ARG] [-u MASK] DIRECTORY" 2885 #define run_parts_full_usage \ 2886 "Run a bunch of scripts in a directory" \ 2887 "\n\nOptions:\n" \ 2888 " -t Prints what would be run, but does not actually run anything\n" \ 2889 " -a ARG Pass ARG as an argument for every program invoked\n" \ 2890 " -u MASK Set the umask to MASK before executing every program" \ 2891 USE_FEATURE_RUN_PARTS_FANCY("\n -l Prints names of all matching files even when they are not executable") 4427 "[-t] "IF_FEATURE_RUN_PARTS_FANCY("[-l] ")"[-a ARG] [-u MASK] DIRECTORY" 4428 #define run_parts_full_usage "\n\n" \ 4429 "Run a bunch of scripts in DIRECTORY\n" \ 4430 "\nOptions:" \ 4431 "\n -t Print what would be run, but don't actually run anything" \ 4432 "\n -a ARG Pass ARG as argument for every program" \ 4433 "\n -u MASK Set the umask to MASK before running every program" \ 4434 IF_FEATURE_RUN_PARTS_FANCY( \ 4435 "\n -l Print names of all matching files even if they are not executable" \ 4436 ) 2892 4437 2893 4438 #define run_parts_example_usage \ … … 2906 4451 2907 4452 #define runlevel_trivial_usage \ 2908 "[utmp]" 2909 #define runlevel_full_usage \ 2910 "Find the current and previous system runlevel.\n\n" \ 2911 "If no utmp file exists or if no runlevel record can be found,\n" \ 4453 "[FILE]" 4454 #define runlevel_full_usage "\n\n" \ 4455 "Find the current and previous system runlevel\n" \ 4456 "\n" \ 4457 "If no utmp FILE exists or if no runlevel record can be found,\n" \ 2912 4458 "print \"unknown\"" 2913 4459 #define runlevel_example_usage \ … … 2916 4462 2917 4463 #define runsv_trivial_usage \ 2918 " dir"2919 #define runsv_full_usage \4464 "DIR" 4465 #define runsv_full_usage "\n\n" \ 2920 4466 "Start and monitor a service and optionally an appendant log service" 2921 4467 2922 4468 #define runsvdir_trivial_usage \ 2923 "[-P] dir" 2924 #define runsvdir_full_usage \ 2925 "Start a runsv process for each subdirectory" 4469 "[-P] [-s SCRIPT] DIR" 4470 #define runsvdir_full_usage "\n\n" \ 4471 "Start a runsv process for each subdirectory. If it exits, restart it.\n" \ 4472 "\n -P Put each runsv in a new session" \ 4473 "\n -s SCRIPT Run SCRIPT <signo> after signal is processed" \ 2926 4474 2927 4475 #define rx_trivial_usage \ 2928 4476 "FILE" 2929 #define rx_full_usage \4477 #define rx_full_usage "\n\n" \ 2930 4478 "Receive a file using the xmodem protocol" 2931 4479 #define rx_example_usage \ 2932 4480 "$ rx /tmp/foo\n" 2933 4481 4482 #define script_trivial_usage \ 4483 "[-afq" IF_SCRIPTREPLAY("t") "] [-c PROG] [OUTFILE]" 4484 #define script_full_usage "\n\n" \ 4485 "Options:" \ 4486 "\n -a Append output" \ 4487 "\n -c PROG Run PROG, not shell" \ 4488 "\n -f Flush output after each write" \ 4489 "\n -q Quiet" \ 4490 IF_SCRIPTREPLAY( \ 4491 "\n -t Send timing to stderr" \ 4492 ) 4493 2934 4494 #define sed_trivial_usage \ 2935 "[-efinr] pattern [files...]" 2936 #define sed_full_usage \ 2937 "Options:\n" \ 2938 " -e script Add the script to the commands to be executed\n" \ 2939 " -f scriptfile Add script-file contents to the\n" \ 2940 " commands to be executed\n" \ 2941 " -i Edit files in-place\n" \ 2942 " -n Suppress automatic printing of pattern space\n" \ 2943 " -r Use extended regular expression syntax\n" \ 2944 "\n" \ 2945 "If no -e or -f is given, the first non-option argument is taken as the sed\n" \ 2946 "script to interpret. All remaining arguments are names of input files; if no\n" \ 2947 "input files are specified, then the standard input is read. Source files\n" \ 2948 "will not be modified unless -i option is given." 4495 "[-efinr] SED_CMD [FILE]..." 4496 #define sed_full_usage "\n\n" \ 4497 "Options:" \ 4498 "\n -e CMD Add CMD to sed commands to be executed" \ 4499 "\n -f FILE Add FILE contents to sed commands to be executed" \ 4500 "\n -i Edit files in-place (else sends result to stdout)" \ 4501 "\n -n Suppress automatic printing of pattern space" \ 4502 "\n -r Use extended regex syntax" \ 4503 "\n" \ 4504 "\nIf no -e or -f, the first non-option argument is the sed command string." \ 4505 "\nRemaining arguments are input files (stdin if none)." 2949 4506 2950 4507 #define sed_example_usage \ … … 2952 4509 "bar\n" 2953 4510 2954 #define selinuxenabled_trivial_usage 2955 #define selinuxenabled_full_usage 4511 #define selinuxenabled_trivial_usage NOUSAGE_STR 4512 #define selinuxenabled_full_usage "" 4513 4514 #define sendmail_trivial_usage \ 4515 "[OPTIONS] [RECIPIENT_EMAIL]..." 4516 #define sendmail_full_usage "\n\n" \ 4517 "Read email from stdin and send it\n" \ 4518 "\nStandard options:" \ 4519 "\n -t Read additional recipients from message body" \ 4520 "\n -f sender Sender (required)" \ 4521 "\n -o options Various options. -oi implied, others are ignored" \ 4522 "\n -i -oi synonym. implied and ignored" \ 4523 "\n" \ 4524 "\nBusybox specific options:" \ 4525 "\n -w seconds Network timeout" \ 4526 "\n -H 'PROG ARGS' Run connection helper" \ 4527 "\n Examples:" \ 4528 "\n -H 'exec openssl s_client -quiet -tls1 -starttls smtp" \ 4529 "\n -connect smtp.gmail.com:25' <email.txt" \ 4530 "\n [4<username_and_passwd.txt | -au<username> -ap<password>]" \ 4531 "\n -H 'exec openssl s_client -quiet -tls1" \ 4532 "\n -connect smtp.gmail.com:465' <email.txt" \ 4533 "\n [4<username_and_passwd.txt | -au<username> -ap<password>]" \ 4534 "\n -S server[:port] Server" \ 4535 "\n -au<username> Username for AUTH LOGIN" \ 4536 "\n -ap<password> Password for AUTH LOGIN" \ 4537 "\n -am<method> Authentication method. Ignored. LOGIN is implied" \ 4538 "\n" \ 4539 "\nOther options are silently ignored; -oi -t is implied" \ 4540 IF_MAKEMIME( \ 4541 "\nUse makemime applet to create message with attachments" \ 4542 ) 2956 4543 2957 4544 #define seq_trivial_usage \ 2958 "[first [increment]] last" 2959 #define seq_full_usage \ 2960 "Print numbers from FIRST to LAST, in steps of INCREMENT.\n" \ 2961 "FIRST, INCREMENT default to 1" \ 2962 "\n\nArguments:\n" \ 2963 " LAST\n" \ 2964 " FIRST LAST\n" \ 2965 " FIRST INCREMENT LAST" 4545 "[-w] [-s SEP] [FIRST [INC]] LAST" 4546 #define seq_full_usage "\n\n" \ 4547 "Print numbers from FIRST to LAST, in steps of INC.\n" \ 4548 "FIRST, INC default to 1.\n" \ 4549 "\nOptions:" \ 4550 "\n -w Pad to last with leading zeros" \ 4551 "\n -s SEP String separator" \ 4552 4553 #define sestatus_trivial_usage \ 4554 "[-vb]" 4555 #define sestatus_full_usage "\n\n" \ 4556 " -v Verbose" \ 4557 "\n -b Display current state of booleans" \ 2966 4558 2967 4559 #define setconsole_trivial_usage \ 2968 "[-r |--reset] [DEVICE]"2969 #define setconsole_full_usage \2970 "Redirect system console output to DEVICE (default: /dev/tty) " \2971 "\n\nOptions:\n" \2972 " -r Reset output to /dev/console"4560 "[-r" IF_FEATURE_SETCONSOLE_LONG_OPTIONS("|--reset") "] [DEVICE]" 4561 #define setconsole_full_usage "\n\n" \ 4562 "Redirect system console output to DEVICE (default: /dev/tty)\n" \ 4563 "\nOptions:" \ 4564 "\n -r Reset output to /dev/console" \ 2973 4565 2974 4566 #define setenforce_trivial_usage \ 2975 4567 "[Enforcing | Permissive | 1 | 0]" 2976 #define setenforce_full_usage 4568 #define setenforce_full_usage "" 2977 4569 2978 4570 #define setfiles_trivial_usage \ 2979 "[-dnpqsvW] [-e dir]... [-o filename] [-r alt_root_path]" \2980 USE_FEATURE_SETFILES_CHECK_OPTION( \4571 "[-dnpqsvW] [-e DIR]... [-o FILE] [-r alt_root_path]" \ 4572 IF_FEATURE_SETFILES_CHECK_OPTION( \ 2981 4573 " [-c policyfile] spec_file" \ 2982 4574 ) \ 2983 4575 " pathname" 2984 2985 #define setfiles_full_usage \ 2986 "Reset file contexts under pathname according to spec_file" \ 2987 USE_FEATURE_SETFILES_CHECK_OPTION( \ 2988 "\n -c file Check the validity of the contexts against the specified binary policy" \ 2989 ) \ 2990 "\n -d Show which specification matched each file" \ 2991 "\n -l Log changes in file labels to syslog" \ 2992 "\n -n Don't change any file labels" \ 2993 "\n -q Suppress warnings" \ 2994 "\n -r dir Use an altenate root path" \ 2995 "\n -e dir Exclude directory" \ 2996 "\n -F Force reset of context to match file_context for customizable files" \ 2997 "\n -o file Save list of files with incorrect context" \ 2998 "\n -s Take a list of files from standard input (instead of command line)" \ 2999 "\n -v Show changes in file labels, if type or role are changing" \ 3000 "\n -vv Show changes in file labels, if type, role, or user are changing" \ 3001 "\n -W Display warnings about entries that had no matching files" 4576 #define setfiles_full_usage "\n\n" \ 4577 "Reset file contexts under pathname according to spec_file\n" \ 4578 IF_FEATURE_SETFILES_CHECK_OPTION( \ 4579 "\n -c FILE Check the validity of the contexts against the specified binary policy" \ 4580 ) \ 4581 "\n -d Show which specification matched each file" \ 4582 "\n -l Log changes in file labels to syslog" \ 4583 "\n -n Don't change any file labels" \ 4584 "\n -q Suppress warnings" \ 4585 "\n -r DIR Use an alternate root path" \ 4586 "\n -e DIR Exclude DIR" \ 4587 "\n -F Force reset of context to match file_context for customizable files" \ 4588 "\n -o FILE Save list of files with incorrect context" \ 4589 "\n -s Take a list of files from stdin (instead of command line)" \ 4590 "\n -v Show changes in file labels, if type or role are changing" \ 4591 "\n -vv Show changes in file labels, if type, role, or user are changing" \ 4592 "\n -W Display warnings about entries that had no matching files" \ 4593 4594 #define setfont_trivial_usage \ 4595 "FONT [-m MAPFILE] [-C TTY]" 4596 #define setfont_full_usage "\n\n" \ 4597 "Load a console font\n" \ 4598 "\nOptions:" \ 4599 "\n -m MAPFILE Load console screen map" \ 4600 "\n -C TTY Affect TTY instead of /dev/tty" \ 4601 4602 #define setfont_example_usage \ 4603 "$ setfont -m koi8-r /etc/i18n/fontname\n" 3002 4604 3003 4605 #define setkeycodes_trivial_usage \ 3004 "SCANCODE KEYCODE 3005 #define setkeycodes_full_usage \4606 "SCANCODE KEYCODE..." 4607 #define setkeycodes_full_usage "\n\n" \ 3006 4608 "Set entries into the kernel's scancode-to-keycode map,\n" \ 3007 4609 "allowing unusual keyboards to generate usable keycodes.\n\n" \ 3008 4610 "SCANCODE may be either xx or e0xx (hexadecimal),\n" \ 3009 "and KEYCODE is given in decimal" 4611 "and KEYCODE is given in decimal." \ 4612 3010 4613 #define setkeycodes_example_usage \ 3011 4614 "$ setkeycodes e030 127\n" … … 3013 4616 #define setlogcons_trivial_usage \ 3014 4617 "N" 3015 #define setlogcons_full_usage \4618 #define setlogcons_full_usage "\n\n" \ 3016 4619 "Redirect the kernel output to console N (0 for current)" 3017 4620 4621 #define setsebool_trivial_usage \ 4622 "boolean value" 4623 4624 #define setsebool_full_usage "\n\n" \ 4625 "Change boolean setting" 4626 3018 4627 #define setsid_trivial_usage \ 3019 "program [arg ...]" 3020 #define setsid_full_usage \ 3021 "Run any program in a new session by calling setsid() before\n" \ 3022 "exec'ing the rest of its arguments. See setsid(2) for details." 3023 3024 #define lash_trivial_usage \ 3025 "[FILE]...\n" \ 3026 "or: sh -c command [args]..." 3027 #define lash_full_usage \ 3028 "The BusyBox LAme SHell (command interpreter)" 3029 #define lash_notes_usage \ 3030 "This command does not yet have proper documentation.\n\n" \ 3031 "Use lash just as you would use any other shell. It properly handles pipes,\n" \ 3032 "redirects, job control, can be used as the shell for scripts, and has a\n" \ 3033 "sufficient set of builtins to do what is needed. It does not (yet) support\n" \ 3034 "Bourne Shell syntax. If you need things like \"if-then-else\", \"while\", and such\n" \ 3035 "use ash or bash. If you just need a very simple and extremely small shell,\n" \ 3036 "this will do the job." 4628 "PROG ARGS" 4629 #define setsid_full_usage "\n\n" \ 4630 "Run PROG in a new session. PROG will have no controlling terminal\n" \ 4631 "and will not be affected by keyboard signals (Ctrl-C etc).\n" \ 4632 "See setsid(2) for details." \ 3037 4633 3038 4634 #define last_trivial_usage \ 3039 "" 3040 #define last_full_usage \ 3041 "Show listing of the last users that logged into the system" 3042 3043 #define sha1sum_trivial_usage \ 3044 "[OPTION] [FILEs...]" \ 3045 USE_FEATURE_MD5_SHA1_SUM_CHECK("\n or: sha1sum [OPTION] -c [FILE]") 3046 #define sha1sum_full_usage \ 3047 "Print" USE_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA1 checksums.\n" \ 3048 "With no FILE, or when FILE is -, read standard input." \ 3049 "\n\nOptions:\n" \ 3050 USE_FEATURE_MD5_SHA1_SUM_CHECK( \ 3051 " -c Check SHA1 sums against given list\n" \ 3052 "\nThe following two options are useful only when verifying checksums:\n" \ 3053 " -s Don't output anything, status code shows success\n" \ 3054 " -w Warn about improperly formatted SHA1 checksum lines") 4635 ""IF_FEATURE_LAST_FANCY("[-HW] [-f FILE]") 4636 #define last_full_usage "\n\n" \ 4637 "Show listing of the last users that logged into the system" \ 4638 IF_FEATURE_LAST_FANCY( "\n" \ 4639 "\nOptions:" \ 4640 /* "\n -H Show header line" */ \ 4641 "\n -W Display with no host column truncation" \ 4642 "\n -f FILE Read from FILE instead of /var/log/wtmp" \ 4643 ) 4644 4645 #define showkey_trivial_usage \ 4646 "[-a | -k | -s]" 4647 #define showkey_full_usage "\n\n" \ 4648 "Show keys pressed\n" \ 4649 "\nOptions:" \ 4650 "\n -a Display decimal/octal/hex values of the keys" \ 4651 "\n -k Display interpreted keycodes (default)" \ 4652 "\n -s Display raw scan-codes" \ 3055 4653 3056 4654 #define slattach_trivial_usage \ 3057 "[-cehmLF] [-s speed] [-p protocol] DEVICEs"3058 #define slattach_full_usage \4655 "[-cehmLF] [-s SPEED] [-p PROTOCOL] DEVICE" 4656 #define slattach_full_usage "\n\n" \ 3059 4657 "Attach network interface(s) to serial line(s)\n" \ 3060 4658 "\nOptions:" \ 3061 "\n -p Set protocol (slip, cslip, slip6, clisp6 or adaptive)" \3062 "\n -s Set line speed" \4659 "\n -p PROT Set protocol (slip, cslip, slip6, clisp6 or adaptive)" \ 4660 "\n -s SPD Set line speed" \ 3063 4661 "\n -e Exit after initializing device" \ 3064 4662 "\n -h Exit when the carrier is lost" \ 3065 "\n -c Execute a commandwhen the line is hung up" \4663 "\n -c PROG Run PROG when the line is hung up" \ 3066 4664 "\n -m Do NOT initialize the line in raw 8 bits mode" \ 3067 4665 "\n -L Enable 3-wire operation" \ … … 3069 4667 3070 4668 #define sleep_trivial_usage \ 3071 USE_FEATURE_FANCY_SLEEP("[") "N" USE_FEATURE_FANCY_SLEEP("]...")3072 #define sleep_full_usage \3073 SKIP_FEATURE_FANCY_SLEEP("Pause for N seconds") \3074 USE_FEATURE_FANCY_SLEEP( \4669 IF_FEATURE_FANCY_SLEEP("[") "N" IF_FEATURE_FANCY_SLEEP("]...") 4670 #define sleep_full_usage "\n\n" \ 4671 IF_NOT_FEATURE_FANCY_SLEEP("Pause for N seconds") \ 4672 IF_FEATURE_FANCY_SLEEP( \ 3075 4673 "Pause for a time equal to the total of the args given, where each arg can\n" \ 3076 4674 "have an optional suffix of (s)econds, (m)inutes, (h)ours, or (d)ays") … … 3078 4676 "$ sleep 2\n" \ 3079 4677 "[2 second delay results]\n" \ 3080 USE_FEATURE_FANCY_SLEEP( \4678 IF_FEATURE_FANCY_SLEEP( \ 3081 4679 "$ sleep 1d 3h 22m 8s\n" \ 3082 4680 "[98528 second delay results]\n") … … 3084 4682 #define sort_trivial_usage \ 3085 4683 "[-nru" \ 3086 USE_FEATURE_SORT_BIG("gMcszbdfimSTokt] [-o outfile] [-k start[.offset][opts][,end[.offset][opts]] [-t char") \4684 IF_FEATURE_SORT_BIG("gMcszbdfimSTokt] [-o FILE] [-k start[.offset][opts][,end[.offset][opts]] [-t CHAR") \ 3087 4685 "] [FILE]..." 3088 #define sort_full_usage \ 3089 "Sort lines of text in the specified files" \ 3090 "\n\nOptions:\n" \ 3091 USE_FEATURE_SORT_BIG( \ 3092 " -b Ignore leading blanks\n" \ 3093 " -c Check whether input is sorted\n" \ 3094 " -d Dictionary order (blank or alphanumeric only)\n" \ 3095 " -f Ignore case\n" \ 3096 " -g General numerical sort\n" \ 3097 " -i Ignore unprintable characters\n" \ 3098 " -k Specify sort key\n" \ 3099 " -M Sort month\n") \ 3100 " -n Sort numbers\n" \ 3101 USE_FEATURE_SORT_BIG( \ 3102 " -o Output to file\n" \ 3103 " -k Sort by key\n" \ 3104 " -t Use key separator other than whitespace\n") \ 3105 " -r Reverse sort order\n" \ 3106 USE_FEATURE_SORT_BIG( \ 3107 " -s Stable (don't sort ties alphabetically)\n") \ 3108 " -u Suppress duplicate lines" \ 3109 USE_FEATURE_SORT_BIG( \ 3110 "\n -z Input terminated by nulls, not newlines\n") \ 3111 USE_FEATURE_SORT_BIG( \ 3112 " -mST Ignored for GNU compatibility") \ 3113 "" 4686 #define sort_full_usage "\n\n" \ 4687 "Sort lines of text\n" \ 4688 "\nOptions:" \ 4689 IF_FEATURE_SORT_BIG( \ 4690 "\n -b Ignore leading blanks" \ 4691 "\n -c Check whether input is sorted" \ 4692 "\n -d Dictionary order (blank or alphanumeric only)" \ 4693 "\n -f Ignore case" \ 4694 "\n -g General numerical sort" \ 4695 "\n -i Ignore unprintable characters" \ 4696 "\n -k Sort key" \ 4697 "\n -M Sort month" \ 4698 ) \ 4699 "\n -n Sort numbers" \ 4700 IF_FEATURE_SORT_BIG( \ 4701 "\n -o Output to file" \ 4702 "\n -k Sort by key" \ 4703 "\n -t CHAR Key separator" \ 4704 ) \ 4705 "\n -r Reverse sort order" \ 4706 IF_FEATURE_SORT_BIG( \ 4707 "\n -s Stable (don't sort ties alphabetically)" \ 4708 ) \ 4709 "\n -u Suppress duplicate lines" \ 4710 IF_FEATURE_SORT_BIG( \ 4711 "\n -z Lines are terminated by NUL, not newline" \ 4712 "\n -mST Ignored for GNU compatibility") \ 4713 3114 4714 #define sort_example_usage \ 3115 4715 "$ echo -e \"e\\nf\\nb\\nd\\nc\\na\" | sort\n" \ … … 3120 4720 "e\n" \ 3121 4721 "f\n" \ 3122 USE_FEATURE_SORT_BIG( \4722 IF_FEATURE_SORT_BIG( \ 3123 4723 "$ echo -e \"c 3\\nb 2\\nd 2\" | $SORT -k 2,2n -k 1,1r\n" \ 3124 4724 "d 2\n" \ … … 3129 4729 3130 4730 #define split_trivial_usage \ 3131 "[OPTION ] [INPUT [PREFIX]]"3132 #define split_full_usage \4731 "[OPTIONS] [INPUT [PREFIX]]" 4732 #define split_full_usage "\n\n" \ 3133 4733 "Options:" \ 3134 "\n -b n[k|m] Split by bytes" \ 3135 "\n -l n Split by lines" \ 3136 "\n -a n Use n letters as suffix" 4734 "\n -b N[k|m] Split by N (kilo|mega)bytes" \ 4735 "\n -l N Split by N lines" \ 4736 "\n -a N Use N letters as suffix" \ 4737 3137 4738 #define split_example_usage \ 3138 4739 "$ split TODO foo\n" \ … … 3140 4741 3141 4742 #define start_stop_daemon_trivial_usage \ 3142 "[OPTIONS] [--start|--stop] ... [-- arguments...]" 3143 #define start_stop_daemon_full_usage \ 3144 "Start and stop services" \ 3145 "\n\nOptions:" \ 3146 "\n -S|--start Start" \ 3147 "\n -K|--stop Stop" \ 3148 "\n -a|--startas pathname Starts process specified by pathname" \ 3149 "\n -b|--background Force process into background" \ 3150 "\n -u|--user username|uid Stop this user's processes" \ 3151 "\n -x|--exec executable Program to either start or check" \ 3152 "\n -m|--make-pidfile Create the -p file and enter pid in it" \ 3153 "\n -n|--name process-name Stop processes with this name" \ 3154 "\n -p|--pidfile pid-file Save or load pid using a pid-file" \ 3155 "\n -q|--quiet Quiet" \ 3156 USE_FEATURE_START_STOP_DAEMON_FANCY( \ 3157 "\n -o|--oknodo Exit status 0 if nothing done" \ 3158 "\n -v|--verbose Verbose" \ 3159 "\n -N|--nicelevel N Add N to process's nice level" \ 3160 ) \ 3161 "\n -s|--signal signal Signal to send (default TERM)" \ 3162 "\n -c|--chuid user[:[group]] Change to specified user/group" 4743 "[OPTIONS] [-S|-K] ... [-- ARGS...]" 4744 #define start_stop_daemon_full_usage "\n\n" \ 4745 "Search for matching processes, and then\n" \ 4746 "-K: stop all matching processes.\n" \ 4747 "-S: start a process unless a matching process is found.\n" \ 4748 IF_FEATURE_START_STOP_DAEMON_LONG_OPTIONS( \ 4749 "\nProcess matching:" \ 4750 "\n -u,--user USERNAME|UID Match only this user's processes" \ 4751 "\n -n,--name NAME Match processes with NAME" \ 4752 "\n in comm field in /proc/PID/stat" \ 4753 "\n -x,--exec EXECUTABLE Match processes with this command" \ 4754 "\n in /proc/PID/cmdline" \ 4755 "\n -p,--pidfile FILE Match a process with PID from the file" \ 4756 "\n All specified conditions must match" \ 4757 "\n-S only:" \ 4758 "\n -x,--exec EXECUTABLE Program to run" \ 4759 "\n -a,--startas NAME Zeroth argument" \ 4760 "\n -b,--background Background" \ 4761 IF_FEATURE_START_STOP_DAEMON_FANCY( \ 4762 "\n -N,--nicelevel N Change nice level" \ 4763 ) \ 4764 "\n -c,--chuid USER[:[GRP]] Change to user/group" \ 4765 "\n -m,--make-pidfile Write PID to the pidfile specified by -p" \ 4766 "\n-K only:" \ 4767 "\n -s,--signal SIG Signal to send" \ 4768 "\n -t,--test Match only, exit with 0 if a process is found" \ 4769 "\nOther:" \ 4770 IF_FEATURE_START_STOP_DAEMON_FANCY( \ 4771 "\n -o,--oknodo Exit with status 0 if nothing is done" \ 4772 "\n -v,--verbose Verbose" \ 4773 ) \ 4774 "\n -q,--quiet Quiet" \ 4775 ) \ 4776 IF_NOT_FEATURE_START_STOP_DAEMON_LONG_OPTIONS( \ 4777 "\nProcess matching:" \ 4778 "\n -u USERNAME|UID Match only this user's processes" \ 4779 "\n -n NAME Match processes with NAME" \ 4780 "\n in comm field in /proc/PID/stat" \ 4781 "\n -x EXECUTABLE Match processes with this command" \ 4782 "\n command in /proc/PID/cmdline" \ 4783 "\n -p FILE Match a process with PID from the file" \ 4784 "\n All specified conditions must match" \ 4785 "\n-S only:" \ 4786 "\n -x EXECUTABLE Program to run" \ 4787 "\n -a NAME Zeroth argument" \ 4788 "\n -b Background" \ 4789 IF_FEATURE_START_STOP_DAEMON_FANCY( \ 4790 "\n -N N Change nice level" \ 4791 ) \ 4792 "\n -c USER[:[GRP]] Change to user/group" \ 4793 "\n -m Write PID to the pidfile specified by -p" \ 4794 "\n-K only:" \ 4795 "\n -s SIG Signal to send" \ 4796 "\n -t Match only, exit with 0 if a process is found" \ 4797 "\nOther:" \ 4798 IF_FEATURE_START_STOP_DAEMON_FANCY( \ 4799 "\n -o Exit with status 0 if nothing is done" \ 4800 "\n -v Verbose" \ 4801 ) \ 4802 "\n -q Quiet" \ 4803 ) \ 3163 4804 3164 4805 #define stat_trivial_usage \ 3165 "[OPTION] FILE..." 3166 #define stat_full_usage \ 3167 "Display file (default) or filesystem status" \ 3168 "\n\nOptions:\n" \ 3169 USE_FEATURE_STAT_FORMAT( \ 3170 " -c fmt Use the specified format\n") \ 3171 " -f Display filesystem status\n" \ 3172 " -L,-l Dereference links\n" \ 3173 " -t Display info in terse form" \ 3174 USE_SELINUX( \ 3175 "\n -Z Print security context" \ 3176 ) \ 3177 USE_FEATURE_STAT_FORMAT( \ 4806 "[OPTIONS] FILE..." 4807 #define stat_full_usage "\n\n" \ 4808 "Display file (default) or filesystem status\n" \ 4809 "\nOptions:" \ 4810 IF_FEATURE_STAT_FORMAT( \ 4811 "\n -c fmt Use the specified format" \ 4812 ) \ 4813 "\n -f Display filesystem status" \ 4814 "\n -L Follow links" \ 4815 "\n -t Display info in terse form" \ 4816 IF_SELINUX( \ 4817 "\n -Z Print security context" \ 4818 ) \ 4819 IF_FEATURE_STAT_FORMAT( \ 3178 4820 "\n\nValid format sequences for files:\n" \ 3179 4821 " %a Access rights in octal\n" \ … … 3190 4832 " %i Inode number\n" \ 3191 4833 " %n File name\n" \ 3192 " %N Quoted file name with dereferenceif symlink\n" \4834 " %N File name, with -> TARGET if symlink\n" \ 3193 4835 " %o I/O block size\n" \ 3194 4836 " %s Total size, in bytes\n" \ … … 3209 4851 " %d Free file nodes in file system\n" \ 3210 4852 " %f Free blocks in file system\n" \ 3211 USE_SELINUX( \3212 " %C Security context in SELinux\n" \4853 IF_SELINUX( \ 4854 " %C Security context in selinux\n" \ 3213 4855 ) \ 3214 4856 " %i File System ID in hex\n" \ … … 3219 4861 " %t Type in hex\n" \ 3220 4862 " %T Type in human readable form" \ 3221 ) 4863 ) \ 3222 4864 3223 4865 #define strings_trivial_usage \ 3224 "[-afo] [-n length] [file ...]"3225 #define strings_full_usage \3226 "Display printable strings in a binary file " \3227 "\n\nOptions:" \3228 "\n -a Scan the whole files (this is thedefault)" \3229 "\n -f Precede each string with the name of the file where it was found" \3230 "\n -n N Specifies that at least N characters forms a sequence(default 4)" \3231 "\n -o Each string is preceded by its decimal offset in the file"4866 "[-afo] [-n LEN] [FILE]..." 4867 #define strings_full_usage "\n\n" \ 4868 "Display printable strings in a binary file\n" \ 4869 "\nOptions:" \ 4870 "\n -a Scan whole file (default)" \ 4871 "\n -f Precede strings with filenames" \ 4872 "\n -n LEN At least LEN characters form a string (default 4)" \ 4873 "\n -o Precede strings with decimal offsets" \ 3232 4874 3233 4875 #define stty_trivial_usage \ 3234 4876 "[-a|g] [-F DEVICE] [SETTING]..." 3235 #define stty_full_usage \4877 #define stty_full_usage "\n\n" \ 3236 4878 "Without arguments, prints baud rate, line discipline,\n" \ 3237 "and deviations from stty sane " \3238 "\n\nOptions:" \3239 3240 3241 3242 "\n [SETTING] See manpage"4879 "and deviations from stty sane\n" \ 4880 "\nOptions:" \ 4881 "\n -F DEVICE Open device instead of stdin" \ 4882 "\n -a Print all current settings in human-readable form" \ 4883 "\n -g Print in stty-readable form" \ 4884 "\n [SETTING] See manpage" \ 3243 4885 3244 4886 #define su_trivial_usage \ 3245 "[OPTION ]... [-] [username]"3246 #define su_full_usage \3247 "Change user id or become root " \3248 "\n\nOptions:" \3249 "\n -p,-m Preserve environment" \3250 "\n -cCommand to pass to 'sh -c'" \3251 "\n -s Shell to use instead of default shell"4887 "[OPTIONS] [-] [USERNAME]" 4888 #define su_full_usage "\n\n" \ 4889 "Change user id or become root\n" \ 4890 "\nOptions:" \ 4891 "\n -p,-m Preserve environment" \ 4892 "\n -c CMD Command to pass to 'sh -c'" \ 4893 "\n -s SH Shell to use instead of default shell" \ 3252 4894 3253 4895 #define sulogin_trivial_usage \ 3254 "[ OPTION]... [tty-device]"3255 #define sulogin_full_usage \3256 "Single user login " \3257 "\n\nOptions:" \3258 "\n -t Timeout"4896 "[-t N] [TTY]" 4897 #define sulogin_full_usage "\n\n" \ 4898 "Single user login\n" \ 4899 "\nOptions:" \ 4900 "\n -t N Timeout" \ 3259 4901 3260 4902 #define sum_trivial_usage \ 3261 "[ rs] [files...]"3262 #define sum_full_usage \3263 "Checksum and count the blocks in a file " \3264 "\n\nOptions:\n" \3265 " -r Use BSD sum algorithm (1K blocks)\n" \3266 " -s Use System V sum algorithm (512byte blocks)"4903 "[-rs] [FILE]..." 4904 #define sum_full_usage "\n\n" \ 4905 "Checksum and count the blocks in a file\n" \ 4906 "\nOptions:" \ 4907 "\n -r Use BSD sum algorithm (1K blocks)" \ 4908 "\n -s Use System V sum algorithm (512byte blocks)" \ 3267 4909 3268 4910 #define sv_trivial_usage \ 3269 "[-v] [-w sec] command service..."3270 #define sv_full_usage \4911 "[-v] [-w SEC] CMD SERVICE_DIR..." 4912 #define sv_full_usage "\n\n" \ 3271 4913 "Control services monitored by runsv supervisor.\n" \ 3272 4914 "Commands (only first character is enough):\n" \ … … 3276 4918 "once: like 'up', but if service stops, don't restart it\n" \ 3277 4919 "down: send TERM and CONT signals. If ./run exits, start ./finish\n" \ 3278 " if it exists. After it stops, do not restart service\n" \4920 " if it exists. After it stops, don't restart service\n" \ 3279 4921 "exit: send TERM and CONT signals to service and log service. If they exit,\n" \ 3280 " 4922 " runsv exits too\n" \ 3281 4923 "pause, cont, hup, alarm, interrupt, quit, 1, 2, term, kill: send\n" \ 3282 "STOP, CONT, HUP, ALRM, INT, QUIT, USR1, USR2, TERM, KILL signal to service" 4924 "STOP, CONT, HUP, ALRM, INT, QUIT, USR1, USR2, TERM, KILL signal to service" \ 3283 4925 3284 4926 #define svlogd_trivial_usage \ 3285 "[-ttv] [-r c] [-R abc] [-l len] [-b buflen] dir..."3286 #define svlogd_full_usage \3287 "Continuously read log data from st andard input, optionally" \3288 "filter log messages, and write the data to one or more automatically 3289 "rotated logs" 4927 "[-ttv] [-r C] [-R CHARS] [-l MATCHLEN] [-b BUFLEN] DIR..." 4928 #define svlogd_full_usage "\n\n" \ 4929 "Continuously read log data from stdin, optionally\n" \ 4930 "filter log messages, and write the data to one or more automatically\n" \ 4931 "rotated logs" \ 3290 4932 3291 4933 #define swapoff_trivial_usage \ 3292 4934 "[-a] [DEVICE]" 3293 #define swapoff_full_usage \3294 "Stop swapping virtual memory pages on DEVICE" \3295 "\n\nOptions:\n" \3296 " -a Stop swapping on all swap devices"4935 #define swapoff_full_usage "\n\n" \ 4936 "Stop swapping on DEVICE\n" \ 4937 "\nOptions:" \ 4938 "\n -a Stop swapping on all swap devices" \ 3297 4939 3298 4940 #define swapon_trivial_usage \ 3299 "[-a] [DEVICE]" 3300 #define swapon_full_usage \ 3301 "Start swapping virtual memory pages on DEVICE" \ 3302 "\n\nOptions:\n" \ 3303 " -a Start swapping on all swap devices" 4941 "[-a]" IF_FEATURE_SWAPON_PRI(" [-p PRI]") " [DEVICE]" 4942 #define swapon_full_usage "\n\n" \ 4943 "Start swapping on DEVICE\n" \ 4944 "\nOptions:" \ 4945 "\n -a Start swapping on all swap devices" \ 4946 IF_FEATURE_SWAPON_PRI( \ 4947 "\n -p PRI Set swap device priority" \ 4948 ) \ 3304 4949 3305 4950 #define switch_root_trivial_usage \ 3306 "[-c /dev/console] NEW_ROOT NEW_INIT [ARGUMENTS_TO_INIT]" 3307 #define switch_root_full_usage \ 3308 "Use from PID 1 under initramfs to free initramfs, chroot to NEW_ROOT,\n" \ 3309 "and exec NEW_INIT" \ 3310 "\n\nOptions:\n" \ 3311 " -c Redirect console to device on new root" 4951 "[-c /dev/console] NEW_ROOT NEW_INIT [ARGS]" 4952 #define switch_root_full_usage "\n\n" \ 4953 "Free initramfs and switch to another root fs:\n" \ 4954 "chroot to NEW_ROOT, delete all in /, move NEW_ROOT to /,\n" \ 4955 "execute NEW_INIT. PID must be 1. NEW_ROOT must be a mountpoint.\n" \ 4956 "\nOptions:" \ 4957 "\n -c DEV Reopen stdio to DEV after switch" \ 3312 4958 3313 4959 #define sync_trivial_usage \ 3314 4960 "" 3315 #define sync_full_usage \ 3316 "Write all buffered filesystem blocks to disk" 4961 #define sync_full_usage "\n\n" \ 4962 "Write all buffered blocks to disk" 4963 4964 #define fsync_trivial_usage \ 4965 "[-d] FILE..." 4966 #define fsync_full_usage "\n\n" \ 4967 "Write files' buffered blocks to disk\n" \ 4968 "\nOptions:" \ 4969 "\n -d Avoid syncing metadata" 3317 4970 3318 4971 #define sysctl_trivial_usage \ 3319 "[OPTIONS]... [VALUE]..." 3320 #define sysctl_full_usage \ 3321 "Configure kernel parameters at runtime" \ 3322 "\n\nOptions:\n" \ 3323 " -n Use this option to disable printing of the key name when printing values\n" \ 3324 " -w Use this option when you want to change a sysctl setting\n" \ 3325 " -p Load in sysctl settings from the file specified or /etc/sysctl.conf if none given\n" \ 3326 " -a Display all values currently available\n" \ 3327 " -A Display all values currently available in table form" 4972 "[OPTIONS] [VALUE]..." 4973 #define sysctl_full_usage "\n\n" \ 4974 "Configure kernel parameters at runtime\n" \ 4975 "\nOptions:" \ 4976 "\n -n Don't print key names" \ 4977 "\n -e Don't warn about unknown keys" \ 4978 "\n -w Change sysctl setting" \ 4979 "\n -p FILE Load sysctl settings from FILE (default /etc/sysctl.conf)" \ 4980 "\n -a Display all values" \ 4981 "\n -A Display all values in table form" \ 4982 3328 4983 #define sysctl_example_usage \ 3329 "sysctl [-n] variable...\n" \3330 "sysctl [-n] -w variable=value...\n" \3331 "sysctl [-n] -a\n" \3332 "sysctl [-n] -p file (default /etc/sysctl.conf)\n" \3333 "sysctl [-n] -A\n"4984 "sysctl [-n] [-e] variable...\n" \ 4985 "sysctl [-n] [-e] -w variable=value...\n" \ 4986 "sysctl [-n] [-e] -a\n" \ 4987 "sysctl [-n] [-e] -p file (default /etc/sysctl.conf)\n" \ 4988 "sysctl [-n] [-e] -A\n" 3334 4989 3335 4990 #define syslogd_trivial_usage \ 3336 "[OPTION ]..."3337 #define syslogd_full_usage \4991 "[OPTIONS]" 4992 #define syslogd_full_usage "\n\n" \ 3338 4993 "System logging utility.\n" \ 3339 "Note that this version of syslogd ignores /etc/syslog.conf." \ 3340 "\n\nOptions:" \ 3341 "\n -n Run as foreground process" \ 3342 "\n -O FILE Log to given file (default=/var/log/messages)" \ 3343 "\n -l n Set local log level" \ 3344 "\n -S Smaller logging output" \ 3345 USE_FEATURE_ROTATE_LOGFILE( \ 3346 "\n -s SIZE Max size (KB) before rotate (default=200KB, 0=off)" \ 3347 "\n -b NUM Number of rotated logs to keep (default=1, max=99, 0=purge)") \ 3348 USE_FEATURE_REMOTE_LOG( \ 3349 "\n -R HOST[:PORT] Log to IP or hostname on PORT (default PORT=514/UDP)" \ 3350 "\n -L Log locally and via network (default is network only if -R)") \ 3351 USE_FEATURE_IPC_SYSLOG( \ 3352 "\n -C[size(KiB)] Log to shared mem buffer (read it using logread)") 4994 "This version of syslogd ignores /etc/syslog.conf\n" \ 4995 "\nOptions:" \ 4996 "\n -n Run in foreground" \ 4997 "\n -O FILE Log to given file (default:/var/log/messages)" \ 4998 "\n -l N Set local log level" \ 4999 "\n -S Smaller logging output" \ 5000 IF_FEATURE_ROTATE_LOGFILE( \ 5001 "\n -s SIZE Max size (KB) before rotate (default:200KB, 0=off)" \ 5002 "\n -b N N rotated logs to keep (default:1, max=99, 0=purge)") \ 5003 IF_FEATURE_REMOTE_LOG( \ 5004 "\n -R HOST[:PORT] Log to IP or hostname on PORT (default PORT=514/UDP)" \ 5005 "\n -L Log locally and via network (default is network only if -R)") \ 5006 IF_FEATURE_SYSLOGD_DUP( \ 5007 "\n -D Drop duplicates") \ 5008 IF_FEATURE_IPC_SYSLOG( \ 5009 "\n -C[size(KiB)] Log to shared mem buffer (read it using logread)") \ 3353 5010 /* NB: -Csize shouldn't have space (because size is optional) */ 3354 /* "\n -m MIN Minutes between MARK lines (default=20, 0=off)" */ 5011 /* "\n -m MIN Minutes between MARK lines (default:20, 0=off)" */ 5012 3355 5013 #define syslogd_example_usage \ 3356 5014 "$ syslogd -R masterlog:514\n" \ 3357 5015 "$ syslogd -R 192.168.1.1:601\n" 3358 5016 3359 #define tail_trivial_usage \ 3360 "[OPTION]... [FILE]..." 3361 #define tail_full_usage \ 3362 "Print last 10 lines of each FILE to standard output.\n" \ 3363 "With more than one FILE, precede each with a header giving the\n" \ 3364 "file name. With no FILE, or when FILE is -, read standard input." \ 3365 "\n\nOptions:" \ 3366 USE_FEATURE_FANCY_TAIL( \ 3367 "\n -c N[kbm] Output the last N bytes") \ 3368 "\n -n N[kbm] Print last N lines instead of last 10" \ 3369 "\n -f Output data as the file grows" \ 3370 USE_FEATURE_FANCY_TAIL( \ 3371 "\n -q Never output headers giving file names" \ 3372 "\n -s SEC Wait SEC seconds between reads with -f" \ 3373 "\n -v Always output headers giving file names" \ 3374 "\n\n" \ 3375 "If the first character of N (bytes or lines) is a '+', output begins with\n" \ 3376 "the Nth item from the start of each file, otherwise, print the last N items\n" \ 3377 "in the file. N bytes may be suffixed by k (x1024), b (x512), or m (1024^2)." ) 3378 #define tail_example_usage \ 3379 "$ tail -n 1 /etc/resolv.conf\n" \ 3380 "nameserver 10.0.0.1\n" 3381 3382 #define tar_trivial_usage \ 3383 "-[" USE_FEATURE_TAR_CREATE("c") USE_FEATURE_TAR_GZIP("z") \ 3384 USE_FEATURE_TAR_BZIP2("j") USE_FEATURE_TAR_LZMA("a") \ 3385 USE_FEATURE_TAR_COMPRESS("Z") "xtvO] " \ 3386 USE_FEATURE_TAR_FROM("[-X FILE] ") \ 3387 "[-f TARFILE] [-C DIR] [FILE(s)] ..." 3388 #define tar_full_usage \ 3389 "Create, extract, or list files from a tar file" \ 3390 "\n\nOptions:\n" \ 3391 USE_FEATURE_TAR_CREATE( \ 3392 " c Create\n") \ 3393 " x Extract\n" \ 3394 " t List\n" \ 3395 "\nArchive format selection:\n" \ 3396 USE_FEATURE_TAR_GZIP( \ 3397 " z Filter the archive through gzip\n") \ 3398 USE_FEATURE_TAR_BZIP2( \ 3399 " j Filter the archive through bzip2\n") \ 3400 USE_FEATURE_TAR_LZMA( \ 3401 " a Filter the archive through lzma\n") \ 3402 USE_FEATURE_TAR_COMPRESS( \ 3403 " Z Filter the archive through compress\n") \ 3404 "\nFile selection:\n" \ 3405 " f Name of TARFILE or \"-\" for stdin\n" \ 3406 " O Extract to stdout\n" \ 3407 USE_FEATURE_TAR_FROM( \ 3408 " exclude File to exclude\n" \ 3409 " X File with names to exclude\n") \ 3410 " C Change to directory DIR before operation\n" \ 3411 " v Verbose" 3412 #define tar_example_usage \ 3413 "$ zcat /tmp/tarball.tar.gz | tar -xf -\n" \ 3414 "$ tar -cf /tmp/tarball.tar /usr/local\n" 5017 #define tac_trivial_usage \ 5018 "[FILE]..." 5019 #define tac_full_usage "\n\n" \ 5020 "Concatenate FILEs and print them in reverse" 3415 5021 3416 5022 #define taskset_trivial_usage \ 3417 "[OPTIONS] [mask] [pid | command [arg]...]" 3418 #define taskset_full_usage \ 3419 "Set or get CPU affinity" \ 3420 "\n\nOptions:\n" \ 3421 " -p Operate on an existing PID" 5023 "[-p] [MASK] [PID | PROG ARGS]" 5024 #define taskset_full_usage "\n\n" \ 5025 "Set or get CPU affinity\n" \ 5026 "\nOptions:" \ 5027 "\n -p Operate on an existing PID" \ 5028 3422 5029 #define taskset_example_usage \ 3423 5030 "$ taskset 0x7 ./dgemm_test&\n" \ … … 3432 5039 3433 5040 #define tee_trivial_usage \ 3434 "[OPTION]... [FILE]..." 3435 #define tee_full_usage \ 3436 "Copy standard input to each FILE, and also to standard output" \ 3437 "\n\nOptions:\n" \ 3438 " -a Append to the given FILEs, do not overwrite\n" \ 3439 " -i Ignore interrupt signals (SIGINT)" 5041 "[-ai] [FILE]..." 5042 #define tee_full_usage "\n\n" \ 5043 "Copy stdin to each FILE, and also to stdout\n" \ 5044 "\nOptions:" \ 5045 "\n -a Append to the given FILEs, don't overwrite" \ 5046 "\n -i Ignore interrupt signals (SIGINT)" \ 5047 3440 5048 #define tee_example_usage \ 3441 5049 "$ echo \"Hello\" | tee /tmp/foo\n" \ … … 3446 5054 #define telnet_trivial_usage \ 3447 5055 "[-a] [-l USER] HOST [PORT]" 3448 #define telnet_full_usage \ 3449 "Connect to remote telnet server" \ 3450 "\n\nOptions:\n" \ 3451 " -a Attempt an automatic login with the USER variable\n" \ 3452 " -l USER Attempt an automatic login with the USER argument\n" \ 3453 " HOST The official name, alias or the IP address of the\n" \ 3454 " remote host\n" \ 3455 " PORT The remote port number to connect to. If it is not\n" \ 3456 " specified, the default telnet (23) port is used." 5056 #define telnet_full_usage "\n\n" \ 5057 "Connect to telnet server\n" \ 5058 "\nOptions:" \ 5059 "\n -a Automatic login with $USER variable" \ 5060 "\n -l USER Automatic login as USER" \ 5061 3457 5062 #else 3458 5063 #define telnet_trivial_usage \ 3459 5064 "HOST [PORT]" 3460 #define telnet_full_usage \3461 "Connect to remotetelnet server"5065 #define telnet_full_usage "\n\n" \ 5066 "Connect to telnet server" 3462 5067 #endif 3463 5068 3464 5069 #define telnetd_trivial_usage \ 3465 "[OPTION ]"3466 #define telnetd_full_usage \5070 "[OPTIONS]" 5071 #define telnetd_full_usage "\n\n" \ 3467 5072 "Handle incoming telnet connections" \ 3468 SKIP_FEATURE_TELNETD_STANDALONE(" via inetd") \ 3469 "\n\nOptions:" \ 3470 "\n -l LOGIN Exec LOGIN on connect" \ 3471 "\n -f issue_file Display issue_file instead of /etc/issue" \ 3472 USE_FEATURE_TELNETD_STANDALONE( \ 3473 "\n -p PORT Port to listen to" \ 3474 "\n -b ADDR Address to bind to" \ 3475 "\n -F Stay in foreground" \ 3476 "\n -i Run as inetd subservice" \ 5073 IF_NOT_FEATURE_TELNETD_STANDALONE(" via inetd") "\n" \ 5074 "\nOptions:" \ 5075 "\n -l LOGIN Exec LOGIN on connect" \ 5076 "\n -f ISSUE_FILE Display ISSUE_FILE instead of /etc/issue" \ 5077 "\n -K Close connection as soon as login exits" \ 5078 "\n (normally wait until all programs close slave pty)" \ 5079 IF_FEATURE_TELNETD_STANDALONE( \ 5080 "\n -p PORT Port to listen on" \ 5081 "\n -b ADDR[:PORT] Address to bind to" \ 5082 "\n -F Run in foreground" \ 5083 "\n -i Inetd mode" \ 5084 IF_FEATURE_TELNETD_INETD_WAIT( \ 5085 "\n -w SEC Inetd 'wait' mode, linger time SEC" \ 5086 "\n -S Log to syslog (implied by -i or without -F and -w)" \ 5087 ) \ 3477 5088 ) 3478 5089 5090 /* "test --help" does not print help (POSIX compat), only "[ --help" does. 5091 * We display "<applet> EXPRESSION ]" here (not "<applet> EXPRESSION") 5092 * Unfortunately, it screws up generated BusyBox.html. TODO. */ 3479 5093 #define test_trivial_usage \ 3480 "EXPRESSION \n or [ EXPRESSION]"3481 #define test_full_usage \3482 "Check file types and compares values returning anexit code\n" \3483 "de termined by thevalue of EXPRESSION"5094 "EXPRESSION ]" 5095 #define test_full_usage "\n\n" \ 5096 "Check file types, compare values etc. Return a 0/1 exit code\n" \ 5097 "depending on logical value of EXPRESSION" 3484 5098 #define test_example_usage \ 3485 5099 "$ test 1 -eq 2\n" \ … … 3496 5110 "1\n" 3497 5111 5112 #define tc_trivial_usage \ 5113 /*"[OPTIONS] "*/"OBJECT CMD [dev STRING]" 5114 #define tc_full_usage "\n\n" \ 5115 "OBJECT: {qdisc|class|filter}\n" \ 5116 "CMD: {add|del|change|replace|show}\n" \ 5117 "\n" \ 5118 "qdisc [ handle QHANDLE ] [ root |"IF_FEATURE_TC_INGRESS(" ingress |")" parent CLASSID ]\n" \ 5119 /* "[ estimator INTERVAL TIME_CONSTANT ]\n" */ \ 5120 " [ [ QDISC_KIND ] [ help | OPTIONS ] ]\n" \ 5121 " QDISC_KIND := { [p|b]fifo | tbf | prio | cbq | red | etc. }\n" \ 5122 "qdisc show [ dev STRING ]"IF_FEATURE_TC_INGRESS(" [ingress]")"\n" \ 5123 "class [ classid CLASSID ] [ root | parent CLASSID ]\n" \ 5124 " [ [ QDISC_KIND ] [ help | OPTIONS ] ]\n" \ 5125 "class show [ dev STRING ] [ root | parent CLASSID ]\n" \ 5126 "filter [ pref PRIO ] [ protocol PROTO ]\n" \ 5127 /* "\t[ estimator INTERVAL TIME_CONSTANT ]\n" */ \ 5128 " [ root | classid CLASSID ] [ handle FILTERID ]\n" \ 5129 " [ [ FILTER_TYPE ] [ help | OPTIONS ] ]\n" \ 5130 "filter show [ dev STRING ] [ root | parent CLASSID ]" 5131 3498 5132 #define tcpsvd_trivial_usage \ 3499 "[-hEv] [-c n] [-C n:msg] [-b n] [-u user] [-l name] ip port prog..."5133 "[-hEv] [-c N] [-C N[:MSG]] [-b N] [-u USER] [-l NAME] IP PORT PROG" 3500 5134 /* with not-implemented options: */ 3501 /* "[-hpEvv] [-c n] [-C n:msg] [-b n] [-u user] [-l name] [-i dir|-x cdb] [-t sec] ip port prog..." */ 3502 #define tcpsvd_full_usage \ 3503 "Creates TCP socket, binds it to ip:port and listens on it\n" \ 3504 "for incoming connections. For each connection it runs prog." \ 3505 "\n" \ 3506 "\nip IP to listen on. '0' = all" \ 3507 "\nport Port to listen on" \ 3508 "\nprog [arg] Program to run" \ 3509 "\n-l name Local hostname (else looks up local hostname in DNS)" \ 3510 "\n-u user[:group] Change to user/group after bind" \ 3511 "\n-c n Handle up to n connections simultaneously" \ 3512 "\n-b n Allow a backlog of approximately n TCP SYNs" \ 3513 "\n-C n[:msg] Allow only up to n connections from the same IP" \ 3514 "\n New connections from this IP address are closed" \ 3515 "\n immediately. 'msg' is written to the peer before close" \ 3516 "\n-h Look up peer's hostname" \ 3517 "\n-E Do not set up environment variables" \ 3518 "\n-v Verbose" 5135 /* "[-hpEvv] [-c N] [-C N[:MSG]] [-b N] [-u USER] [-l NAME] [-i DIR|-x CDB] [-t SEC] IP PORT PROG" */ 5136 #define tcpsvd_full_usage "\n\n" \ 5137 "Create TCP socket, bind to IP:PORT and listen\n" \ 5138 "for incoming connection. Run PROG for each connection.\n" \ 5139 "\n IP IP to listen on. '0' = all" \ 5140 "\n PORT Port to listen on" \ 5141 "\n PROG ARGS Program to run" \ 5142 "\n -l NAME Local hostname (else looks up local hostname in DNS)" \ 5143 "\n -u USER[:GRP] Change to user/group after bind" \ 5144 "\n -c N Handle up to N connections simultaneously" \ 5145 "\n -b N Allow a backlog of approximately N TCP SYNs" \ 5146 "\n -C N[:MSG] Allow only up to N connections from the same IP." \ 5147 "\n New connections from this IP address are closed" \ 5148 "\n immediately. MSG is written to the peer before close" \ 5149 "\n -h Look up peer's hostname" \ 5150 "\n -E Don't set up environment variables" \ 5151 "\n -v Verbose" \ 3519 5152 3520 5153 #define udpsvd_trivial_usage \ 3521 "[-hEv] [-c n] [-u user] [-l name] ip port prog" 3522 #define udpsvd_full_usage \ 3523 "Creates UDP socket, binds it to ip:port and listens on it\n" \ 3524 "for incoming packets. For each packet it runs prog\n" \ 3525 "(redirecting all further packets with same peer ip:port to it)." \ 3526 "\n" \ 3527 "\nip IP to listen on. '0' = all" \ 3528 "\nport Port to listen on" \ 3529 "\nprog [arg] Program to run" \ 3530 "\n-l name Local hostname (else looks up local hostname in DNS)" \ 3531 "\n-u user[:group] Change to user/group after bind" \ 3532 "\n-c n Handle up to n connections simultaneously" \ 3533 "\n-h Look up peer's hostname" \ 3534 "\n-E Do not set up environment variables" \ 3535 "\n-v Verbose" 5154 "[-hEv] [-c N] [-u USER] [-l NAME] IP PORT PROG" 5155 #define udpsvd_full_usage "\n\n" \ 5156 "Create UDP socket, bind to IP:PORT and wait\n" \ 5157 "for incoming packets. Run PROG for each packet,\n" \ 5158 "redirecting all further packets with same peer ip:port to it.\n" \ 5159 "\n IP IP to listen on. '0' = all" \ 5160 "\n PORT Port to listen on" \ 5161 "\n PROG ARGS Program to run" \ 5162 "\n -l NAME Local hostname (else looks up local hostname in DNS)" \ 5163 "\n -u USER[:GRP] Change to user/group after bind" \ 5164 "\n -c N Handle up to N connections simultaneously" \ 5165 "\n -h Look up peer's hostname" \ 5166 "\n -E Don't set up environment variables" \ 5167 "\n -v Verbose" \ 3536 5168 3537 5169 #define tftp_trivial_usage \ 3538 "[OPTION ]...HOST [PORT]"3539 #define tftp_full_usage \3540 "Transfer a file from/to tftp server using \"octet\" mode" \3541 "\n\nOptions:" \3542 3543 3544 USE_FEATURE_TFTP_GET( \3545 3546 ) \ 3547 USE_FEATURE_TFTP_PUT( \3548 3549 ) \ 3550 USE_FEATURE_TFTP_BLOCKSIZE( \3551 5170 "[OPTIONS] HOST [PORT]" 5171 #define tftp_full_usage "\n\n" \ 5172 "Transfer a file from/to tftp server\n" \ 5173 "\nOptions:" \ 5174 "\n -l FILE Local FILE" \ 5175 "\n -r FILE Remote FILE" \ 5176 IF_FEATURE_TFTP_GET( \ 5177 "\n -g Get file" \ 5178 ) \ 5179 IF_FEATURE_TFTP_PUT( \ 5180 "\n -p Put file" \ 5181 ) \ 5182 IF_FEATURE_TFTP_BLOCKSIZE( \ 5183 "\n -b SIZE Transfer blocks of SIZE octets" \ 3552 5184 ) 5185 5186 #define tftpd_trivial_usage \ 5187 "[-cr] [-u USER] [DIR]" 5188 #define tftpd_full_usage "\n\n" \ 5189 "Transfer a file on tftp client's request\n" \ 5190 "\n" \ 5191 "tftpd should be used as an inetd service.\n" \ 5192 "tftpd's line for inetd.conf:\n" \ 5193 " 69 dgram udp nowait root tftpd tftpd /files/to/serve\n" \ 5194 "It also can be ran from udpsvd:\n" \ 5195 " udpsvd -vE 0.0.0.0 69 tftpd /files/to/serve\n" \ 5196 "\nOptions:" \ 5197 "\n -r Prohibit upload" \ 5198 "\n -c Allow file creation via upload" \ 5199 "\n -u Access files as USER" \ 5200 3553 5201 #define time_trivial_usage \ 3554 "[OPTION]... COMMAND [ARGS...]" 3555 #define time_full_usage \ 3556 "Run the program COMMAND with arguments ARGS. When COMMAND finishes,\n" \ 3557 "COMMAND's resource usage information is displayed." \ 3558 "\n\nOptions:\n" \ 3559 " -v Verbose" 5202 "[-v] PROG ARGS" 5203 #define time_full_usage "\n\n" \ 5204 "Run PROG, display resource usage when it exits\n" \ 5205 "\nOptions:" \ 5206 "\n -v Verbose" \ 5207 5208 #define timeout_trivial_usage \ 5209 "[-t SECS] [-s SIG] PROG ARGS" 5210 #define timeout_full_usage "\n\n" \ 5211 "Runs PROG. Sends SIG to it if it is not gone in SECS seconds.\n" \ 5212 "Defaults: SECS: 10, SIG: TERM." \ 3560 5213 3561 5214 #define top_trivial_usage \ 3562 "[-b] [-n count] [-d seconds]"3563 #define top_full_usage \5215 "[-b] [-nCOUNT] [-dSECONDS]" IF_FEATURE_TOPMEM(" [-m]") 5216 #define top_full_usage "\n\n" \ 3564 5217 "Provide a view of process activity in real time.\n" \ 3565 "Read the status of all processes from /proc each <seconds>\n" \ 3566 "and show the status for however many processes will fit on the screen." 5218 "Read the status of all processes from /proc each SECONDS\n" \ 5219 "and display a screenful of them." \ 5220 //TODO: add options and keyboard commands 3567 5221 3568 5222 #define touch_trivial_usage \ 3569 "[-c] FILE [FILE ...]" 3570 #define touch_full_usage \ 3571 "Update the last-modified date on the given FILE[s]" \ 3572 "\n\nOptions:\n" \ 3573 " -c Do not create any files" 5223 "[-c] [-d DATE] [-r FILE] FILE [FILE]..." 5224 #define touch_full_usage "\n\n" \ 5225 "Update the last-modified date on the given FILE[s]\n" \ 5226 "\nOptions:" \ 5227 "\n -c Don't create files" \ 5228 "\n -d DT Date/time to use" \ 5229 "\n -r FILE Use FILE's date/time" \ 5230 3574 5231 #define touch_example_usage \ 3575 5232 "$ ls -l /tmp/foo\n" \ … … 3581 5238 #define tr_trivial_usage \ 3582 5239 "[-cds] STRING1 [STRING2]" 3583 #define tr_full_usage \3584 "Translate, squeeze, and/or delete characters from\n" \3585 "standard input, writing to standard output" \3586 "\n\nOptions:\n" \3587 " -c Take complement of STRING1\n" \3588 " -d Delete input characters coded STRING1\n" \3589 " -s Squeeze multiple output characters of STRING2 into one character" 5240 #define tr_full_usage "\n\n" \ 5241 "Translate, squeeze, or delete characters from stdin, writing to stdout\n" \ 5242 "\nOptions:" \ 5243 "\n -c Take complement of STRING1" \ 5244 "\n -d Delete input characters coded STRING1" \ 5245 "\n -s Squeeze multiple output characters of STRING2 into one character" \ 5246 3590 5247 #define tr_example_usage \ 3591 5248 "$ echo \"gdkkn vnqkc\" | tr [a-y] [b-z]\n" \ … … 3593 5250 3594 5251 #define traceroute_trivial_usage \ 3595 "[-FIldnrv] [-f 1st_ttl] [-m max_ttl] [-p port#] [-q nqueries]\n" \ 3596 " [-s src_addr] [-t tos] [-w wait] [-g gateway] [-i iface]\n" \ 3597 " [-z pausemsecs] host [data size]" 3598 #define traceroute_full_usage \ 3599 "Trace the route ip packets follow going to \"host\"" \ 3600 "\n\nOptions:\n" \ 3601 " -F Set the don't fragment bit\n" \ 3602 " -I Use ICMP ECHO instead of UDP datagrams\n" \ 3603 " -l Display the ttl value of the returned packet\n" \ 3604 " -d Set SO_DEBUG options to socket\n" \ 3605 " -n Print hop addresses numerically rather than symbolically\n" \ 3606 " -r Bypass the normal routing tables and send directly to a host\n" \ 3607 " -v Verbose\n" \ 3608 " -m max_ttl Max time-to-live (max number of hops)\n" \ 3609 " -p port# Base UDP port number used in probes\n" \ 3610 " (default is 33434)\n" \ 3611 " -q nqueries Number of probes per 'ttl' (default 3)\n" \ 3612 " -s src_addr IP address to use as the source address\n" \ 3613 " -t tos Type-of-service in probe packets (default 0)\n" \ 3614 " -w wait Time in seconds to wait for a response to a probe\n" \ 3615 " (default 3 sec)\n" \ 3616 " -g Specify a loose source route gateway (8 max)" 3617 5252 "[-"IF_TRACEROUTE6("46")"FIldnrv] [-f 1ST_TTL] [-m MAXTTL] [-p PORT] [-q PROBES]\n" \ 5253 " [-s SRC_IP] [-t TOS] [-w WAIT_SEC] [-g GATEWAY] [-i IFACE]\n" \ 5254 " [-z PAUSE_MSEC] HOST [BYTES]" 5255 #define traceroute_full_usage "\n\n" \ 5256 "Trace the route to HOST\n" \ 5257 "\nOptions:" \ 5258 IF_TRACEROUTE6( \ 5259 "\n -4,-6 Force IP or IPv6 name resolution" \ 5260 ) \ 5261 "\n -F Set the don't fragment bit" \ 5262 "\n -I Use ICMP ECHO instead of UDP datagrams" \ 5263 "\n -l Display the TTL value of the returned packet" \ 5264 "\n -d Set SO_DEBUG options to socket" \ 5265 "\n -n Print numeric addresses" \ 5266 "\n -r Bypass routing tables, send directly to HOST" \ 5267 "\n -v Verbose" \ 5268 "\n -m Max time-to-live (max number of hops)" \ 5269 "\n -p Base UDP port number used in probes" \ 5270 "\n (default 33434)" \ 5271 "\n -q Number of probes per TTL (default 3)" \ 5272 "\n -s IP address to use as the source address" \ 5273 "\n -t Type-of-service in probe packets (default 0)" \ 5274 "\n -w Time in seconds to wait for a response (default 3)" \ 5275 "\n -g Loose source route gateway (8 max)" \ 5276 5277 #define traceroute6_trivial_usage \ 5278 "[-dnrv] [-m MAXTTL] [-p PORT] [-q PROBES]\n" \ 5279 " [-s SRC_IP] [-t TOS] [-w WAIT_SEC] [-i IFACE]\n" \ 5280 " HOST [BYTES]" 5281 #define traceroute6_full_usage "\n\n" \ 5282 "Trace the route to HOST\n" \ 5283 "\nOptions:" \ 5284 "\n -d Set SO_DEBUG options to socket" \ 5285 "\n -n Print numeric addresses" \ 5286 "\n -r Bypass routing tables, send directly to HOST" \ 5287 "\n -v Verbose" \ 5288 "\n -m Max time-to-live (max number of hops)" \ 5289 "\n -p Base UDP port number used in probes" \ 5290 "\n (default is 33434)" \ 5291 "\n -q Number of probes per TTL (default 3)" \ 5292 "\n -s IP address to use as the source address" \ 5293 "\n -t Type-of-service in probe packets (default 0)" \ 5294 "\n -w Time in seconds to wait for a response (default 3)" \ 3618 5295 3619 5296 #define true_trivial_usage \ 3620 5297 "" 3621 #define true_full_usage \5298 #define true_full_usage "\n\n" \ 3622 5299 "Return an exit code of TRUE (0)" 3623 5300 #define true_example_usage \ … … 3628 5305 #define tty_trivial_usage \ 3629 5306 "" 3630 #define tty_full_usage \ 3631 "Print file name of standard input's terminal" \ 3632 USE_INCLUDE_SUSv2( \ 3633 "\n\nOptions:\n" \ 3634 " -s Print nothing, only return exit status") 5307 #define tty_full_usage "\n\n" \ 5308 "Print file name of stdin's terminal" \ 5309 IF_INCLUDE_SUSv2( "\n" \ 5310 "\nOptions:" \ 5311 "\n -s Print nothing, only return exit status" \ 5312 ) 3635 5313 #define tty_example_usage \ 3636 5314 "$ tty\n" \ … … 3639 5317 #define ttysize_trivial_usage \ 3640 5318 "[w] [h]" 3641 #define ttysize_full_usage \ 3642 "Print dimension(s) of standard input's terminal, on error return 80x25" 3643 3644 #define tune2fs_trivial_usage \ 3645 "[-c max-mounts-count] [-e errors-behavior] [-g group] " \ 3646 "[-i interval[d|m|w]] [-j] [-J journal-options] [-l] [-s sparse-flag] " \ 3647 "[-m reserved-blocks-percent] [-o [^]mount-options[,...]] " \ 3648 "[-r reserved-blocks-count] [-u user] [-C mount-count] " \ 3649 "[-L volume-label] [-M last-mounted-dir] [-O [^]feature[,...]] " \ 3650 "[-T last-check-time] [-U UUID] device" 3651 #define tune2fs_full_usage \ 3652 "Adjust filesystem options on ext[23] filesystems" 3653 3654 #define udhcpc_trivial_usage \ 3655 "[-Cfbnqtv] [-c CID] [-V VCLS] [-H HOSTNAME] [-i INTERFACE]\n" \ 3656 " [-p pidfile] [-r IP] [-s script]" 3657 #define udhcpc_full_usage \ 3658 " -V,--vendorclass=CLASSID Set vendor class identifier" \ 3659 "\n -i,--interface=INTERFACE Interface to use (default: eth0)" \ 3660 "\n -H,-h,--hostname=HOSTNAME Client hostname" \ 3661 "\n -c,--clientid=CLIENTID Set client identifier" \ 3662 "\n -C,--clientid-none Suppress default client identifier" \ 3663 "\n -p,--pidfile=file Store process ID of daemon in file" \ 3664 "\n -r,--request=IP IP address to request" \ 3665 "\n -s,--script=file Run file at dhcp events (default: /usr/share/udhcpc/default.script)" \ 3666 "\n -t,--retries=N Send up to N request packets"\ 3667 "\n -f,--foreground Stay in foreground" \ 3668 "\n -b,--background Background if lease cannot be immediately negotiated" \ 3669 "\n -S,--syslog Log to syslog too" \ 3670 "\n -n,--now Exit with failure if lease cannot be immediately negotiated" \ 3671 "\n -q,--quit Quit after obtaining lease" \ 3672 "\n -R,--release Release IP on quit" \ 3673 "\n -v,--version Display version" \ 5319 #define ttysize_full_usage "\n\n" \ 5320 "Print dimension(s) of stdin's terminal, on error return 80x25" 5321 5322 #define tunctl_trivial_usage \ 5323 "[-f device] ([-t name] | -d name)" IF_FEATURE_TUNCTL_UG(" [-u owner] [-g group] [-b]") 5324 #define tunctl_full_usage "\n\n" \ 5325 "Create or delete tun interfaces\n" \ 5326 "\nOptions:" \ 5327 "\n -f name tun device (/dev/net/tun)" \ 5328 "\n -t name Create iface 'name'" \ 5329 "\n -d name Delete iface 'name'" \ 5330 IF_FEATURE_TUNCTL_UG( \ 5331 "\n -u owner Set iface owner" \ 5332 "\n -g group Set iface group" \ 5333 "\n -b Brief output" \ 5334 ) 5335 #define tunctl_example_usage \ 5336 "# tunctl\n" \ 5337 "# tunctl -d tun0\n" 3674 5338 3675 5339 #define udhcpd_trivial_usage \ 3676 "[-fS] [configfile]" \ 3677 3678 #define udhcpd_full_usage \ 3679 "DHCP server" \ 3680 "\n -f Stay in foreground" \ 3681 "\n -S Log to syslog too" 5340 "[-fS]" IF_FEATURE_UDHCP_PORT(" [-P N]") " [CONFFILE]" \ 5341 5342 #define udhcpd_full_usage "\n\n" \ 5343 "DHCP server\n" \ 5344 "\n -f Run in foreground" \ 5345 "\n -S Log to syslog too" \ 5346 IF_FEATURE_UDHCP_PORT( \ 5347 "\n -P N Use port N (default 67)" \ 5348 ) 3682 5349 3683 5350 #define umount_trivial_usage \ 3684 "[flags] FILESYSTEM|DIRECTORY" 3685 #define umount_full_usage \ 3686 "Unmount file systems" \ 3687 "\n\nOptions:\n" \ 3688 USE_FEATURE_UMOUNT_ALL( \ 3689 "\n -a Unmount all file systems" USE_FEATURE_MTAB_SUPPORT(" in /etc/mtab")) \ 3690 USE_FEATURE_MTAB_SUPPORT( \ 3691 "\n -n Don't erase /etc/mtab entries") \ 3692 "\n -r Try to remount devices as read-only if mount is busy" \ 3693 "\n -l Lazy umount (detach filesystem)" \ 3694 "\n -f Force umount (i.e., unreachable NFS server)" \ 3695 USE_FEATURE_MOUNT_LOOP( \ 3696 "\n -D Do not free loop device (if a loop device has been used)") 5351 "[OPTIONS] FILESYSTEM|DIRECTORY" 5352 #define umount_full_usage "\n\n" \ 5353 "Unmount file systems\n" \ 5354 "\nOptions:" \ 5355 IF_FEATURE_UMOUNT_ALL( \ 5356 "\n -a Unmount all file systems" IF_FEATURE_MTAB_SUPPORT(" in /etc/mtab") \ 5357 ) \ 5358 IF_FEATURE_MTAB_SUPPORT( \ 5359 "\n -n Don't erase /etc/mtab entries" \ 5360 ) \ 5361 "\n -r Try to remount devices as read-only if mount is busy" \ 5362 "\n -l Lazy umount (detach filesystem)" \ 5363 "\n -f Force umount (i.e., unreachable NFS server)" \ 5364 IF_FEATURE_MOUNT_LOOP( \ 5365 "\n -d Free loop device if it has been used" \ 5366 ) 5367 3697 5368 #define umount_example_usage \ 3698 5369 "$ umount /dev/hdc1\n" 3699 5370 3700 5371 #define uname_trivial_usage \ 3701 "[OPTION]..." 3702 #define uname_full_usage \ 3703 "Print certain system information. With no OPTION, same as -s." \ 3704 "\n\nOptions:\n" \ 3705 " -a Print all information\n" \ 3706 " -m The machine (hardware) type\n" \ 3707 " -n Print the machine's network node hostname\n" \ 3708 " -r Print the operating system release\n" \ 3709 " -s Print the operating system name\n" \ 3710 " -p Print the host processor type\n" \ 3711 " -v Print the operating system version" 5372 "[-amnrspv]" 5373 #define uname_full_usage "\n\n" \ 5374 "Print system information\n" \ 5375 "\nOptions:" \ 5376 "\n -a Print all" \ 5377 "\n -m The machine (hardware) type" \ 5378 "\n -n Hostname" \ 5379 "\n -r OS release" \ 5380 "\n -s OS name (default)" \ 5381 "\n -p Processor type" \ 5382 "\n -v OS version" \ 5383 3712 5384 #define uname_example_usage \ 3713 5385 "$ uname -a\n" \ … … 3715 5387 3716 5388 #define uncompress_trivial_usage \ 3717 "[-c ] [-f] [name...]"3718 #define uncompress_full_usage \3719 " Uncompress .Z file[s]" \3720 "\n\nOptions:\n" \3721 " -c Extract to stdout\n" \3722 " -f Force overwrite an existing file"5389 "[-cf] [FILE]..." 5390 #define uncompress_full_usage "\n\n" \ 5391 "Decompress .Z file[s]\n" \ 5392 "\nOptions:" \ 5393 "\n -c Write to stdout" \ 5394 "\n -f Overwrite" \ 3723 5395 3724 5396 #define unexpand_trivial_usage \ 3725 "[-f][-a][-t NUM] [FILE|-]" 3726 #define unexpand_full_usage \ 3727 "Convert spaces to tabs, writing to standard output." \ 3728 "\n\nOptions:" \ 3729 "\n -a" USE_FEATURE_UNEXPAND_LONG_OPTIONS(",--all") \ 3730 " Convert all blanks" \ 3731 "\n -f" USE_FEATURE_UNEXPAND_LONG_OPTIONS(",--first-only") \ 3732 " Convert only leading sequences of blanks" \ 3733 "\n -t" USE_FEATURE_UNEXPAND_LONG_OPTIONS(",--tabs=N") \ 3734 " Tabstops every N chars" 5397 "[-fa][-t N] [FILE]..." 5398 #define unexpand_full_usage "\n\n" \ 5399 "Convert spaces to tabs, writing to stdout\n" \ 5400 "\nOptions:" \ 5401 IF_FEATURE_UNEXPAND_LONG_OPTIONS( \ 5402 "\n -a,--all Convert all blanks" \ 5403 "\n -f,--first-only Convert only leading blanks" \ 5404 "\n -t,--tabs=N Tabstops every N chars" \ 5405 ) \ 5406 IF_NOT_FEATURE_UNEXPAND_LONG_OPTIONS( \ 5407 "\n -a Convert all blanks" \ 5408 "\n -f Convert only leading blanks" \ 5409 "\n -t N Tabstops every N chars" \ 5410 ) 3735 5411 3736 5412 #define uniq_trivial_usage \ 3737 "[-fscdu]... [INPUT [OUTPUT]]" 3738 #define uniq_full_usage \ 3739 "Discard all but one of successive identical lines from INPUT\n" \ 3740 "(or standard input), writing to OUTPUT (or standard output)" \ 3741 "\n\nOptions:\n" \ 3742 " -c Prefix lines by the number of occurrences\n" \ 3743 " -d Only print duplicate lines\n" \ 3744 " -u Only print unique lines\n" \ 3745 " -f N Skip the first N fields\n" \ 3746 " -s N Skip the first N chars (after any skipped fields)" 5413 "[-cdu][-f,s,w N] [INPUT [OUTPUT]]" 5414 #define uniq_full_usage "\n\n" \ 5415 "Discard duplicate lines\n" \ 5416 "\nOptions:" \ 5417 "\n -c Prefix lines by the number of occurrences" \ 5418 "\n -d Only print duplicate lines" \ 5419 "\n -u Only print unique lines" \ 5420 "\n -f N Skip first N fields" \ 5421 "\n -s N Skip first N chars (after any skipped fields)" \ 5422 "\n -w N Compare N characters in line" \ 5423 3747 5424 #define uniq_example_usage \ 3748 5425 "$ echo -e \"a\\na\\nb\\nc\\nc\\na\" | sort | uniq\n" \ … … 3751 5428 "c\n" 3752 5429 3753 #define unix2dos_trivial_usage \3754 "[option] [FILE]"3755 #define unix2dos_full_usage \3756 "Convert FILE from unix format to dos format. When no option\n" \3757 "is given, the input is converted to the opposite output format.\n" \3758 "When no file is given, use stdin/stdout." \3759 "\n\nOptions:\n" \3760 " -u Output will be in UNIX format\n" \3761 " -d Output will be in DOS format"3762 3763 5430 #define unzip_trivial_usage \ 3764 "[-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir]"3765 #define unzip_full_usage \3766 "Extract files from ZIP archives " \3767 "\n\nOptions:\n" \3768 " -l List archive contents (short form)\n" \3769 " -n Never overwrite existing files (default)\n" \3770 " -o Overwrite files without prompting\n" \3771 " -p Send output to stdout\n" \3772 " -q Quiet\n" \3773 " -x Exclude these files\n" \3774 " -d Extract files into this directory"5431 "[-opts[modifiers]] FILE[.zip] [LIST] [-x XLIST] [-d DIR]" 5432 #define unzip_full_usage "\n\n" \ 5433 "Extract files from ZIP archives\n" \ 5434 "\nOptions:" \ 5435 "\n -l List archive contents (with -q for short form)" \ 5436 "\n -n Never overwrite files (default)" \ 5437 "\n -o Overwrite" \ 5438 "\n -p Send output to stdout" \ 5439 "\n -q Quiet" \ 5440 "\n -x XLST Exclude these files" \ 5441 "\n -d DIR Extract files into DIR" \ 3775 5442 3776 5443 #define uptime_trivial_usage \ 3777 5444 "" 3778 #define uptime_full_usage \5445 #define uptime_full_usage "\n\n" \ 3779 5446 "Display the time since the last boot" 5447 3780 5448 #define uptime_example_usage \ 3781 5449 "$ uptime\n" \ … … 3784 5452 #define usleep_trivial_usage \ 3785 5453 "N" 3786 #define usleep_full_usage \5454 #define usleep_full_usage "\n\n" \ 3787 5455 "Pause for N microseconds" 5456 3788 5457 #define usleep_example_usage \ 3789 5458 "$ usleep 1000000\n" \ … … 3791 5460 3792 5461 #define uudecode_trivial_usage \ 3793 "[-o outfile] [infile]"3794 #define uudecode_full_usage \5462 "[-o OUTFILE] [INFILE]" 5463 #define uudecode_full_usage "\n\n" \ 3795 5464 "Uudecode a file\n" \ 3796 "NB: finds outfile name in uuencoded source unless -o is given" 5465 "Finds outfile name in uuencoded source unless -o is given" 5466 3797 5467 #define uudecode_example_usage \ 3798 5468 "$ uudecode -o busybox busybox.uu\n" \ … … 3801 5471 3802 5472 #define uuencode_trivial_usage \ 3803 "[-m] [infile] stored_filename" 3804 #define uuencode_full_usage \ 3805 "Uuencode a file to stdout" \ 3806 "\n\nOptions:\n" \ 3807 " -m Use base64 encoding per RFC1521" 5473 "[-m] [INFILE] STORED_FILENAME" 5474 #define uuencode_full_usage "\n\n" \ 5475 "Uuencode a file to stdout\n" \ 5476 "\nOptions:" \ 5477 "\n -m Use base64 encoding per RFC1521" \ 5478 3808 5479 #define uuencode_example_usage \ 3809 5480 "$ uuencode busybox busybox\n" \ … … 3814 5485 3815 5486 #define vconfig_trivial_usage \ 3816 "COMMAND [OPTIONS] ..."3817 #define vconfig_full_usage \3818 "Create and remove virtual ethernet devices " \3819 "\n\nOptions:\n" \3820 " add [interface-name] [vlan_id]\n" \3821 " rem [vlan-name]\n" \3822 " set_flag [interface-name] [flag-num] [0 | 1]\n" \3823 " set_egress_map [vlan-name] [skb_priority] [vlan_qos]\n" \3824 " set_ingress_map [vlan-name] [skb_priority] [vlan_qos]\n" \3825 " set_name_type [name-type]"5487 "COMMAND [OPTIONS]" 5488 #define vconfig_full_usage "\n\n" \ 5489 "Create and remove virtual ethernet devices\n" \ 5490 "\nOptions:" \ 5491 "\n add [interface-name] [vlan_id]" \ 5492 "\n rem [vlan-name]" \ 5493 "\n set_flag [interface-name] [flag-num] [0 | 1]" \ 5494 "\n set_egress_map [vlan-name] [skb_priority] [vlan_qos]" \ 5495 "\n set_ingress_map [vlan-name] [skb_priority] [vlan_qos]" \ 5496 "\n set_name_type [name-type]" \ 3826 5497 3827 5498 #define vi_trivial_usage \ 3828 "[OPTION] [FILE]..." 3829 #define vi_full_usage \ 3830 "Edit FILE" \ 3831 "\n\nOptions:\n" \ 3832 " -R Read-only - do not write to the file" 5499 "[OPTIONS] [FILE]..." 5500 #define vi_full_usage "\n\n" \ 5501 "Edit FILE\n" \ 5502 "\nOptions:" \ 5503 IF_FEATURE_VI_COLON( \ 5504 "\n -c Initial command to run ($EXINIT also available)" \ 5505 ) \ 5506 IF_FEATURE_VI_READONLY( \ 5507 "\n -R Read-only" \ 5508 ) \ 5509 "\n -H Short help regarding available features" \ 3833 5510 3834 5511 #define vlock_trivial_usage \ 3835 "[OPTIONS]" 3836 #define vlock_full_usage \ 3837 "Lock a virtual terminal. A password is required to unlock." \ 3838 "\n\nOptions:\n" \ 3839 " -a Lock all VTs" 5512 "[-a]" 5513 #define vlock_full_usage "\n\n" \ 5514 "Lock a virtual terminal. A password is required to unlock.\n" \ 5515 "\nOptions:" \ 5516 "\n -a Lock all VTs" \ 5517 5518 #define volname_trivial_usage \ 5519 "[DEVICE]" 5520 #define volname_full_usage "\n\n" \ 5521 "Show CD volume name of the DEVICE (default /dev/cdrom)" 5522 5523 #define wall_trivial_usage \ 5524 "[FILE]" 5525 #define wall_full_usage "\n\n" \ 5526 "Write content of FILE or stdin to all logged-in users" 5527 #define wall_sample_usage \ 5528 "echo foo | wall\n" \ 5529 "wall ./mymessage" 3840 5530 3841 5531 #define watch_trivial_usage \ 3842 "[-n seconds] [-t] COMMAND..." 3843 #define watch_full_usage \ 3844 "Execute a program periodically" \ 3845 "\n\nOptions:\n" \ 3846 " -n Loop period in seconds - default is 2\n" \ 3847 " -t Don't print header" 5532 "[-n SEC] [-t] PROG ARGS" 5533 #define watch_full_usage "\n\n" \ 5534 "Run PROG periodically\n" \ 5535 "\nOptions:" \ 5536 "\n -n Loop period in seconds (default 2)" \ 5537 "\n -t Don't print header" \ 5538 3848 5539 #define watch_example_usage \ 3849 5540 "$ watch date\n" \ … … 3853 5544 3854 5545 #define watchdog_trivial_usage \ 3855 "[-t seconds] [-F] DEV" 3856 #define watchdog_full_usage \ 3857 "Periodically write to watchdog device DEV" \ 3858 "\n\nOptions:\n" \ 3859 " -t Timer period in seconds - default is 30\n" \ 3860 " -F Stay in the foreground and don't fork" 3861 3862 #define wc_trivial_usage \ 3863 "[OPTION]... [FILE]..." 3864 #define wc_full_usage \ 3865 "Print line, word, and byte counts for each FILE, and a total line if\n" \ 3866 "more than one FILE is specified. With no FILE, read standard input." \ 3867 "\n\nOptions:\n" \ 3868 " -c Print the byte counts\n" \ 3869 " -l Print the newline counts\n" \ 3870 " -L Print the length of the longest line\n" \ 3871 " -w Print the word counts" 3872 #define wc_example_usage \ 3873 "$ wc /etc/passwd\n" \ 3874 " 31 46 1365 /etc/passwd\n" 5546 "[-t N[ms]] [-T N[ms]] [-F] DEV" 5547 #define watchdog_full_usage "\n\n" \ 5548 "Periodically write to watchdog device DEV\n" \ 5549 "\nOptions:" \ 5550 "\n -T N Reboot after N seconds if not reset (default 60)" \ 5551 "\n -t N Reset every N seconds (default 30)" \ 5552 "\n -F Run in foreground" \ 5553 "\n" \ 5554 "\nUse 500ms to specify period in milliseconds" \ 3875 5555 3876 5556 #define wget_trivial_usage \ 3877 "[-c|--continue] [-s|--spider] [-q|--quiet] [-O|--output-document file]\n" \ 3878 " [--header 'header: value'] [-Y|--proxy on/off] [-P DIR]\n" \ 3879 " [-U|--user-agent agent] url" 3880 #define wget_full_usage \ 3881 "Retrieve files via HTTP or FTP" \ 3882 "\n\nOptions:\n" \ 3883 " -s Spider mode - only check file existence\n" \ 3884 " -c Continue retrieval of aborted transfer\n" \ 3885 " -q Quiet\n" \ 3886 " -P Set directory prefix to DIR\n" \ 3887 " -O Save to filename ('-' for stdout)\n" \ 3888 " -U Adjust 'User-Agent' field\n" \ 3889 " -Y Use proxy ('on' or 'off')" 5557 IF_FEATURE_WGET_LONG_OPTIONS( \ 5558 "[-c|--continue] [-s|--spider] [-q|--quiet] [-O|--output-document FILE]\n" \ 5559 " [--header 'header: value'] [-Y|--proxy on/off] [-P DIR]\n" \ 5560 " [--no-check-certificate] [-U|--user-agent AGENT]" \ 5561 IF_FEATURE_WGET_TIMEOUT("[-T SEC] ") " URL" \ 5562 ) \ 5563 IF_NOT_FEATURE_WGET_LONG_OPTIONS( \ 5564 "[-csq] [-O FILE] [-Y on/off] [-P DIR] [-U AGENT]" \ 5565 IF_FEATURE_WGET_TIMEOUT("[-T SEC] ") " URL" \ 5566 ) 5567 #define wget_full_usage "\n\n" \ 5568 "Retrieve files via HTTP or FTP\n" \ 5569 "\nOptions:" \ 5570 "\n -s Spider mode - only check file existence" \ 5571 "\n -c Continue retrieval of aborted transfer" \ 5572 "\n -q Quiet" \ 5573 "\n -P DIR Save to DIR (default .)" \ 5574 IF_FEATURE_WGET_TIMEOUT( \ 5575 "\n -T SEC Network read timeout is SEC seconds" \ 5576 ) \ 5577 "\n -O FILE Save to FILE ('-' for stdout)" \ 5578 "\n -U STR Use STR for User-Agent header" \ 5579 "\n -Y Use proxy ('on' or 'off')" \ 3890 5580 3891 5581 #define which_trivial_usage \ 3892 "[COMMAND ...]"3893 #define which_full_usage \5582 "[COMMAND]..." 5583 #define which_full_usage "\n\n" \ 3894 5584 "Locate a COMMAND" 3895 5585 #define which_example_usage \ … … 3898 5588 3899 5589 #define who_trivial_usage \ 3900 " " 3901 #define who_full_usage \ 3902 "Print the current user names and related information" 5590 "[-a]" 5591 #define who_full_usage "\n\n" \ 5592 "Show who is logged on\n" \ 5593 "\nOptions:" \ 5594 "\n -a Show all" \ 3903 5595 3904 5596 #define whoami_trivial_usage \ 3905 5597 "" 3906 #define whoami_full_usage \5598 #define whoami_full_usage "\n\n" \ 3907 5599 "Print the user name associated with the current effective user id" 3908 3909 #define xargs_trivial_usage \3910 "[OPTIONS] [COMMAND] [ARGS...]"3911 #define xargs_full_usage \3912 "Execute COMMAND on every item given by standard input" \3913 "\n\nOptions:\n" \3914 USE_FEATURE_XARGS_SUPPORT_CONFIRMATION( \3915 " -p Prompt the user about whether to run each command\n") \3916 " -r Do not run command for empty read lines\n" \3917 USE_FEATURE_XARGS_SUPPORT_TERMOPT( \3918 " -x Exit if the size is exceeded\n") \3919 USE_FEATURE_XARGS_SUPPORT_ZERO_TERM( \3920 " -0 Input filenames are terminated by a null character\n") \3921 " -t Print the command line on stderr before executing it"3922 #define xargs_example_usage \3923 "$ ls | xargs gzip\n" \3924 "$ find . -name '*.c' -print | xargs rm\n"3925 3926 #define yes_trivial_usage \3927 "[OPTION]... [STRING]..."3928 #define yes_full_usage \3929 "Repeatedly output a line with all specified STRING(s), or 'y'"3930 5600 3931 5601 #define zcat_trivial_usage \ 3932 5602 "FILE" 3933 #define zcat_full_usage \3934 " Uncompress to stdout"5603 #define zcat_full_usage "\n\n" \ 5604 "Decompress to stdout" 3935 5605 3936 5606 #define zcip_trivial_usage \ 3937 "[OPTIONS] ifname script" 3938 #define zcip_full_usage \ 3939 "Manage a ZeroConf IPv4 link-local address" \ 3940 "\n\nOptions:\n" \ 3941 " -f Foreground mode\n" \ 3942 " -q Quit after address (no daemon)\n" \ 3943 " -r 169.254.x.x Request this address first\n" \ 3944 " -v Verbose" 3945 3946 #endif /* __BB_USAGE_H__ */ 5607 "[OPTIONS] IFACE SCRIPT" 5608 #define zcip_full_usage "\n\n" \ 5609 "Manage a ZeroConf IPv4 link-local address\n" \ 5610 "\nOptions:" \ 5611 "\n -f Run in foreground" \ 5612 "\n -q Quit after obtaining address" \ 5613 "\n -r 169.254.x.x Request this address first" \ 5614 "\n -v Verbose" \ 5615 "\n" \ 5616 "\nWith no -q, runs continuously monitoring for ARP conflicts," \ 5617 "\nexits only on I/O errors (link down etc)" \ 5618 5619 5620 #endif -
branches/2.2.9/mindi-busybox/include/xatonum.h
r1765 r2725 5 5 * Copyright (C) 2003 Manuel Novoa III <mjn3@codepoet.org> 6 6 * 7 * Licensed under GPLv2, see file LICENSE in this tarball for details.7 * Licensed under GPLv2, see file LICENSE in this source tree. 8 8 */ 9 10 PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN 9 11 10 12 /* Provides extern declarations of functions */ 11 13 #define DECLARE_STR_CONV(type, T, UT) \ 12 14 \ 13 unsigned type xstrto##UT##_range_sfx(const char *str, int b, unsigned type l, unsigned type u, const struct suffix_mult *sfx); \ 14 unsigned type xstrto##UT##_range(const char *str, int b, unsigned type l, unsigned type u); \ 15 unsigned type xstrto##UT##_sfx(const char *str, int b, const struct suffix_mult *sfx); \ 16 unsigned type xstrto##UT(const char *str, int b); \ 17 unsigned type xato##UT##_range_sfx(const char *str, unsigned type l, unsigned type u, const struct suffix_mult *sfx); \ 18 unsigned type xato##UT##_range(const char *str, unsigned type l, unsigned type u); \ 19 unsigned type xato##UT##_sfx(const char *str, const struct suffix_mult *sfx); \ 20 unsigned type xato##UT(const char *str); \ 21 type xstrto##T##_range_sfx(const char *str, int b, type l, type u, const struct suffix_mult *sfx); \ 22 type xstrto##T##_range(const char *str, int b, type l, type u); \ 23 type xato##T##_range_sfx(const char *str, type l, type u, const struct suffix_mult *sfx); \ 24 type xato##T##_range(const char *str, type l, type u); \ 25 type xato##T##_sfx(const char *str, const struct suffix_mult *sfx); \ 26 type xato##T(const char *str); \ 15 unsigned type xstrto##UT##_range_sfx(const char *str, int b, unsigned type l, unsigned type u, const struct suffix_mult *sfx) FAST_FUNC; \ 16 unsigned type xstrto##UT##_range(const char *str, int b, unsigned type l, unsigned type u) FAST_FUNC; \ 17 unsigned type xstrto##UT##_sfx(const char *str, int b, const struct suffix_mult *sfx) FAST_FUNC; \ 18 unsigned type xstrto##UT(const char *str, int b) FAST_FUNC; \ 19 unsigned type xato##UT##_range_sfx(const char *str, unsigned type l, unsigned type u, const struct suffix_mult *sfx) FAST_FUNC; \ 20 unsigned type xato##UT##_range(const char *str, unsigned type l, unsigned type u) FAST_FUNC; \ 21 unsigned type xato##UT##_sfx(const char *str, const struct suffix_mult *sfx) FAST_FUNC; \ 22 unsigned type xato##UT(const char *str) FAST_FUNC; \ 23 type xstrto##T##_range_sfx(const char *str, int b, type l, type u, const struct suffix_mult *sfx) FAST_FUNC; \ 24 type xstrto##T##_range(const char *str, int b, type l, type u) FAST_FUNC; \ 25 type xstrto##T(const char *str, int b) FAST_FUNC; \ 26 type xato##T##_range_sfx(const char *str, type l, type u, const struct suffix_mult *sfx) FAST_FUNC; \ 27 type xato##T##_range(const char *str, type l, type u) FAST_FUNC; \ 28 type xato##T##_sfx(const char *str, const struct suffix_mult *sfx) FAST_FUNC; \ 29 type xato##T(const char *str) FAST_FUNC; \ 27 30 28 31 /* Unsigned long long functions always exist */ … … 65 68 { return xstrto##W##_range(str, b, l, u); } \ 66 69 static ALWAYS_INLINE \ 70 narrow xstrto##N(const char *str, int b) \ 71 { return xstrto##W(str, b); } \ 72 static ALWAYS_INLINE \ 67 73 narrow xato##N##_range_sfx(const char *str, narrow l, narrow u, const struct suffix_mult *sfx) \ 68 74 { return xato##W##_range_sfx(str, l, u, sfx); } \ … … 96 102 /* Specialized */ 97 103 98 int BUG_xatou32_unimplemented(void);104 uint32_t BUG_xatou32_unimplemented(void); 99 105 static ALWAYS_INLINE uint32_t xatou32(const char *numstr) 100 106 { … … 106 112 } 107 113 108 /* Non-aborting kind of convertors */114 /* Non-aborting kind of convertors: bb_strto[u][l]l */ 109 115 110 unsigned long long bb_strtoull(const char *arg, char **endp, int base); 111 long long bb_strtoll(const char *arg, char **endp, int base); 116 /* On exit: errno = 0 only if there was non-empty, '\0' terminated value 117 * errno = EINVAL if value was not '\0' terminated, but otherwise ok 118 * Return value is still valid, caller should just check whether end[0] 119 * is a valid terminating char for particular case. OTOH, if caller 120 * requires '\0' terminated input, [s]he can just check errno == 0. 121 * errno = ERANGE if value had alphanumeric terminating char ("1234abcg"). 122 * errno = ERANGE if value is out of range, missing, etc. 123 * errno = ERANGE if value had minus sign for strtouXX (even "-0" is not ok ) 124 * return value is all-ones in this case. 125 */ 126 127 unsigned long long bb_strtoull(const char *arg, char **endp, int base) FAST_FUNC; 128 long long bb_strtoll(const char *arg, char **endp, int base) FAST_FUNC; 112 129 113 130 #if ULONG_MAX == ULLONG_MAX … … 119 136 { return bb_strtoll(arg, endp, base); } 120 137 #else 121 unsigned long bb_strtoul(const char *arg, char **endp, int base) ;122 long bb_strtol(const char *arg, char **endp, int base) ;138 unsigned long bb_strtoul(const char *arg, char **endp, int base) FAST_FUNC; 139 long bb_strtol(const char *arg, char **endp, int base) FAST_FUNC; 123 140 #endif 124 141 … … 138 155 { return bb_strtol(arg, endp, base); } 139 156 #else 140 unsigned bb_strtou(const char *arg, char **endp, int base) ;141 int bb_strtoi(const char *arg, char **endp, int base) ;157 unsigned bb_strtou(const char *arg, char **endp, int base) FAST_FUNC; 158 int bb_strtoi(const char *arg, char **endp, int base) FAST_FUNC; 142 159 #endif 143 160 144 int BUG_bb_strtou32_unimplemented(void);161 uint32_t BUG_bb_strtou32_unimplemented(void); 145 162 static ALWAYS_INLINE 146 163 uint32_t bb_strtou32(const char *arg, char **endp, int base) … … 155 172 /* Floating point */ 156 173 157 /* double bb_strtod(const char *arg, char **endp); */ 174 double bb_strtod(const char *arg, char **endp) FAST_FUNC; 175 176 POP_SAVED_FUNCTION_VISIBILITY -
branches/2.2.9/mindi-busybox/include/xregex.h
r1765 r2725 5 5 * 6 6 * Based in part on code from sash, Copyright (c) 1999 by David I. Bell 7 * Permission has been granted to redistribute this code under theGPL.7 * Permission has been granted to redistribute this code under GPL. 8 8 * 9 * Licensed under GPLv2 or later, see file L icense in this tarball for details.9 * Licensed under GPLv2 or later, see file LICENSE in this source tree. 10 10 */ 11 #ifndef __BB_REGEX__12 #define __BB_REGEX__11 #ifndef BB_REGEX_H 12 #define BB_REGEX_H 1 13 13 14 14 #include <regex.h> 15 char* regcomp_or_errmsg(regex_t *preg, const char *regex, int cflags); 16 void xregcomp(regex_t *preg, const char *regex, int cflags); 15 16 PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN 17 18 char* regcomp_or_errmsg(regex_t *preg, const char *regex, int cflags) FAST_FUNC; 19 void xregcomp(regex_t *preg, const char *regex, int cflags) FAST_FUNC; 20 21 POP_SAVED_FUNCTION_VISIBILITY 17 22 18 23 #endif
Note:
See TracChangeset
for help on using the changeset viewer.