Changeset 3232 in MondoRescue for branches/3.2/mindi-busybox/include


Ignore:
Timestamp:
Jan 1, 2014, 12:47:38 AM (10 years ago)
Author:
Bruno Cornec
Message:
  • Update mindi-busybox to 1.21.1
Location:
branches/3.2/mindi-busybox/include
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • branches/3.2/mindi-busybox/include/.gitignore

    r2725 r3232  
    11/config
    22
     3/applets.h
    34/applet_tables.h
    45/autoconf.h
     6/bbconfigopts_bz2.h
    57/bbconfigopts.h
     8/NUM_APPLETS.h
    69/usage_compressed.h
     10/usage.h
  • branches/3.2/mindi-busybox/include/applets.src.h

    r2725 r3232  
    1313l     - location to install link to: [/usr]/[s]bin
    1414s     - suid type:
    15         _BB_SUID_REQUIRE: will complain if busybox isn't suid
     15        BB_SUID_REQUIRE: will complain if busybox isn't suid
    1616        and is run by non-root (applet_main() will not be called at all)
    17         _BB_SUID_DROP: will drop suid prior to applet_main()
    18         _BB_SUID_MAYBE: neither of the above
     17        BB_SUID_DROP: will drop suid prior to applet_main()
     18        BB_SUID_MAYBE: neither of the above
     19        (every instance of BB_SUID_REQUIRE and BB_SUID_MAYBE
     20        needs to be justified in comment)
     21        NB: please update FEATURE_SUID help text whenever you add/remove
     22        BB_SUID_REQUIRE or BB_SUID_MAYBE applet.
    1923*/
    2024
     
    5862
    5963#if ENABLE_INSTALL_NO_USR
    60 # define _BB_DIR_USR_BIN _BB_DIR_BIN
    61 # define _BB_DIR_USR_SBIN _BB_DIR_SBIN
     64# define BB_DIR_USR_BIN BB_DIR_BIN
     65# define BB_DIR_USR_SBIN BB_DIR_SBIN
    6266#endif
    6367
    6468
    6569INSERT
    66 IF_TEST(APPLET_NOFORK([,  test, _BB_DIR_USR_BIN, _BB_SUID_DROP, test))
    67 IF_TEST(APPLET_NOFORK([[, test, _BB_DIR_USR_BIN, _BB_SUID_DROP, test))
    68 IF_ACPID(APPLET(acpid, _BB_DIR_SBIN, _BB_SUID_DROP))
    69 IF_ADDGROUP(APPLET(addgroup, _BB_DIR_BIN, _BB_SUID_DROP))
    70 IF_ADDUSER(APPLET(adduser, _BB_DIR_BIN, _BB_SUID_DROP))
    71 IF_ADJTIMEX(APPLET(adjtimex, _BB_DIR_SBIN, _BB_SUID_DROP))
    72 IF_AR(APPLET(ar, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    73 IF_ARP(APPLET(arp, _BB_DIR_SBIN, _BB_SUID_DROP))
    74 IF_ARPING(APPLET(arping, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    75 IF_AWK(APPLET_NOEXEC(awk, awk, _BB_DIR_USR_BIN, _BB_SUID_DROP, awk))
    76 IF_BASENAME(APPLET_NOFORK(basename, basename, _BB_DIR_USR_BIN, _BB_SUID_DROP, basename))
    77 IF_BBCONFIG(APPLET(bbconfig, _BB_DIR_BIN, _BB_SUID_DROP))
    78 IF_BEEP(APPLET(beep, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    79 IF_BLKID(APPLET(blkid, _BB_DIR_SBIN, _BB_SUID_DROP))
    80 IF_BRCTL(APPLET(brctl, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    81 IF_BZIP2(APPLET(bzip2, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    82 IF_CAL(APPLET(cal, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    83 IF_CAT(APPLET_NOFORK(cat, cat, _BB_DIR_BIN, _BB_SUID_DROP, cat))
    84 IF_CATV(APPLET(catv, _BB_DIR_BIN, _BB_SUID_DROP))
    85 IF_CHAT(APPLET(chat, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    86 IF_CHATTR(APPLET(chattr, _BB_DIR_BIN, _BB_SUID_DROP))
    87 IF_CHCON(APPLET(chcon, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    88 IF_CHGRP(APPLET_NOEXEC(chgrp, chgrp, _BB_DIR_BIN, _BB_SUID_DROP, chgrp))
    89 IF_CHMOD(APPLET_NOEXEC(chmod, chmod, _BB_DIR_BIN, _BB_SUID_DROP, chmod))
    90 IF_CHOWN(APPLET_NOEXEC(chown, chown, _BB_DIR_BIN, _BB_SUID_DROP, chown))
    91 IF_CHPASSWD(APPLET(chpasswd, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    92 IF_CHPST(APPLET(chpst, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    93 IF_CHROOT(APPLET(chroot, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    94 IF_CHRT(APPLET(chrt, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    95 IF_CHVT(APPLET(chvt, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    96 IF_CKSUM(APPLET_NOEXEC(cksum, cksum, _BB_DIR_USR_BIN, _BB_SUID_DROP, cksum))
    97 IF_CLEAR(APPLET(clear, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    98 IF_CMP(APPLET(cmp, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    99 IF_COMM(APPLET(comm, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    100 IF_CP(APPLET_NOEXEC(cp, cp, _BB_DIR_BIN, _BB_SUID_DROP, cp))
    101 IF_CPIO(APPLET(cpio, _BB_DIR_BIN, _BB_SUID_DROP))
    102 IF_CROND(APPLET(crond, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    103 IF_CRONTAB(APPLET(crontab, _BB_DIR_USR_BIN, _BB_SUID_REQUIRE))
    104 IF_CRYPTPW(APPLET(cryptpw, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    105 IF_CUT(APPLET_NOEXEC(cut, cut, _BB_DIR_USR_BIN, _BB_SUID_DROP, cut))
    106 IF_DC(APPLET(dc, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    107 IF_DD(APPLET_NOEXEC(dd, dd, _BB_DIR_BIN, _BB_SUID_DROP, dd))
    108 IF_DEALLOCVT(APPLET(deallocvt, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    109 IF_DELGROUP(APPLET_ODDNAME(delgroup, deluser, _BB_DIR_BIN, _BB_SUID_DROP, delgroup))
    110 IF_DELUSER(APPLET(deluser, _BB_DIR_BIN, _BB_SUID_DROP))
    111 IF_DEVFSD(APPLET(devfsd, _BB_DIR_SBIN, _BB_SUID_DROP))
    112 IF_DEVMEM(APPLET(devmem, _BB_DIR_SBIN, _BB_SUID_DROP))
    113 IF_DF(APPLET(df, _BB_DIR_BIN, _BB_SUID_DROP))
    114 IF_DHCPRELAY(APPLET(dhcprelay, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    115 IF_DIFF(APPLET(diff, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    116 IF_DIRNAME(APPLET_NOFORK(dirname, dirname, _BB_DIR_USR_BIN, _BB_SUID_DROP, dirname))
    117 IF_DMESG(APPLET(dmesg, _BB_DIR_BIN, _BB_SUID_DROP))
    118 IF_DNSD(APPLET(dnsd, _BB_DIR_USR_SBIN, _BB_SUID_REQUIRE))
    119 IF_HOSTNAME(APPLET_ODDNAME(dnsdomainname, hostname, _BB_DIR_BIN, _BB_SUID_DROP, dnsdomainname))
    120 IF_DOS2UNIX(APPLET_NOEXEC(dos2unix, dos2unix, _BB_DIR_USR_BIN, _BB_SUID_DROP, dos2unix))
    121 IF_DPKG(APPLET(dpkg, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    122 IF_DPKG_DEB(APPLET_ODDNAME(dpkg-deb, dpkg_deb, _BB_DIR_USR_BIN, _BB_SUID_DROP, dpkg_deb))
    123 IF_DU(APPLET(du, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    124 IF_DUMPKMAP(APPLET(dumpkmap, _BB_DIR_BIN, _BB_SUID_DROP))
    125 IF_DUMPLEASES(APPLET(dumpleases, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    126 //IF_E2FSCK(APPLET(e2fsck, _BB_DIR_SBIN, _BB_SUID_DROP))
    127 //IF_E2LABEL(APPLET_ODDNAME(e2label, tune2fs, _BB_DIR_SBIN, _BB_SUID_DROP, e2label))
    128 IF_ECHO(APPLET_NOFORK(echo, echo, _BB_DIR_BIN, _BB_SUID_DROP, echo))
    129 IF_ED(APPLET(ed, _BB_DIR_BIN, _BB_SUID_DROP))
    130 IF_EJECT(APPLET(eject, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    131 IF_ENV(APPLET_NOEXEC(env, env, _BB_DIR_USR_BIN, _BB_SUID_DROP, env))
    132 IF_ENVDIR(APPLET_ODDNAME(envdir, chpst, _BB_DIR_USR_BIN, _BB_SUID_DROP, envdir))
    133 IF_ENVUIDGID(APPLET_ODDNAME(envuidgid, chpst, _BB_DIR_USR_BIN, _BB_SUID_DROP, envuidgid))
    134 IF_ETHER_WAKE(APPLET_ODDNAME(ether-wake, ether_wake, _BB_DIR_USR_BIN, _BB_SUID_DROP, ether_wake))
    135 IF_EXPAND(APPLET(expand, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    136 IF_EXPR(APPLET(expr, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    137 IF_FAKEIDENTD(APPLET(fakeidentd, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    138 IF_FALSE(APPLET_NOFORK(false, false, _BB_DIR_BIN, _BB_SUID_DROP, false))
    139 IF_FBSET(APPLET(fbset, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    140 IF_FBSPLASH(APPLET(fbsplash, _BB_DIR_SBIN, _BB_SUID_DROP))
    141 IF_FDFLUSH(APPLET_ODDNAME(fdflush, freeramdisk, _BB_DIR_BIN, _BB_SUID_DROP, fdflush))
    142 IF_FDFORMAT(APPLET(fdformat, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    143 IF_FDISK(APPLET(fdisk, _BB_DIR_SBIN, _BB_SUID_DROP))
    144 IF_FGCONSOLE(APPLET(fgconsole, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    145 IF_FINDFS(APPLET(findfs, _BB_DIR_SBIN, _BB_SUID_MAYBE))
    146 IF_FLASH_ERASEALL(APPLET(flash_eraseall, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    147 IF_FLASH_LOCK(APPLET_ODDNAME(flash_lock, flash_lock_unlock, _BB_DIR_USR_SBIN, _BB_SUID_DROP, flash_lock))
    148 IF_FLASH_UNLOCK(APPLET_ODDNAME(flash_unlock, flash_lock_unlock, _BB_DIR_USR_SBIN, _BB_SUID_DROP, flash_unlock))
    149 IF_FLASHCP(APPLET(flashcp, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    150 IF_FLOCK(APPLET(flock, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    151 IF_FOLD(APPLET_NOEXEC(fold, fold, _BB_DIR_USR_BIN, _BB_SUID_DROP, fold))
    152 IF_FREE(APPLET(free, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    153 IF_FREERAMDISK(APPLET(freeramdisk, _BB_DIR_SBIN, _BB_SUID_DROP))
    154 IF_FSCK(APPLET(fsck, _BB_DIR_SBIN, _BB_SUID_DROP))
    155 //IF_E2FSCK(APPLET_ODDNAME(fsck.ext2, e2fsck, _BB_DIR_SBIN, _BB_SUID_DROP, fsck_ext2))
    156 //IF_E2FSCK(APPLET_ODDNAME(fsck.ext3, e2fsck, _BB_DIR_SBIN, _BB_SUID_DROP, fsck_ext3))
    157 IF_FSCK_MINIX(APPLET_ODDNAME(fsck.minix, fsck_minix, _BB_DIR_SBIN, _BB_SUID_DROP, fsck_minix))
    158 IF_FSYNC(APPLET_NOFORK(fsync, fsync, _BB_DIR_BIN, _BB_SUID_DROP, fsync))
    159 IF_FTPD(APPLET(ftpd, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    160 IF_FTPGET(APPLET_ODDNAME(ftpget, ftpgetput, _BB_DIR_USR_BIN, _BB_SUID_DROP, ftpget))
    161 IF_FTPPUT(APPLET_ODDNAME(ftpput, ftpgetput, _BB_DIR_USR_BIN, _BB_SUID_DROP, ftpput))
    162 IF_FUSER(APPLET(fuser, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    163 IF_GETENFORCE(APPLET(getenforce, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    164 IF_GETOPT(APPLET(getopt, _BB_DIR_BIN, _BB_SUID_DROP))
    165 IF_GETSEBOOL(APPLET(getsebool, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    166 IF_GETTY(APPLET(getty, _BB_DIR_SBIN, _BB_SUID_DROP))
    167 IF_GUNZIP(APPLET(gunzip, _BB_DIR_BIN, _BB_SUID_DROP))
    168 IF_GZIP(APPLET(gzip, _BB_DIR_BIN, _BB_SUID_DROP))
    169 IF_HD(APPLET_NOEXEC(hd, hexdump, _BB_DIR_USR_BIN, _BB_SUID_DROP, hd))
    170 IF_HDPARM(APPLET(hdparm, _BB_DIR_SBIN, _BB_SUID_DROP))
    171 IF_HEAD(APPLET_NOEXEC(head, head, _BB_DIR_USR_BIN, _BB_SUID_DROP, head))
    172 IF_HEXDUMP(APPLET_NOEXEC(hexdump, hexdump, _BB_DIR_USR_BIN, _BB_SUID_DROP, hexdump))
    173 IF_HOSTID(APPLET_NOFORK(hostid, hostid, _BB_DIR_USR_BIN, _BB_SUID_DROP, hostid))
    174 IF_HOSTNAME(APPLET(hostname, _BB_DIR_BIN, _BB_SUID_DROP))
    175 IF_HTTPD(APPLET(httpd, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    176 IF_HWCLOCK(APPLET(hwclock, _BB_DIR_SBIN, _BB_SUID_DROP))
    177 IF_ID(APPLET_NOEXEC(id, id, _BB_DIR_USR_BIN, _BB_SUID_DROP, id))
    178 IF_IFCONFIG(APPLET(ifconfig, _BB_DIR_SBIN, _BB_SUID_DROP))
    179 IF_IFUPDOWN(APPLET_ODDNAME(ifdown, ifupdown, _BB_DIR_SBIN, _BB_SUID_DROP, ifdown))
    180 IF_IFENSLAVE(APPLET(ifenslave, _BB_DIR_SBIN, _BB_SUID_DROP))
    181 IF_IFPLUGD(APPLET(ifplugd, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    182 IF_IFUPDOWN(APPLET_ODDNAME(ifup, ifupdown, _BB_DIR_SBIN, _BB_SUID_DROP, ifup))
    183 IF_INETD(APPLET(inetd, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    184 IF_INOTIFYD(APPLET(inotifyd, _BB_DIR_SBIN, _BB_SUID_DROP))
    185 IF_INSTALL(APPLET(install, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    186 IF_IONICE(APPLET(ionice, _BB_DIR_BIN, _BB_SUID_DROP))
     70IF_TEST(APPLET_NOFORK([,  test, BB_DIR_USR_BIN, BB_SUID_DROP, test))
     71IF_TEST(APPLET_NOFORK([[, test, BB_DIR_USR_BIN, BB_SUID_DROP, test))
     72IF_ACPID(APPLET(acpid, BB_DIR_SBIN, BB_SUID_DROP))
     73IF_ADDGROUP(APPLET(addgroup, BB_DIR_USR_SBIN, BB_SUID_DROP))
     74IF_ADDUSER(APPLET(adduser, BB_DIR_USR_SBIN, BB_SUID_DROP))
     75IF_ADJTIMEX(APPLET(adjtimex, BB_DIR_SBIN, BB_SUID_DROP))
     76IF_AR(APPLET(ar, BB_DIR_USR_BIN, BB_SUID_DROP))
     77IF_ARP(APPLET(arp, BB_DIR_SBIN, BB_SUID_DROP))
     78IF_ARPING(APPLET(arping, BB_DIR_USR_SBIN, BB_SUID_DROP))
     79IF_AWK(APPLET_NOEXEC(awk, awk, BB_DIR_USR_BIN, BB_SUID_DROP, awk))
     80IF_BASENAME(APPLET_NOFORK(basename, basename, BB_DIR_USR_BIN, BB_SUID_DROP, basename))
     81IF_BBCONFIG(APPLET(bbconfig, BB_DIR_BIN, BB_SUID_DROP))
     82IF_BEEP(APPLET(beep, BB_DIR_USR_BIN, BB_SUID_DROP))
     83IF_BLKID(APPLET(blkid, BB_DIR_SBIN, BB_SUID_DROP))
     84IF_BRCTL(APPLET(brctl, BB_DIR_USR_SBIN, BB_SUID_DROP))
     85IF_BZIP2(APPLET(bzip2, BB_DIR_USR_BIN, BB_SUID_DROP))
     86IF_CAL(APPLET(cal, BB_DIR_USR_BIN, BB_SUID_DROP))
     87IF_CAT(APPLET_NOFORK(cat, cat, BB_DIR_BIN, BB_SUID_DROP, cat))
     88IF_CATV(APPLET(catv, BB_DIR_BIN, BB_SUID_DROP))
     89IF_CHAT(APPLET(chat, BB_DIR_USR_SBIN, BB_SUID_DROP))
     90IF_CHATTR(APPLET(chattr, BB_DIR_BIN, BB_SUID_DROP))
     91IF_CHCON(APPLET(chcon, BB_DIR_USR_BIN, BB_SUID_DROP))
     92IF_CHGRP(APPLET_NOEXEC(chgrp, chgrp, BB_DIR_BIN, BB_SUID_DROP, chgrp))
     93IF_CHMOD(APPLET_NOEXEC(chmod, chmod, BB_DIR_BIN, BB_SUID_DROP, chmod))
     94IF_CHOWN(APPLET_NOEXEC(chown, chown, BB_DIR_BIN, BB_SUID_DROP, chown))
     95IF_CHPASSWD(APPLET(chpasswd, BB_DIR_USR_SBIN, BB_SUID_DROP))
     96IF_CHPST(APPLET(chpst, BB_DIR_USR_BIN, BB_SUID_DROP))
     97IF_CHROOT(APPLET(chroot, BB_DIR_USR_SBIN, BB_SUID_DROP))
     98IF_CHRT(APPLET(chrt, BB_DIR_USR_BIN, BB_SUID_DROP))
     99IF_CHVT(APPLET(chvt, BB_DIR_USR_BIN, BB_SUID_DROP))
     100IF_CKSUM(APPLET_NOEXEC(cksum, cksum, BB_DIR_USR_BIN, BB_SUID_DROP, cksum))
     101IF_CLEAR(APPLET(clear, BB_DIR_USR_BIN, BB_SUID_DROP))
     102IF_CMP(APPLET(cmp, BB_DIR_USR_BIN, BB_SUID_DROP))
     103IF_COMM(APPLET(comm, BB_DIR_USR_BIN, BB_SUID_DROP))
     104IF_CP(APPLET_NOEXEC(cp, cp, BB_DIR_BIN, BB_SUID_DROP, cp))
     105IF_CPIO(APPLET(cpio, BB_DIR_BIN, BB_SUID_DROP))
     106IF_CROND(APPLET(crond, BB_DIR_USR_SBIN, BB_SUID_DROP))
     107/* Needs to be run by root or be suid root - needs to change /var/spool/cron* files: */
     108IF_CRONTAB(APPLET(crontab, BB_DIR_USR_BIN, BB_SUID_REQUIRE))
     109IF_CRYPTPW(APPLET(cryptpw, BB_DIR_USR_BIN, BB_SUID_DROP))
     110IF_CUT(APPLET_NOEXEC(cut, cut, BB_DIR_USR_BIN, BB_SUID_DROP, cut))
     111IF_DC(APPLET(dc, BB_DIR_USR_BIN, BB_SUID_DROP))
     112IF_DD(APPLET_NOEXEC(dd, dd, BB_DIR_BIN, BB_SUID_DROP, dd))
     113IF_DEALLOCVT(APPLET(deallocvt, BB_DIR_USR_BIN, BB_SUID_DROP))
     114IF_DELGROUP(APPLET_ODDNAME(delgroup, deluser, BB_DIR_USR_SBIN, BB_SUID_DROP, delgroup))
     115IF_DELUSER(APPLET(deluser, BB_DIR_USR_SBIN, BB_SUID_DROP))
     116IF_DEVFSD(APPLET(devfsd, BB_DIR_SBIN, BB_SUID_DROP))
     117IF_DEVMEM(APPLET(devmem, BB_DIR_SBIN, BB_SUID_DROP))
     118IF_DF(APPLET(df, BB_DIR_BIN, BB_SUID_DROP))
     119IF_DHCPRELAY(APPLET(dhcprelay, BB_DIR_USR_SBIN, BB_SUID_DROP))
     120IF_DIFF(APPLET(diff, BB_DIR_USR_BIN, BB_SUID_DROP))
     121IF_DIRNAME(APPLET_NOFORK(dirname, dirname, BB_DIR_USR_BIN, BB_SUID_DROP, dirname))
     122IF_DMESG(APPLET(dmesg, BB_DIR_BIN, BB_SUID_DROP))
     123IF_DNSD(APPLET(dnsd, BB_DIR_USR_SBIN, BB_SUID_DROP))
     124IF_HOSTNAME(APPLET_ODDNAME(dnsdomainname, hostname, BB_DIR_BIN, BB_SUID_DROP, dnsdomainname))
     125IF_DOS2UNIX(APPLET_NOEXEC(dos2unix, dos2unix, BB_DIR_USR_BIN, BB_SUID_DROP, dos2unix))
     126IF_DPKG(APPLET(dpkg, BB_DIR_USR_BIN, BB_SUID_DROP))
     127IF_DPKG_DEB(APPLET_ODDNAME(dpkg-deb, dpkg_deb, BB_DIR_USR_BIN, BB_SUID_DROP, dpkg_deb))
     128IF_DU(APPLET(du, BB_DIR_USR_BIN, BB_SUID_DROP))
     129IF_DUMPKMAP(APPLET(dumpkmap, BB_DIR_BIN, BB_SUID_DROP))
     130IF_DUMPLEASES(APPLET(dumpleases, BB_DIR_USR_BIN, BB_SUID_DROP))
     131//IF_E2FSCK(APPLET(e2fsck, BB_DIR_SBIN, BB_SUID_DROP))
     132//IF_E2LABEL(APPLET_ODDNAME(e2label, tune2fs, BB_DIR_SBIN, BB_SUID_DROP, e2label))
     133IF_ECHO(APPLET_NOFORK(echo, echo, BB_DIR_BIN, BB_SUID_DROP, echo))
     134IF_ED(APPLET(ed, BB_DIR_BIN, BB_SUID_DROP))
     135IF_EJECT(APPLET(eject, BB_DIR_USR_BIN, BB_SUID_DROP))
     136IF_ENV(APPLET_NOEXEC(env, env, BB_DIR_USR_BIN, BB_SUID_DROP, env))
     137IF_ENVDIR(APPLET_ODDNAME(envdir, chpst, BB_DIR_USR_BIN, BB_SUID_DROP, envdir))
     138IF_ENVUIDGID(APPLET_ODDNAME(envuidgid, chpst, BB_DIR_USR_BIN, BB_SUID_DROP, envuidgid))
     139IF_ETHER_WAKE(APPLET_ODDNAME(ether-wake, ether_wake, BB_DIR_USR_SBIN, BB_SUID_DROP, ether_wake))
     140IF_EXPAND(APPLET(expand, BB_DIR_USR_BIN, BB_SUID_DROP))
     141IF_EXPR(APPLET(expr, BB_DIR_USR_BIN, BB_SUID_DROP))
     142IF_FAKEIDENTD(APPLET(fakeidentd, BB_DIR_USR_SBIN, BB_SUID_DROP))
     143IF_FALSE(APPLET_NOFORK(false, false, BB_DIR_BIN, BB_SUID_DROP, false))
     144IF_FBSET(APPLET(fbset, BB_DIR_USR_SBIN, BB_SUID_DROP))
     145IF_FBSPLASH(APPLET(fbsplash, BB_DIR_SBIN, BB_SUID_DROP))
     146IF_FDFLUSH(APPLET_ODDNAME(fdflush, freeramdisk, BB_DIR_BIN, BB_SUID_DROP, fdflush))
     147IF_FDFORMAT(APPLET(fdformat, BB_DIR_USR_SBIN, BB_SUID_DROP))
     148IF_FDISK(APPLET(fdisk, BB_DIR_SBIN, BB_SUID_DROP))
     149IF_FGCONSOLE(APPLET(fgconsole, BB_DIR_USR_BIN, BB_SUID_DROP))
     150/* Benefits from suid root: better access to /dev/BLOCKDEVs: */
     151IF_FINDFS(APPLET(findfs, BB_DIR_SBIN, BB_SUID_MAYBE))
     152IF_FLASH_ERASEALL(APPLET(flash_eraseall, BB_DIR_USR_SBIN, BB_SUID_DROP))
     153IF_FLASH_LOCK(APPLET_ODDNAME(flash_lock, flash_lock_unlock, BB_DIR_USR_SBIN, BB_SUID_DROP, flash_lock))
     154IF_FLASH_UNLOCK(APPLET_ODDNAME(flash_unlock, flash_lock_unlock, BB_DIR_USR_SBIN, BB_SUID_DROP, flash_unlock))
     155IF_FLASHCP(APPLET(flashcp, BB_DIR_USR_SBIN, BB_SUID_DROP))
     156IF_FLOCK(APPLET(flock, BB_DIR_USR_BIN, BB_SUID_DROP))
     157IF_FOLD(APPLET_NOEXEC(fold, fold, BB_DIR_USR_BIN, BB_SUID_DROP, fold))
     158IF_FREE(APPLET(free, BB_DIR_USR_BIN, BB_SUID_DROP))
     159IF_FREERAMDISK(APPLET(freeramdisk, BB_DIR_SBIN, BB_SUID_DROP))
     160IF_FSCK(APPLET(fsck, BB_DIR_SBIN, BB_SUID_DROP))
     161//IF_E2FSCK(APPLET_ODDNAME(fsck.ext2, e2fsck, BB_DIR_SBIN, BB_SUID_DROP, fsck_ext2))
     162//IF_E2FSCK(APPLET_ODDNAME(fsck.ext3, e2fsck, BB_DIR_SBIN, BB_SUID_DROP, fsck_ext3))
     163IF_FSCK_MINIX(APPLET_ODDNAME(fsck.minix, fsck_minix, BB_DIR_SBIN, BB_SUID_DROP, fsck_minix))
     164IF_FSYNC(APPLET_NOFORK(fsync, fsync, BB_DIR_BIN, BB_SUID_DROP, fsync))
     165IF_FTPD(APPLET(ftpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
     166IF_FTPGET(APPLET_ODDNAME(ftpget, ftpgetput, BB_DIR_USR_BIN, BB_SUID_DROP, ftpget))
     167IF_FTPPUT(APPLET_ODDNAME(ftpput, ftpgetput, BB_DIR_USR_BIN, BB_SUID_DROP, ftpput))
     168IF_FUSER(APPLET(fuser, BB_DIR_USR_BIN, BB_SUID_DROP))
     169IF_GETENFORCE(APPLET(getenforce, BB_DIR_USR_SBIN, BB_SUID_DROP))
     170IF_GETOPT(APPLET(getopt, BB_DIR_BIN, BB_SUID_DROP))
     171IF_GETSEBOOL(APPLET(getsebool, BB_DIR_USR_SBIN, BB_SUID_DROP))
     172IF_GETTY(APPLET(getty, BB_DIR_SBIN, BB_SUID_DROP))
     173IF_GUNZIP(APPLET(gunzip, BB_DIR_BIN, BB_SUID_DROP))
     174IF_GZIP(APPLET(gzip, BB_DIR_BIN, BB_SUID_DROP))
     175IF_HD(APPLET_NOEXEC(hd, hexdump, BB_DIR_USR_BIN, BB_SUID_DROP, hd))
     176IF_HDPARM(APPLET(hdparm, BB_DIR_SBIN, BB_SUID_DROP))
     177IF_HEAD(APPLET_NOEXEC(head, head, BB_DIR_USR_BIN, BB_SUID_DROP, head))
     178IF_HEXDUMP(APPLET_NOEXEC(hexdump, hexdump, BB_DIR_USR_BIN, BB_SUID_DROP, hexdump))
     179IF_HOSTNAME(APPLET(hostname, BB_DIR_BIN, BB_SUID_DROP))
     180IF_HTTPD(APPLET(httpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
     181IF_HWCLOCK(APPLET(hwclock, BB_DIR_SBIN, BB_SUID_DROP))
     182IF_IFCONFIG(APPLET(ifconfig, BB_DIR_SBIN, BB_SUID_DROP))
     183IF_IFUPDOWN(APPLET_ODDNAME(ifdown, ifupdown, BB_DIR_SBIN, BB_SUID_DROP, ifdown))
     184IF_IFENSLAVE(APPLET(ifenslave, BB_DIR_SBIN, BB_SUID_DROP))
     185IF_IFPLUGD(APPLET(ifplugd, BB_DIR_USR_SBIN, BB_SUID_DROP))
     186IF_IFUPDOWN(APPLET_ODDNAME(ifup, ifupdown, BB_DIR_SBIN, BB_SUID_DROP, ifup))
     187IF_INETD(APPLET(inetd, BB_DIR_USR_SBIN, BB_SUID_DROP))
     188IF_INOTIFYD(APPLET(inotifyd, BB_DIR_SBIN, BB_SUID_DROP))
     189IF_INSTALL(APPLET(install, BB_DIR_USR_BIN, BB_SUID_DROP))
     190IF_IONICE(APPLET(ionice, BB_DIR_BIN, BB_SUID_DROP))
    187191#if ENABLE_FEATURE_IP_ADDRESS \
    188192 || ENABLE_FEATURE_IP_ROUTE \
     
    190194 || ENABLE_FEATURE_IP_TUNNEL \
    191195 || ENABLE_FEATURE_IP_RULE
    192 IF_IP(APPLET(ip, _BB_DIR_BIN, _BB_SUID_DROP))
     196IF_IP(APPLET(ip, BB_DIR_SBIN, BB_SUID_DROP))
    193197#endif
    194 IF_IPADDR(APPLET(ipaddr, _BB_DIR_BIN, _BB_SUID_DROP))
    195 IF_IPCALC(APPLET(ipcalc, _BB_DIR_BIN, _BB_SUID_DROP))
    196 IF_IPCRM(APPLET(ipcrm, _BB_DIR_USR_BIN, _BB_SUID_REQUIRE))
    197 IF_IPCS(APPLET(ipcs, _BB_DIR_USR_BIN, _BB_SUID_REQUIRE))
    198 IF_IPLINK(APPLET(iplink, _BB_DIR_BIN, _BB_SUID_DROP))
    199 IF_IPROUTE(APPLET(iproute, _BB_DIR_BIN, _BB_SUID_DROP))
    200 IF_IPRULE(APPLET(iprule, _BB_DIR_BIN, _BB_SUID_DROP))
    201 IF_IPTUNNEL(APPLET(iptunnel, _BB_DIR_BIN, _BB_SUID_DROP))
    202 IF_KBD_MODE(APPLET(kbd_mode, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    203 IF_KILL(APPLET(kill, _BB_DIR_BIN, _BB_SUID_DROP))
    204 IF_KILLALL(APPLET_ODDNAME(killall, kill, _BB_DIR_USR_BIN, _BB_SUID_DROP, killall))
    205 IF_KILLALL5(APPLET_ODDNAME(killall5, kill, _BB_DIR_USR_BIN, _BB_SUID_DROP, killall5))
    206 IF_KLOGD(APPLET(klogd, _BB_DIR_SBIN, _BB_SUID_DROP))
    207 IF_LAST(APPLET(last, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    208 IF_LENGTH(APPLET_NOFORK(length, length, _BB_DIR_USR_BIN, _BB_SUID_DROP, length))
    209 IF_LESS(APPLET(less, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    210 IF_SETARCH(APPLET_ODDNAME(linux32, setarch, _BB_DIR_BIN, _BB_SUID_DROP, linux32))
    211 IF_SETARCH(APPLET_ODDNAME(linux64, setarch, _BB_DIR_BIN, _BB_SUID_DROP, linux64))
    212 IF_LN(APPLET_NOEXEC(ln, ln, _BB_DIR_BIN, _BB_SUID_DROP, ln))
    213 IF_LOAD_POLICY(APPLET(load_policy, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    214 IF_LOADFONT(APPLET(loadfont, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    215 IF_LOADKMAP(APPLET(loadkmap, _BB_DIR_SBIN, _BB_SUID_DROP))
    216 IF_LOGGER(APPLET(logger, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    217 IF_LOGIN(APPLET(login, _BB_DIR_BIN, _BB_SUID_REQUIRE))
    218 IF_LOGNAME(APPLET_NOFORK(logname, logname, _BB_DIR_USR_BIN, _BB_SUID_DROP, logname))
    219 IF_LOGREAD(APPLET(logread, _BB_DIR_SBIN, _BB_SUID_DROP))
    220 IF_LOSETUP(APPLET(losetup, _BB_DIR_SBIN, _BB_SUID_DROP))
    221 IF_LPD(APPLET(lpd, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    222 IF_LPQ(APPLET_ODDNAME(lpq, lpqr, _BB_DIR_USR_BIN, _BB_SUID_DROP, lpq))
    223 IF_LPR(APPLET_ODDNAME(lpr, lpqr, _BB_DIR_USR_BIN, _BB_SUID_DROP, lpr))
    224 IF_LS(APPLET_NOEXEC(ls, ls, _BB_DIR_BIN, _BB_SUID_DROP, ls))
    225 IF_LSATTR(APPLET(lsattr, _BB_DIR_BIN, _BB_SUID_DROP))
    226 IF_LSPCI(APPLET(lspci, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    227 IF_LSUSB(APPLET(lsusb, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    228 IF_UNLZMA(APPLET_ODDNAME(lzcat, unlzma, _BB_DIR_USR_BIN, _BB_SUID_DROP, lzcat))
    229 IF_LZMA(APPLET_ODDNAME(lzma, unlzma, _BB_DIR_USR_BIN, _BB_SUID_DROP, lzma))
    230 IF_LZOP(APPLET(lzop, _BB_DIR_BIN, _BB_SUID_DROP))
    231 IF_LZOP(APPLET_ODDNAME(lzopcat, lzop, _BB_DIR_USR_BIN, _BB_SUID_DROP, lzopcat))
    232 IF_MAKEDEVS(APPLET(makedevs, _BB_DIR_SBIN, _BB_SUID_DROP))
    233 IF_MAKEMIME(APPLET(makemime, _BB_DIR_BIN, _BB_SUID_DROP))
    234 IF_MAN(APPLET(man, _BB_DIR_SBIN, _BB_SUID_DROP))
    235 IF_MATCHPATHCON(APPLET(matchpathcon, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    236 IF_MD5SUM(APPLET_NOEXEC(md5sum, md5_sha1_sum, _BB_DIR_USR_BIN, _BB_SUID_DROP, md5sum))
    237 IF_MDEV(APPLET(mdev, _BB_DIR_SBIN, _BB_SUID_DROP))
    238 IF_MICROCOM(APPLET(microcom, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    239 IF_MKDIR(APPLET_NOFORK(mkdir, mkdir, _BB_DIR_BIN, _BB_SUID_DROP, mkdir))
    240 IF_MKFS_VFAT(APPLET_ODDNAME(mkdosfs, mkfs_vfat, _BB_DIR_SBIN, _BB_SUID_DROP, mkfs_vfat))
    241 IF_MKFS_EXT2(APPLET_ODDNAME(mke2fs, mkfs_ext2, _BB_DIR_SBIN, _BB_SUID_DROP, mkfs_ext2))
    242 IF_MKFIFO(APPLET_NOEXEC(mkfifo, mkfifo, _BB_DIR_USR_BIN, _BB_SUID_DROP, mkfifo))
    243 IF_MKFS_EXT2(APPLET_ODDNAME(mkfs.ext2, mkfs_ext2, _BB_DIR_SBIN, _BB_SUID_DROP, mkfs_ext2))
    244 //IF_MKE2FS(APPLET_ODDNAME(mkfs.ext3, mke2fs, _BB_DIR_SBIN, _BB_SUID_DROP, mkfs_ext3))
    245 IF_MKFS_MINIX(APPLET_ODDNAME(mkfs.minix, mkfs_minix, _BB_DIR_SBIN, _BB_SUID_DROP, mkfs_minix))
    246 IF_MKFS_REISER(APPLET_ODDNAME(mkfs.reiser, mkfs_reiser, _BB_DIR_SBIN, _BB_SUID_DROP, mkfs_reiser))
    247 IF_MKFS_VFAT(APPLET_ODDNAME(mkfs.vfat, mkfs_vfat, _BB_DIR_SBIN, _BB_SUID_DROP, mkfs_vfat))
    248 IF_MKNOD(APPLET_NOEXEC(mknod, mknod, _BB_DIR_BIN, _BB_SUID_DROP, mknod))
    249 IF_CRYPTPW(APPLET_ODDNAME(mkpasswd, cryptpw, _BB_DIR_USR_BIN, _BB_SUID_DROP, mkpasswd))
    250 IF_MKSWAP(APPLET(mkswap, _BB_DIR_SBIN, _BB_SUID_DROP))
    251 IF_MKTEMP(APPLET(mktemp, _BB_DIR_BIN, _BB_SUID_DROP))
    252 IF_MORE(APPLET(more, _BB_DIR_BIN, _BB_SUID_DROP))
    253 IF_MOUNT(APPLET(mount, _BB_DIR_BIN, IF_DESKTOP(_BB_SUID_MAYBE) IF_NOT_DESKTOP(_BB_SUID_DROP)))
    254 IF_MOUNTPOINT(APPLET(mountpoint, _BB_DIR_BIN, _BB_SUID_DROP))
    255 IF_MT(APPLET(mt, _BB_DIR_BIN, _BB_SUID_DROP))
    256 IF_MV(APPLET(mv, _BB_DIR_BIN, _BB_SUID_DROP))
    257 IF_NAMEIF(APPLET(nameif, _BB_DIR_SBIN, _BB_SUID_DROP))
    258 IF_NC(APPLET(nc, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    259 IF_NETSTAT(APPLET(netstat, _BB_DIR_BIN, _BB_SUID_DROP))
    260 IF_NICE(APPLET(nice, _BB_DIR_BIN, _BB_SUID_DROP))
    261 IF_NMETER(APPLET(nmeter, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    262 IF_NOHUP(APPLET(nohup, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    263 IF_NSLOOKUP(APPLET(nslookup, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    264 IF_NTPD(APPLET(ntpd, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    265 IF_OD(APPLET(od, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    266 IF_OPENVT(APPLET(openvt, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    267 //IF_PARSE(APPLET(parse, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    268 IF_PASSWD(APPLET(passwd, _BB_DIR_USR_BIN, _BB_SUID_REQUIRE))
    269 IF_PGREP(APPLET(pgrep, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    270 IF_PIDOF(APPLET(pidof, _BB_DIR_BIN, _BB_SUID_DROP))
    271 IF_PING(APPLET(ping, _BB_DIR_BIN, _BB_SUID_MAYBE))
    272 IF_PING6(APPLET(ping6, _BB_DIR_BIN, _BB_SUID_MAYBE))
    273 IF_PIPE_PROGRESS(APPLET(pipe_progress, _BB_DIR_BIN, _BB_SUID_DROP))
    274 IF_PIVOT_ROOT(APPLET(pivot_root, _BB_DIR_SBIN, _BB_SUID_DROP))
    275 IF_PKILL(APPLET_ODDNAME(pkill, pgrep, _BB_DIR_USR_BIN, _BB_SUID_DROP, pkill))
    276 IF_POPMAILDIR(APPLET(popmaildir, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    277 IF_PRINTENV(APPLET_NOFORK(printenv, printenv, _BB_DIR_BIN, _BB_SUID_DROP, printenv))
    278 IF_PRINTF(APPLET_NOFORK(printf, printf, _BB_DIR_USR_BIN, _BB_SUID_DROP, printf))
    279 IF_PS(APPLET(ps, _BB_DIR_BIN, _BB_SUID_DROP))
    280 IF_PSCAN(APPLET(pscan, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    281 IF_PWD(APPLET_NOFORK(pwd, pwd, _BB_DIR_BIN, _BB_SUID_DROP, pwd))
    282 IF_RAIDAUTORUN(APPLET(raidautorun, _BB_DIR_SBIN, _BB_SUID_DROP))
    283 IF_RDATE(APPLET(rdate, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    284 IF_RDEV(APPLET(rdev, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    285 IF_READAHEAD(APPLET(readahead, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    286 IF_READLINK(APPLET(readlink, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    287 IF_READPROFILE(APPLET(readprofile, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    288 IF_REALPATH(APPLET(realpath, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    289 IF_REFORMIME(APPLET(reformime, _BB_DIR_BIN, _BB_SUID_DROP))
    290 IF_RENICE(APPLET(renice, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    291 IF_RESET(APPLET(reset, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    292 IF_RESIZE(APPLET(resize, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    293 IF_RESTORECON(APPLET_ODDNAME(restorecon, setfiles, _BB_DIR_SBIN, _BB_SUID_DROP, restorecon))
    294 IF_RFKILL(APPLET(rfkill, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    295 IF_RM(APPLET_NOFORK(rm, rm, _BB_DIR_BIN, _BB_SUID_DROP, rm))
    296 IF_RMDIR(APPLET_NOFORK(rmdir, rmdir, _BB_DIR_BIN, _BB_SUID_DROP, rmdir))
    297 IF_ROUTE(APPLET(route, _BB_DIR_SBIN, _BB_SUID_DROP))
    298 IF_RPM(APPLET(rpm, _BB_DIR_BIN, _BB_SUID_DROP))
    299 IF_RPM2CPIO(APPLET(rpm2cpio, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    300 IF_RTCWAKE(APPLET(rtcwake, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    301 IF_RUN_PARTS(APPLET_ODDNAME(run-parts, run_parts, _BB_DIR_BIN, _BB_SUID_DROP, run_parts))
    302 IF_RUNCON(APPLET(runcon, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    303 IF_RUNLEVEL(APPLET(runlevel, _BB_DIR_SBIN, _BB_SUID_DROP))
    304 IF_RUNSV(APPLET(runsv, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    305 IF_RUNSVDIR(APPLET(runsvdir, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    306 IF_RX(APPLET(rx, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    307 IF_SCRIPT(APPLET(script, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    308 IF_SCRIPTREPLAY(APPLET(scriptreplay, _BB_DIR_BIN, _BB_SUID_DROP))
    309 IF_SED(APPLET(sed, _BB_DIR_BIN, _BB_SUID_DROP))
    310 IF_SELINUXENABLED(APPLET(selinuxenabled, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    311 IF_SENDMAIL(APPLET(sendmail, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    312 IF_SEQ(APPLET_NOFORK(seq, seq, _BB_DIR_USR_BIN, _BB_SUID_DROP, seq))
    313 IF_SESTATUS(APPLET(sestatus, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    314 IF_SETARCH(APPLET(setarch, _BB_DIR_BIN, _BB_SUID_DROP))
    315 IF_SETCONSOLE(APPLET(setconsole, _BB_DIR_SBIN, _BB_SUID_DROP))
    316 IF_SETENFORCE(APPLET(setenforce, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    317 IF_SETFILES(APPLET(setfiles, _BB_DIR_SBIN, _BB_SUID_DROP))
    318 IF_SETFONT(APPLET(setfont, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    319 IF_SETKEYCODES(APPLET(setkeycodes, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    320 IF_SETLOGCONS(APPLET(setlogcons, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    321 IF_SETSEBOOL(APPLET(setsebool, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    322 IF_SETSID(APPLET(setsid, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    323 IF_SETUIDGID(APPLET_ODDNAME(setuidgid, chpst, _BB_DIR_USR_BIN, _BB_SUID_DROP, setuidgid))
    324 IF_SHA1SUM(APPLET_NOEXEC(sha1sum, md5_sha1_sum, _BB_DIR_USR_BIN, _BB_SUID_DROP, sha1sum))
    325 IF_SHA256SUM(APPLET_NOEXEC(sha256sum, md5_sha1_sum, _BB_DIR_USR_BIN, _BB_SUID_DROP, sha256sum))
    326 IF_SHA512SUM(APPLET_NOEXEC(sha512sum, md5_sha1_sum, _BB_DIR_USR_BIN, _BB_SUID_DROP, sha512sum))
    327 IF_SHOWKEY(APPLET(showkey, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    328 IF_SLATTACH(APPLET(slattach, _BB_DIR_SBIN, _BB_SUID_DROP))
    329 /* Do not make this applet NOFORK. It breaks ^C-ing of pauses in shells */
    330 IF_SLEEP(APPLET(sleep, _BB_DIR_BIN, _BB_SUID_DROP))
    331 IF_SOFTLIMIT(APPLET_ODDNAME(softlimit, chpst, _BB_DIR_USR_BIN, _BB_SUID_DROP, softlimit))
    332 IF_SORT(APPLET_NOEXEC(sort, sort, _BB_DIR_USR_BIN, _BB_SUID_DROP, sort))
    333 IF_SPLIT(APPLET(split, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    334 IF_START_STOP_DAEMON(APPLET_ODDNAME(start-stop-daemon, start_stop_daemon, _BB_DIR_SBIN, _BB_SUID_DROP, start_stop_daemon))
    335 IF_STAT(APPLET(stat, _BB_DIR_BIN, _BB_SUID_DROP))
    336 IF_STRINGS(APPLET(strings, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    337 IF_STTY(APPLET(stty, _BB_DIR_BIN, _BB_SUID_DROP))
    338 IF_SU(APPLET(su, _BB_DIR_BIN, _BB_SUID_REQUIRE))
    339 IF_SULOGIN(APPLET(sulogin, _BB_DIR_SBIN, _BB_SUID_DROP))
    340 IF_SUM(APPLET(sum, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    341 IF_SV(APPLET(sv, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    342 IF_SVLOGD(APPLET(svlogd, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    343 IF_SWAPONOFF(APPLET_ODDNAME(swapoff, swap_on_off, _BB_DIR_SBIN, _BB_SUID_DROP, swapoff))
    344 IF_SWAPONOFF(APPLET_ODDNAME(swapon, swap_on_off, _BB_DIR_SBIN, _BB_SUID_DROP, swapon))
    345 IF_SWITCH_ROOT(APPLET(switch_root, _BB_DIR_SBIN, _BB_SUID_DROP))
    346 IF_SYNC(APPLET_NOFORK(sync, sync, _BB_DIR_BIN, _BB_SUID_DROP, sync))
    347 IF_BB_SYSCTL(APPLET(sysctl, _BB_DIR_SBIN, _BB_SUID_DROP))
    348 IF_SYSLOGD(APPLET(syslogd, _BB_DIR_SBIN, _BB_SUID_DROP))
    349 IF_TAC(APPLET_NOEXEC(tac, tac, _BB_DIR_USR_BIN, _BB_SUID_DROP, tac))
    350 IF_TAIL(APPLET(tail, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    351 IF_TAR(APPLET(tar, _BB_DIR_BIN, _BB_SUID_DROP))
    352 IF_TASKSET(APPLET(taskset, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    353 /* IF_TC(APPLET(tc, _BB_DIR_SBIN, _BB_SUID_DROP)) */
    354 IF_TCPSVD(APPLET_ODDNAME(tcpsvd, tcpudpsvd, _BB_DIR_USR_BIN, _BB_SUID_DROP, tcpsvd))
    355 IF_TEE(APPLET(tee, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    356 IF_TELNET(APPLET(telnet, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    357 IF_TELNETD(APPLET(telnetd, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    358 IF_TEST(APPLET_NOFORK(test, test, _BB_DIR_USR_BIN, _BB_SUID_DROP, test))
     198IF_IPADDR(APPLET(ipaddr, BB_DIR_SBIN, BB_SUID_DROP))
     199IF_IPCALC(APPLET(ipcalc, BB_DIR_BIN, BB_SUID_DROP))
     200IF_IPCRM(APPLET(ipcrm, BB_DIR_USR_BIN, BB_SUID_DROP))
     201IF_IPCS(APPLET(ipcs, BB_DIR_USR_BIN, BB_SUID_DROP))
     202IF_IPLINK(APPLET(iplink, BB_DIR_SBIN, BB_SUID_DROP))
     203IF_IPROUTE(APPLET(iproute, BB_DIR_SBIN, BB_SUID_DROP))
     204IF_IPRULE(APPLET(iprule, BB_DIR_SBIN, BB_SUID_DROP))
     205IF_IPTUNNEL(APPLET(iptunnel, BB_DIR_SBIN, BB_SUID_DROP))
     206IF_KBD_MODE(APPLET(kbd_mode, BB_DIR_BIN, BB_SUID_DROP))
     207IF_KILL(APPLET(kill, BB_DIR_BIN, BB_SUID_DROP))
     208IF_KILLALL(APPLET_ODDNAME(killall, kill, BB_DIR_USR_BIN, BB_SUID_DROP, killall))
     209IF_KILLALL5(APPLET_ODDNAME(killall5, kill, BB_DIR_USR_SBIN, BB_SUID_DROP, killall5))
     210IF_KLOGD(APPLET(klogd, BB_DIR_SBIN, BB_SUID_DROP))
     211IF_LAST(APPLET(last, BB_DIR_USR_BIN, BB_SUID_DROP))
     212//IF_LENGTH(APPLET_NOFORK(length, length, BB_DIR_USR_BIN, BB_SUID_DROP, length))
     213IF_LESS(APPLET(less, BB_DIR_USR_BIN, BB_SUID_DROP))
     214IF_SETARCH(APPLET_ODDNAME(linux32, setarch, BB_DIR_BIN, BB_SUID_DROP, linux32))
     215IF_SETARCH(APPLET_ODDNAME(linux64, setarch, BB_DIR_BIN, BB_SUID_DROP, linux64))
     216IF_LN(APPLET_NOEXEC(ln, ln, BB_DIR_BIN, BB_SUID_DROP, ln))
     217IF_LOAD_POLICY(APPLET(load_policy, BB_DIR_USR_SBIN, BB_SUID_DROP))
     218IF_LOADFONT(APPLET(loadfont, BB_DIR_USR_SBIN, BB_SUID_DROP))
     219IF_LOADKMAP(APPLET(loadkmap, BB_DIR_SBIN, BB_SUID_DROP))
     220IF_LOGGER(APPLET(logger, BB_DIR_USR_BIN, BB_SUID_DROP))
     221/* Needs to be run by root or be suid root - needs to change uid and gid: */
     222IF_LOGIN(APPLET(login, BB_DIR_BIN, BB_SUID_REQUIRE))
     223IF_LOGNAME(APPLET_NOFORK(logname, logname, BB_DIR_USR_BIN, BB_SUID_DROP, logname))
     224IF_LOGREAD(APPLET(logread, BB_DIR_SBIN, BB_SUID_DROP))
     225IF_LOSETUP(APPLET(losetup, BB_DIR_SBIN, BB_SUID_DROP))
     226IF_LPD(APPLET(lpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
     227IF_LPQ(APPLET_ODDNAME(lpq, lpqr, BB_DIR_USR_BIN, BB_SUID_DROP, lpq))
     228IF_LPR(APPLET_ODDNAME(lpr, lpqr, BB_DIR_USR_BIN, BB_SUID_DROP, lpr))
     229IF_LS(APPLET_NOEXEC(ls, ls, BB_DIR_BIN, BB_SUID_DROP, ls))
     230IF_LSATTR(APPLET(lsattr, BB_DIR_BIN, BB_SUID_DROP))
     231IF_LSPCI(APPLET(lspci, BB_DIR_USR_BIN, BB_SUID_DROP))
     232IF_LSUSB(APPLET(lsusb, BB_DIR_USR_BIN, BB_SUID_DROP))
     233IF_UNLZMA(APPLET_ODDNAME(lzcat, unlzma, BB_DIR_USR_BIN, BB_SUID_DROP, lzcat))
     234IF_LZMA(APPLET_ODDNAME(lzma, unlzma, BB_DIR_USR_BIN, BB_SUID_DROP, lzma))
     235IF_LZOP(APPLET(lzop, BB_DIR_BIN, BB_SUID_DROP))
     236IF_LZOP(APPLET_ODDNAME(lzopcat, lzop, BB_DIR_USR_BIN, BB_SUID_DROP, lzopcat))
     237IF_MAKEDEVS(APPLET(makedevs, BB_DIR_SBIN, BB_SUID_DROP))
     238IF_MAKEMIME(APPLET(makemime, BB_DIR_BIN, BB_SUID_DROP))
     239IF_MAN(APPLET(man, BB_DIR_SBIN, BB_SUID_DROP))
     240IF_MATCHPATHCON(APPLET(matchpathcon, BB_DIR_USR_SBIN, BB_SUID_DROP))
     241IF_MD5SUM(APPLET_NOEXEC(md5sum, md5_sha1_sum, BB_DIR_USR_BIN, BB_SUID_DROP, md5sum))
     242IF_MICROCOM(APPLET(microcom, BB_DIR_USR_BIN, BB_SUID_DROP))
     243IF_MKDIR(APPLET_NOFORK(mkdir, mkdir, BB_DIR_BIN, BB_SUID_DROP, mkdir))
     244IF_MKFS_VFAT(APPLET_ODDNAME(mkdosfs, mkfs_vfat, BB_DIR_SBIN, BB_SUID_DROP, mkfs_vfat))
     245IF_MKFS_EXT2(APPLET_ODDNAME(mke2fs, mkfs_ext2, BB_DIR_SBIN, BB_SUID_DROP, mkfs_ext2))
     246IF_MKFIFO(APPLET_NOEXEC(mkfifo, mkfifo, BB_DIR_USR_BIN, BB_SUID_DROP, mkfifo))
     247IF_MKFS_EXT2(APPLET_ODDNAME(mkfs.ext2, mkfs_ext2, BB_DIR_SBIN, BB_SUID_DROP, mkfs_ext2))
     248//IF_MKE2FS(APPLET_ODDNAME(mkfs.ext3, mke2fs, BB_DIR_SBIN, BB_SUID_DROP, mkfs_ext3))
     249IF_MKFS_MINIX(APPLET_ODDNAME(mkfs.minix, mkfs_minix, BB_DIR_SBIN, BB_SUID_DROP, mkfs_minix))
     250IF_MKFS_REISER(APPLET_ODDNAME(mkfs.reiser, mkfs_reiser, BB_DIR_SBIN, BB_SUID_DROP, mkfs_reiser))
     251IF_MKFS_VFAT(APPLET_ODDNAME(mkfs.vfat, mkfs_vfat, BB_DIR_SBIN, BB_SUID_DROP, mkfs_vfat))
     252IF_MKNOD(APPLET_NOEXEC(mknod, mknod, BB_DIR_BIN, BB_SUID_DROP, mknod))
     253IF_CRYPTPW(APPLET_ODDNAME(mkpasswd, cryptpw, BB_DIR_USR_BIN, BB_SUID_DROP, mkpasswd))
     254IF_MKSWAP(APPLET(mkswap, BB_DIR_SBIN, BB_SUID_DROP))
     255IF_MKTEMP(APPLET(mktemp, BB_DIR_BIN, BB_SUID_DROP))
     256IF_MORE(APPLET(more, BB_DIR_BIN, BB_SUID_DROP))
     257/* On full-blown systems, requires suid for user mounts.
     258 * But it's not unthinkable to have it available in non-suid flavor on some systems,
     259 * for viewing mount table.
     260 * Therefore we use BB_SUID_MAYBE instead of BB_SUID_REQUIRE: */
     261IF_MOUNT(APPLET(mount, BB_DIR_BIN, IF_DESKTOP(BB_SUID_MAYBE) IF_NOT_DESKTOP(BB_SUID_DROP)))
     262IF_MOUNTPOINT(APPLET(mountpoint, BB_DIR_BIN, BB_SUID_DROP))
     263IF_MT(APPLET(mt, BB_DIR_BIN, BB_SUID_DROP))
     264IF_MV(APPLET(mv, BB_DIR_BIN, BB_SUID_DROP))
     265IF_NAMEIF(APPLET(nameif, BB_DIR_SBIN, BB_SUID_DROP))
     266IF_NC(APPLET(nc, BB_DIR_USR_BIN, BB_SUID_DROP))
     267IF_NETSTAT(APPLET(netstat, BB_DIR_BIN, BB_SUID_DROP))
     268IF_NICE(APPLET(nice, BB_DIR_BIN, BB_SUID_DROP))
     269IF_NOHUP(APPLET(nohup, BB_DIR_USR_BIN, BB_SUID_DROP))
     270IF_NSLOOKUP(APPLET(nslookup, BB_DIR_USR_BIN, BB_SUID_DROP))
     271IF_NTPD(APPLET(ntpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
     272IF_OD(APPLET(od, BB_DIR_USR_BIN, BB_SUID_DROP))
     273IF_OPENVT(APPLET(openvt, BB_DIR_USR_BIN, BB_SUID_DROP))
     274//IF_PARSE(APPLET(parse, BB_DIR_USR_BIN, BB_SUID_DROP))
     275/* Needs to be run by root or be suid root - needs to change /etc/{passwd,shadow}: */
     276IF_PASSWD(APPLET(passwd, BB_DIR_USR_BIN, BB_SUID_REQUIRE))
     277IF_PGREP(APPLET(pgrep, BB_DIR_USR_BIN, BB_SUID_DROP))
     278IF_PIDOF(APPLET(pidof, BB_DIR_BIN, BB_SUID_DROP))
     279IF_PIPE_PROGRESS(APPLET(pipe_progress, BB_DIR_BIN, BB_SUID_DROP))
     280IF_PIVOT_ROOT(APPLET(pivot_root, BB_DIR_SBIN, BB_SUID_DROP))
     281IF_PKILL(APPLET_ODDNAME(pkill, pgrep, BB_DIR_USR_BIN, BB_SUID_DROP, pkill))
     282IF_POPMAILDIR(APPLET(popmaildir, BB_DIR_USR_SBIN, BB_SUID_DROP))
     283IF_PRINTENV(APPLET_NOFORK(printenv, printenv, BB_DIR_BIN, BB_SUID_DROP, printenv))
     284IF_PRINTF(APPLET_NOFORK(printf, printf, BB_DIR_USR_BIN, BB_SUID_DROP, printf))
     285IF_PS(APPLET(ps, BB_DIR_BIN, BB_SUID_DROP))
     286IF_PSCAN(APPLET(pscan, BB_DIR_USR_BIN, BB_SUID_DROP))
     287IF_PWD(APPLET_NOFORK(pwd, pwd, BB_DIR_BIN, BB_SUID_DROP, pwd))
     288IF_RAIDAUTORUN(APPLET(raidautorun, BB_DIR_SBIN, BB_SUID_DROP))
     289IF_RDATE(APPLET(rdate, BB_DIR_USR_SBIN, BB_SUID_DROP))
     290IF_RDEV(APPLET(rdev, BB_DIR_USR_SBIN, BB_SUID_DROP))
     291IF_READAHEAD(APPLET(readahead, BB_DIR_USR_SBIN, BB_SUID_DROP))
     292IF_READLINK(APPLET(readlink, BB_DIR_USR_BIN, BB_SUID_DROP))
     293IF_READPROFILE(APPLET(readprofile, BB_DIR_USR_SBIN, BB_SUID_DROP))
     294IF_REALPATH(APPLET(realpath, BB_DIR_USR_BIN, BB_SUID_DROP))
     295IF_REFORMIME(APPLET(reformime, BB_DIR_BIN, BB_SUID_DROP))
     296IF_RENICE(APPLET(renice, BB_DIR_USR_BIN, BB_SUID_DROP))
     297IF_RESET(APPLET(reset, BB_DIR_USR_BIN, BB_SUID_DROP))
     298IF_RESIZE(APPLET(resize, BB_DIR_USR_BIN, BB_SUID_DROP))
     299IF_RESTORECON(APPLET_ODDNAME(restorecon, setfiles, BB_DIR_SBIN, BB_SUID_DROP, restorecon))
     300IF_RFKILL(APPLET(rfkill, BB_DIR_USR_SBIN, BB_SUID_DROP))
     301IF_RM(APPLET_NOFORK(rm, rm, BB_DIR_BIN, BB_SUID_DROP, rm))
     302IF_RMDIR(APPLET_NOFORK(rmdir, rmdir, BB_DIR_BIN, BB_SUID_DROP, rmdir))
     303IF_ROUTE(APPLET(route, BB_DIR_SBIN, BB_SUID_DROP))
     304IF_RPM(APPLET(rpm, BB_DIR_BIN, BB_SUID_DROP))
     305IF_RPM2CPIO(APPLET(rpm2cpio, BB_DIR_USR_BIN, BB_SUID_DROP))
     306IF_RTCWAKE(APPLET(rtcwake, BB_DIR_USR_SBIN, BB_SUID_DROP))
     307IF_RUN_PARTS(APPLET_ODDNAME(run-parts, run_parts, BB_DIR_BIN, BB_SUID_DROP, run_parts))
     308IF_RUNCON(APPLET(runcon, BB_DIR_USR_BIN, BB_SUID_DROP))
     309IF_RUNLEVEL(APPLET(runlevel, BB_DIR_SBIN, BB_SUID_DROP))
     310IF_RUNSV(APPLET(runsv, BB_DIR_USR_BIN, BB_SUID_DROP))
     311IF_RUNSVDIR(APPLET(runsvdir, BB_DIR_USR_BIN, BB_SUID_DROP))
     312IF_RX(APPLET(rx, BB_DIR_USR_BIN, BB_SUID_DROP))
     313IF_SCRIPT(APPLET(script, BB_DIR_USR_BIN, BB_SUID_DROP))
     314IF_SCRIPTREPLAY(APPLET(scriptreplay, BB_DIR_BIN, BB_SUID_DROP))
     315IF_SED(APPLET(sed, BB_DIR_BIN, BB_SUID_DROP))
     316IF_SELINUXENABLED(APPLET(selinuxenabled, BB_DIR_USR_SBIN, BB_SUID_DROP))
     317IF_SENDMAIL(APPLET(sendmail, BB_DIR_USR_SBIN, BB_SUID_DROP))
     318IF_SEQ(APPLET_NOFORK(seq, seq, BB_DIR_USR_BIN, BB_SUID_DROP, seq))
     319IF_SESTATUS(APPLET(sestatus, BB_DIR_USR_SBIN, BB_SUID_DROP))
     320IF_SETARCH(APPLET(setarch, BB_DIR_BIN, BB_SUID_DROP))
     321IF_SETCONSOLE(APPLET(setconsole, BB_DIR_SBIN, BB_SUID_DROP))
     322IF_SETENFORCE(APPLET(setenforce, BB_DIR_USR_SBIN, BB_SUID_DROP))
     323IF_SETFILES(APPLET(setfiles, BB_DIR_SBIN, BB_SUID_DROP))
     324IF_SETFONT(APPLET(setfont, BB_DIR_USR_SBIN, BB_SUID_DROP))
     325IF_SETKEYCODES(APPLET(setkeycodes, BB_DIR_USR_BIN, BB_SUID_DROP))
     326IF_SETLOGCONS(APPLET(setlogcons, BB_DIR_USR_SBIN, BB_SUID_DROP))
     327IF_SETSEBOOL(APPLET(setsebool, BB_DIR_USR_SBIN, BB_SUID_DROP))
     328IF_SETSID(APPLET(setsid, BB_DIR_USR_BIN, BB_SUID_DROP))
     329IF_SETUIDGID(APPLET_ODDNAME(setuidgid, chpst, BB_DIR_USR_BIN, BB_SUID_DROP, setuidgid))
     330IF_SHA1SUM(APPLET_NOEXEC(sha1sum, md5_sha1_sum, BB_DIR_USR_BIN, BB_SUID_DROP, sha1sum))
     331IF_SHA3SUM(APPLET_NOEXEC(sha3sum, md5_sha1_sum, BB_DIR_USR_BIN, BB_SUID_DROP, sha3sum))
     332IF_SHA256SUM(APPLET_NOEXEC(sha256sum, md5_sha1_sum, BB_DIR_USR_BIN, BB_SUID_DROP, sha256sum))
     333IF_SHA512SUM(APPLET_NOEXEC(sha512sum, md5_sha1_sum, BB_DIR_USR_BIN, BB_SUID_DROP, sha512sum))
     334IF_SHOWKEY(APPLET(showkey, BB_DIR_USR_BIN, BB_SUID_DROP))
     335IF_SLATTACH(APPLET(slattach, BB_DIR_SBIN, BB_SUID_DROP))
     336/* Do not make this applet NOFORK. It breaks ^C-ing of pauses in shells: */
     337IF_SLEEP(APPLET(sleep, BB_DIR_BIN, BB_SUID_DROP))
     338IF_SOFTLIMIT(APPLET_ODDNAME(softlimit, chpst, BB_DIR_USR_BIN, BB_SUID_DROP, softlimit))
     339IF_SORT(APPLET_NOEXEC(sort, sort, BB_DIR_USR_BIN, BB_SUID_DROP, sort))
     340IF_SPLIT(APPLET(split, BB_DIR_USR_BIN, BB_SUID_DROP))
     341IF_START_STOP_DAEMON(APPLET_ODDNAME(start-stop-daemon, start_stop_daemon, BB_DIR_SBIN, BB_SUID_DROP, start_stop_daemon))
     342IF_STAT(APPLET(stat, BB_DIR_BIN, BB_SUID_DROP))
     343IF_STRINGS(APPLET(strings, BB_DIR_USR_BIN, BB_SUID_DROP))
     344IF_STTY(APPLET(stty, BB_DIR_BIN, BB_SUID_DROP))
     345/* Needs to be run by root or be suid root - needs to change uid and gid: */
     346IF_SU(APPLET(su, BB_DIR_BIN, BB_SUID_REQUIRE))
     347IF_SULOGIN(APPLET(sulogin, BB_DIR_SBIN, BB_SUID_DROP))
     348IF_SUM(APPLET(sum, BB_DIR_USR_BIN, BB_SUID_DROP))
     349IF_SV(APPLET(sv, BB_DIR_USR_BIN, BB_SUID_DROP))
     350IF_SVLOGD(APPLET(svlogd, BB_DIR_USR_SBIN, BB_SUID_DROP))
     351IF_SWAPONOFF(APPLET_ODDNAME(swapoff, swap_on_off, BB_DIR_SBIN, BB_SUID_DROP, swapoff))
     352IF_SWAPONOFF(APPLET_ODDNAME(swapon, swap_on_off, BB_DIR_SBIN, BB_SUID_DROP, swapon))
     353IF_SWITCH_ROOT(APPLET(switch_root, BB_DIR_SBIN, BB_SUID_DROP))
     354IF_SYNC(APPLET_NOFORK(sync, sync, BB_DIR_BIN, BB_SUID_DROP, sync))
     355IF_BB_SYSCTL(APPLET(sysctl, BB_DIR_SBIN, BB_SUID_DROP))
     356IF_SYSLOGD(APPLET(syslogd, BB_DIR_SBIN, BB_SUID_DROP))
     357IF_TAC(APPLET_NOEXEC(tac, tac, BB_DIR_USR_BIN, BB_SUID_DROP, tac))
     358IF_TAIL(APPLET(tail, BB_DIR_USR_BIN, BB_SUID_DROP))
     359IF_TAR(APPLET(tar, BB_DIR_BIN, BB_SUID_DROP))
     360IF_TASKSET(APPLET(taskset, BB_DIR_USR_BIN, BB_SUID_DROP))
     361/* IF_TC(APPLET(tc, BB_DIR_SBIN, BB_SUID_DROP)) */
     362IF_TCPSVD(APPLET_ODDNAME(tcpsvd, tcpudpsvd, BB_DIR_USR_BIN, BB_SUID_DROP, tcpsvd))
     363IF_TEE(APPLET(tee, BB_DIR_USR_BIN, BB_SUID_DROP))
     364IF_TELNET(APPLET(telnet, BB_DIR_USR_BIN, BB_SUID_DROP))
     365IF_TELNETD(APPLET(telnetd, BB_DIR_USR_SBIN, BB_SUID_DROP))
     366IF_TEST(APPLET_NOFORK(test, test, BB_DIR_USR_BIN, BB_SUID_DROP, test))
    359367#if ENABLE_FEATURE_TFTP_GET || ENABLE_FEATURE_TFTP_PUT
    360 IF_TFTP(APPLET(tftp, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    361 IF_TFTPD(APPLET(tftpd, _BB_DIR_USR_BIN, _BB_SUID_DROP))
     368IF_TFTP(APPLET(tftp, BB_DIR_USR_BIN, BB_SUID_DROP))
     369IF_TFTPD(APPLET(tftpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
    362370#endif
    363 IF_TIME(APPLET(time, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    364 IF_TIMEOUT(APPLET(timeout, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    365 IF_TOP(APPLET(top, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    366 IF_TOUCH(APPLET_NOFORK(touch, touch, _BB_DIR_BIN, _BB_SUID_DROP, touch))
    367 IF_TR(APPLET(tr, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    368 IF_TRACEROUTE(APPLET(traceroute, _BB_DIR_USR_BIN, _BB_SUID_MAYBE))
    369 IF_TRACEROUTE6(APPLET(traceroute6, _BB_DIR_USR_BIN, _BB_SUID_MAYBE))
    370 IF_TRUE(APPLET_NOFORK(true, true, _BB_DIR_BIN, _BB_SUID_DROP, true))
    371 IF_TTY(APPLET(tty, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    372 IF_TTYSIZE(APPLET(ttysize, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    373 IF_TUNCTL(APPLET(tunctl, _BB_DIR_SBIN, _BB_SUID_DROP))
    374 IF_TUNE2FS(APPLET(tune2fs, _BB_DIR_SBIN, _BB_SUID_DROP))
    375 IF_UDHCPC(APPLET(udhcpc, _BB_DIR_SBIN, _BB_SUID_DROP))
    376 IF_UDHCPD(APPLET(udhcpd, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
    377 IF_UDPSVD(APPLET_ODDNAME(udpsvd, tcpudpsvd, _BB_DIR_USR_BIN, _BB_SUID_DROP, udpsvd))
    378 IF_UMOUNT(APPLET(umount, _BB_DIR_BIN, _BB_SUID_DROP))
    379 IF_UNAME(APPLET(uname, _BB_DIR_BIN, _BB_SUID_DROP))
    380 IF_UNCOMPRESS(APPLET(uncompress, _BB_DIR_BIN, _BB_SUID_DROP))
    381 IF_UNEXPAND(APPLET_ODDNAME(unexpand, expand, _BB_DIR_USR_BIN, _BB_SUID_DROP, unexpand))
    382 IF_UNIQ(APPLET(uniq, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    383 IF_UNIX2DOS(APPLET_NOEXEC(unix2dos, dos2unix, _BB_DIR_USR_BIN, _BB_SUID_DROP, unix2dos))
    384 IF_UNXZ(APPLET(unxz, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    385 IF_UNLZMA(APPLET(unlzma, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    386 IF_LZOP(APPLET_ODDNAME(unlzop, lzop, _BB_DIR_USR_BIN, _BB_SUID_DROP, unlzop))
    387 IF_UNZIP(APPLET(unzip, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    388 IF_UPTIME(APPLET(uptime, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    389 IF_USLEEP(APPLET_NOFORK(usleep, usleep, _BB_DIR_BIN, _BB_SUID_DROP, usleep))
    390 IF_UUDECODE(APPLET(uudecode, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    391 IF_UUENCODE(APPLET(uuencode, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    392 IF_VCONFIG(APPLET(vconfig, _BB_DIR_SBIN, _BB_SUID_DROP))
    393 IF_VI(APPLET(vi, _BB_DIR_BIN, _BB_SUID_DROP))
    394 IF_VLOCK(APPLET(vlock, _BB_DIR_USR_BIN, _BB_SUID_REQUIRE))
    395 IF_VOLNAME(APPLET(volname, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    396 IF_WALL(APPLET(wall, _BB_DIR_USR_BIN, _BB_SUID_REQUIRE))
    397 IF_WATCH(APPLET(watch, _BB_DIR_BIN, _BB_SUID_DROP))
    398 IF_WATCHDOG(APPLET(watchdog, _BB_DIR_SBIN, _BB_SUID_DROP))
    399 IF_WC(APPLET(wc, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    400 IF_WGET(APPLET(wget, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    401 IF_WHICH(APPLET(which, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    402 IF_WHO(APPLET(who, _BB_DIR_USR_BIN, _BB_SUID_DROP))
    403 IF_WHOAMI(APPLET_NOFORK(whoami, whoami, _BB_DIR_USR_BIN, _BB_SUID_DROP, whoami))
    404 IF_UNXZ(APPLET_ODDNAME(xzcat, unxz, _BB_DIR_USR_BIN, _BB_SUID_DROP, xzcat))
    405 IF_XZ(APPLET_ODDNAME(xz, unxz, _BB_DIR_USR_BIN, _BB_SUID_DROP, xz))
    406 IF_YES(APPLET_NOFORK(yes, yes, _BB_DIR_USR_BIN, _BB_SUID_DROP, yes))
    407 IF_GUNZIP(APPLET_ODDNAME(zcat, gunzip, _BB_DIR_BIN, _BB_SUID_DROP, zcat))
    408 IF_ZCIP(APPLET(zcip, _BB_DIR_SBIN, _BB_SUID_DROP))
     371IF_TIME(APPLET(time, BB_DIR_USR_BIN, BB_SUID_DROP))
     372IF_TIMEOUT(APPLET(timeout, BB_DIR_USR_BIN, BB_SUID_DROP))
     373IF_TOP(APPLET(top, BB_DIR_USR_BIN, BB_SUID_DROP))
     374IF_TR(APPLET(tr, BB_DIR_USR_BIN, BB_SUID_DROP))
     375/* Needs socket(AF_INET, SOCK_RAW, IPPROTO_ICMP), therefore BB_SUID_MAYBE: */
     376IF_TRACEROUTE(APPLET(traceroute, BB_DIR_USR_BIN, BB_SUID_MAYBE))
     377IF_TRACEROUTE6(APPLET(traceroute6, BB_DIR_USR_BIN, BB_SUID_MAYBE))
     378IF_TRUE(APPLET_NOFORK(true, true, BB_DIR_BIN, BB_SUID_DROP, true))
     379IF_TTY(APPLET(tty, BB_DIR_USR_BIN, BB_SUID_DROP))
     380IF_TTYSIZE(APPLET(ttysize, BB_DIR_USR_BIN, BB_SUID_DROP))
     381IF_TUNCTL(APPLET(tunctl, BB_DIR_SBIN, BB_SUID_DROP))
     382IF_TUNE2FS(APPLET(tune2fs, BB_DIR_SBIN, BB_SUID_DROP))
     383IF_UDHCPC(APPLET(udhcpc, BB_DIR_SBIN, BB_SUID_DROP))
     384IF_UDHCPD(APPLET(udhcpd, BB_DIR_USR_SBIN, BB_SUID_DROP))
     385IF_UDPSVD(APPLET_ODDNAME(udpsvd, tcpudpsvd, BB_DIR_USR_BIN, BB_SUID_DROP, udpsvd))
     386IF_UMOUNT(APPLET(umount, BB_DIR_BIN, BB_SUID_DROP))
     387IF_UNAME(APPLET(uname, BB_DIR_BIN, BB_SUID_DROP))
     388IF_UNCOMPRESS(APPLET(uncompress, BB_DIR_BIN, BB_SUID_DROP))
     389IF_UNEXPAND(APPLET_ODDNAME(unexpand, expand, BB_DIR_USR_BIN, BB_SUID_DROP, unexpand))
     390IF_UNIQ(APPLET(uniq, BB_DIR_USR_BIN, BB_SUID_DROP))
     391IF_UNIX2DOS(APPLET_NOEXEC(unix2dos, dos2unix, BB_DIR_USR_BIN, BB_SUID_DROP, unix2dos))
     392IF_UNXZ(APPLET(unxz, BB_DIR_USR_BIN, BB_SUID_DROP))
     393IF_UNLZMA(APPLET(unlzma, BB_DIR_USR_BIN, BB_SUID_DROP))
     394IF_LZOP(APPLET_ODDNAME(unlzop, lzop, BB_DIR_USR_BIN, BB_SUID_DROP, unlzop))
     395IF_UNZIP(APPLET(unzip, BB_DIR_USR_BIN, BB_SUID_DROP))
     396IF_UPTIME(APPLET(uptime, BB_DIR_USR_BIN, BB_SUID_DROP))
     397IF_USLEEP(APPLET_NOFORK(usleep, usleep, BB_DIR_BIN, BB_SUID_DROP, usleep))
     398IF_UUDECODE(APPLET(uudecode, BB_DIR_USR_BIN, BB_SUID_DROP))
     399IF_UUENCODE(APPLET(uuencode, BB_DIR_USR_BIN, BB_SUID_DROP))
     400IF_VCONFIG(APPLET(vconfig, BB_DIR_SBIN, BB_SUID_DROP))
     401/* Needs to be run by root or be suid root - needs to change uid and gid: */
     402IF_VLOCK(APPLET(vlock, BB_DIR_USR_BIN, BB_SUID_REQUIRE))
     403IF_VOLNAME(APPLET(volname, BB_DIR_USR_BIN, BB_SUID_DROP))
     404/* Needs to be run by root or be suid root - needs to write to /dev/TTY: */
     405IF_WALL(APPLET(wall, BB_DIR_USR_BIN, BB_SUID_REQUIRE))
     406IF_WATCH(APPLET(watch, BB_DIR_BIN, BB_SUID_DROP))
     407IF_WATCHDOG(APPLET(watchdog, BB_DIR_SBIN, BB_SUID_DROP))
     408IF_WC(APPLET(wc, BB_DIR_USR_BIN, BB_SUID_DROP))
     409IF_WGET(APPLET(wget, BB_DIR_USR_BIN, BB_SUID_DROP))
     410IF_WHICH(APPLET(which, BB_DIR_USR_BIN, BB_SUID_DROP))
     411IF_WHOAMI(APPLET_NOFORK(whoami, whoami, BB_DIR_USR_BIN, BB_SUID_DROP, whoami))
     412IF_UNXZ(APPLET_ODDNAME(xzcat, unxz, BB_DIR_USR_BIN, BB_SUID_DROP, xzcat))
     413IF_XZ(APPLET_ODDNAME(xz, unxz, BB_DIR_USR_BIN, BB_SUID_DROP, xz))
     414IF_YES(APPLET_NOFORK(yes, yes, BB_DIR_USR_BIN, BB_SUID_DROP, yes))
     415IF_GUNZIP(APPLET_ODDNAME(zcat, gunzip, BB_DIR_BIN, BB_SUID_DROP, zcat))
     416IF_ZCIP(APPLET(zcip, BB_DIR_SBIN, BB_SUID_DROP))
    409417
    410418#if !defined(PROTOTYPES) && !defined(NAME_MAIN_CNAME) && !defined(MAKE_USAGE)
  • branches/3.2/mindi-busybox/include/busybox.h

    r2725 r3232  
    11/* vi: set sw=4 ts=4: */
    22/*
    3  * Busybox main internal header file
    4  *
    53 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
    64 */
     
    97
    108#include "libbb.h"
     9/* BB_DIR_foo and BB_SUID_bar constants: */
     10#include "applet_metadata.h"
    1111
    1212PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
    1313
    14 /* order matters: used as index into "install_dir[]" in appletlib.c */
    15 typedef enum bb_install_loc_t {
    16     _BB_DIR_ROOT = 0,
    17     _BB_DIR_BIN,
    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
    23     _BB_DIR_USR_BIN,
    24     _BB_DIR_USR_SBIN,
    25 #endif
    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 
    3514/* Defined in appletlib.c (by including generated applet_tables.h) */
    3615/* Keep in sync with applets/applet_tables.c! */
    37 extern const char applet_names[];
     16extern const char applet_names[] ALIGN1;
    3817extern int (*const applet_main[])(int argc, char **argv);
    3918extern const uint16_t applet_nameofs[];
    40 extern const uint8_t applet_install_loc[];
     19extern const uint8_t applet_install_loc[] ALIGN1;
    4120
    4221#if ENABLE_FEATURE_SUID || ENABLE_FEATURE_PREFER_APPLETS
  • branches/3.2/mindi-busybox/include/grp_.h

    r2725 r3232  
    3030 * so that function calls are directed to bb_internal_XXX replacements
    3131 */
    32 
     32#undef endgrent
    3333#define setgrent     bb_internal_setgrent
    3434#define endgrent     bb_internal_endgrent
     
    6565/* Write the given entry onto the given stream.  */
    6666extern int putgrent(const struct group *__restrict __p,
    67              FILE *__restrict __f);
     67        FILE *__restrict __f);
    6868#endif
    6969
     
    8383
    8484extern int getgrent_r(struct group *__restrict __resultbuf,
    85                char *__restrict __buffer, size_t __buflen,
    86                struct group **__restrict __result);
     85        char *__restrict __buffer, size_t __buflen,
     86        struct group **__restrict __result);
    8787
    8888/* Search for an entry with a matching group ID.  */
    8989extern int getgrgid_r(gid_t __gid, struct group *__restrict __resultbuf,
    90                char *__restrict __buffer, size_t __buflen,
    91                struct group **__restrict __result);
     90        char *__restrict __buffer, size_t __buflen,
     91        struct group **__restrict __result);
    9292
    9393/* Search for an entry with a matching group name.  */
    9494extern int getgrnam_r(const char *__restrict __name,
    95                struct group *__restrict __resultbuf,
    96                char *__restrict __buffer, size_t __buflen,
    97                struct group **__restrict __result);
     95        struct group *__restrict __resultbuf,
     96        char *__restrict __buffer, size_t __buflen,
     97        struct group **__restrict __result);
    9898
    9999/* Read a group entry from STREAM.  This function is not standardized
    100100   an probably never will.  */
    101101extern int fgetgrent_r(FILE *__restrict __stream,
    102             struct group *__restrict __resultbuf,
    103             char *__restrict __buffer, size_t __buflen,
    104             struct group **__restrict __result);
     102        struct group *__restrict __resultbuf,
     103        char *__restrict __buffer, size_t __buflen,
     104        struct group **__restrict __result);
    105105
    106106/* Store at most *NGROUPS members of the group set for USER into
     
    108108   returned in *NGROUPS.  Return -1 if the if *NGROUPS is too small.  */
    109109extern int getgrouplist(const char *__user, gid_t __group,
    110              gid_t *__groups, int *__ngroups);
     110        gid_t *__groups, int *__ngroups);
    111111
    112112/* Initialize the group set for the current user
  • branches/3.2/mindi-busybox/include/libbb.h

    r2725 r3232  
    2121#include <setjmp.h>
    2222#include <signal.h>
     23#if defined __UCLIBC__ /* TODO: and glibc? */
     24/* use inlined versions of these: */
     25# define sigfillset(s)    __sigfillset(s)
     26# define sigemptyset(s)   __sigemptyset(s)
     27# define sigisemptyset(s) __sigisemptyset(s)
     28#endif
    2329#include <stdint.h>
    2430#include <stdio.h>
     
    2733#include <stddef.h>
    2834#include <string.h>
     35/* There are two incompatible basename's, let not use them! */
     36/* See the dirname/basename man page for details */
     37#include <libgen.h> /* dirname,basename */
     38#undef basename
     39#define basename dont_use_basename
    2940#include <sys/poll.h>
    3041#include <sys/ioctl.h>
     
    3445#include <sys/time.h>
    3546#include <sys/types.h>
     47#ifndef major
     48# include <sys/sysmacros.h>
     49#endif
    3650#include <sys/wait.h>
    3751#include <termios.h>
    3852#include <time.h>
    39 #include <unistd.h>
    4053#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
    47 #if ENABLE_SELINUX
    48 # include <selinux/selinux.h>
    49 # include <selinux/context.h>
    50 # include <selinux/flask.h>
    51 # include <selinux/av_permissions.h>
    52 #endif
    53 #if ENABLE_LOCALE_SUPPORT
    54 # include <locale.h>
    55 #else
    56 # define setlocale(x,y) ((void)0)
    57 #endif
    58 #ifdef DMALLOC
    59 # include <dmalloc.h>
    60 #endif
    6154#include <pwd.h>
    6255#include <grp.h>
     
    6861#  include <shadow.h>
    6962# endif
     63#endif
     64#if defined(ANDROID) || defined(__ANDROID__)
     65# define endpwent() ((void)0)
     66# define endgrent() ((void)0)
     67#endif
     68#ifdef HAVE_MNTENT_H
     69# include <mntent.h>
     70#endif
     71#ifdef HAVE_SYS_STATFS_H
     72# include <sys/statfs.h>
     73#endif
     74/* Don't do this here:
     75 * #include <sys/sysinfo.h>
     76 * Some linux/ includes pull in conflicting definition
     77 * of struct sysinfo (only in some toolchanins), which breaks build.
     78 * Include sys/sysinfo.h only in those files which need it.
     79 */
     80#if ENABLE_SELINUX
     81# include <selinux/selinux.h>
     82# include <selinux/context.h>
     83# include <selinux/flask.h>
     84# include <selinux/av_permissions.h>
     85#endif
     86#if ENABLE_FEATURE_UTMP
     87# include <utmp.h>
     88#endif
     89#if ENABLE_LOCALE_SUPPORT
     90# include <locale.h>
     91#else
     92# define setlocale(x,y) ((void)0)
     93#endif
     94#ifdef DMALLOC
     95# include <dmalloc.h>
     96#endif
     97/* Just in case libc doesn't define some of these... */
     98#ifndef _PATH_PASSWD
     99#define _PATH_PASSWD  "/etc/passwd"
     100#endif
     101#ifndef _PATH_GROUP
     102#define _PATH_GROUP   "/etc/group"
     103#endif
     104#ifndef _PATH_SHADOW
     105#define _PATH_SHADOW  "/etc/shadow"
     106#endif
     107#ifndef _PATH_GSHADOW
     108#define _PATH_GSHADOW "/etc/gshadow"
    70109#endif
    71110#if defined __FreeBSD__ || defined __OpenBSD__
     
    85124# endif
    86125#endif
     126#ifndef HAVE_CLEARENV
     127# define clearenv() do { if (environ) environ[0] = NULL; } while (0)
     128#endif
     129#ifndef HAVE_FDATASYNC
     130# define fdatasync fsync
     131#endif
     132#ifndef HAVE_XTABS
     133# define XTABS TAB3
     134#endif
    87135
    88136
     
    95143/* klogctl is in libc's klog.h, but we cheat and not #include that */
    96144int 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__
    101 char *dirname(char *path);
    102 #endif
    103 /* Include our own copy of struct sysinfo to avoid binary compatibility
    104  * problems with Linux 2.4, which changed things.  Grumble, grumble. */
    105 struct sysinfo {
    106     long uptime;            /* Seconds since boot */
    107     unsigned long loads[3];     /* 1, 5, and 15 minute load averages */
    108     unsigned long totalram;     /* Total usable main memory size */
    109     unsigned long freeram;      /* Available memory size */
    110     unsigned long sharedram;    /* Amount of shared memory */
    111     unsigned long bufferram;    /* Memory used by buffers */
    112     unsigned long totalswap;    /* Total swap space size */
    113     unsigned long freeswap;     /* swap space still available */
    114     unsigned short procs;       /* Number of current processes */
    115     unsigned short pad;         /* Padding needed for m68k */
    116     unsigned long totalhigh;    /* Total high memory size */
    117     unsigned long freehigh;     /* Available high memory size */
    118     unsigned int mem_unit;      /* Memory unit size in bytes */
    119     char _f[20 - 2 * sizeof(long) - sizeof(int)]; /* Padding: libc5 uses this.. */
    120 };
    121 int sysinfo(struct sysinfo* info);
    122145#ifndef PATH_MAX
    123146# define PATH_MAX 256
     
    125148#ifndef BUFSIZ
    126149# define BUFSIZ 4096
     150#endif
     151
     152
     153/* Busybox does not use threads, we can speed up stdio. */
     154#ifdef HAVE_UNLOCKED_STDIO
     155# undef  getc
     156# define getc(stream) getc_unlocked(stream)
     157# undef  getchar
     158# define getchar() getchar_unlocked()
     159# undef  putc
     160# define putc(c, stream) putc_unlocked(c, stream)
     161# undef  putchar
     162# define putchar(c) putchar_unlocked(c)
     163# undef  fgetc
     164# define fgetc(stream) getc_unlocked(stream)
     165# undef  fputc
     166# define fputc(c, stream) putc_unlocked(c, stream)
     167#endif
     168/* Above functions are required by POSIX.1-2008, below ones are extensions */
     169#ifdef HAVE_UNLOCKED_LINE_OPS
     170# undef  fgets
     171# define fgets(s, n, stream) fgets_unlocked(s, n, stream)
     172# undef  fputs
     173# define fputs(s, stream) fputs_unlocked(s, stream)
    127174#endif
    128175
     
    169216/* "long" is long enough on this system */
    170217typedef unsigned long uoff_t;
    171 #  define XATOOFF(a) xatoul_range(a, 0, LONG_MAX)
     218#  define XATOOFF(a) xatoul_range((a), 0, LONG_MAX)
    172219/* usage: sz = BB_STRTOOFF(s, NULL, 10); if (errno || sz < 0) die(); */
    173220#  define BB_STRTOOFF bb_strtoul
     
    178225/* "long" is too short, need "long long" */
    179226typedef unsigned long long uoff_t;
    180 #  define XATOOFF(a) xatoull_range(a, 0, LLONG_MAX)
     227#  define XATOOFF(a) xatoull_range((a), 0, LLONG_MAX)
    181228#  define BB_STRTOOFF bb_strtoull
    182229#  define STRTOOFF strtoull
     
    195242# else
    196243typedef unsigned long uoff_t;
    197 #  define XATOOFF(a) xatoul_range(a, 0, LONG_MAX)
     244#  define XATOOFF(a) xatoul_range((a), 0, LONG_MAX)
    198245#  define BB_STRTOOFF bb_strtoul
    199246#  define STRTOOFF strtol
     
    203250/* scary. better ideas? (but do *test* them first!) */
    204251#define OFF_T_MAX  ((off_t)~((off_t)1 << (sizeof(off_t)*8-1)))
     252/* Users report bionic to use 32-bit off_t even if LARGEFILE support is requested.
     253 * We misdetected that. Don't let it build:
     254 */
     255struct BUG_off_t_size_is_misdetected {
     256    char BUG_off_t_size_is_misdetected[sizeof(off_t) == sizeof(uoff_t) ? 1 : -1];
     257};
    205258
    206259/* Some useful definitions */
     
    211264#undef SKIP
    212265#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
    220266
    221267/* Macros for min/max.  */
     
    273319//TODO: supply a pointer to char[11] buffer (avoid statics)?
    274320extern 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;
     321extern int is_directory(const char *name, int followLinks) FAST_FUNC;
    276322enum {  /* DO NOT CHANGE THESE VALUES!  cp.c, mv.c, install.c depend on them. */
    277323    FILEUTILS_PRESERVE_STATUS = 1 << 0, /* -p */
     
    288334    FILEUTILS_SET_SECURITY_CONTEXT = 1 << 10,
    289335#endif
     336    FILEUTILS_IGNORE_CHMOD_ERR = 1 << 11,
    290337};
    291338#define FILEUTILS_CP_OPTSTR "pdRfilsLH" IF_SELINUX("c")
     
    324371/* this helper yells "short read!" if param is not -1 */
    325372extern void complain_copyfd_and_die(off_t sz) NORETURN FAST_FUNC;
     373
    326374extern char bb_process_escape_sequence(const char **ptr) FAST_FUNC;
    327375char* strcpy_and_process_escape_sequences(char *dst, const char *src) FAST_FUNC;
     
    332380 * "abc/def/" -> "def" !!
    333381 */
    334 extern char *bb_get_last_path_component_strip(char *path) FAST_FUNC;
     382char *bb_get_last_path_component_strip(char *path) FAST_FUNC;
    335383/* "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;
     384char *bb_get_last_path_component_nostrip(const char *path) FAST_FUNC;
     385/* Simpler version: does not special case "/" string */
     386const char *bb_basename(const char *name) FAST_FUNC;
     387/* NB: can violate const-ness (similarly to strchr) */
     388char *last_char_is(const char *s, int c) FAST_FUNC;
     389
     390void ndelay_on(int fd) FAST_FUNC;
     391void ndelay_off(int fd) FAST_FUNC;
     392void close_on_exec_on(int fd) FAST_FUNC;
    341393void xdup2(int, int) FAST_FUNC;
    342394void xmove_fd(int, int) FAST_FUNC;
     
    518570 * This is useful if you plan to bind to resulting local lsa.
    519571 */
    520 #if ENABLE_FEATURE_IPV6
    521572int 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
    526573int xsocket_stream(len_and_sockaddr **lsap) FAST_FUNC;
    527574/* Create server socket bound to bindaddr:port. bindaddr can be NULL,
     
    563610 * otherwise no-op. Useful for ftp.
    564611 * NB: does NOT do htons() internally, just direct assignment. */
    565 void set_nport(len_and_sockaddr *lsa, unsigned port) FAST_FUNC;
     612void set_nport(struct sockaddr *sa, unsigned port) FAST_FUNC;
    566613/* Retrieve sin[6]_port or return -1 for non-INET[6] lsa's */
    567614int get_nport(const struct sockaddr *sa) FAST_FUNC;
     
    592639        socklen_t sa_size) FAST_FUNC;
    593640
     641uint16_t inet_cksum(uint16_t *addr, int len) FAST_FUNC;
    594642
    595643char *xstrdup(const char *s) FAST_FUNC RETURNS_MALLOC;
     
    636684void *xzalloc(size_t size) FAST_FUNC RETURNS_MALLOC;
    637685void *xrealloc(void *old, size_t size) FAST_FUNC;
    638 /* After xrealloc_vector(v, 4, idx) it's ok to use
     686/* After v = xrealloc_vector(v, SHIFT, idx) it's ok to use
    639687 * 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. */
     688 * SHIFT specifies how many new elements are added (1:2, 2:4, ..., 8:256...)
     689 * when all elements are used up. New elements are zeroed out.
     690 * xrealloc_vector(v, SHIFT, idx) *MUST* be called with consecutive IDXs -
     691 * skipping an index is a bad bug - it may miss a realloc!
     692 */
    642693#define xrealloc_vector(vector, shift, idx) \
    643694    xrealloc_vector_helper((vector), (sizeof((vector)[0]) << 8) + (shift), (idx))
     
    646697
    647698extern 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;
     699extern ssize_t nonblock_immune_read(int fd, void *buf, size_t count, int loop_on_EINTR) FAST_FUNC;
    649700// NB: will return short read on error, not -1,
    650701// if some data was read before error occurred
     
    657708// Reads byte-by-byte. Useful when it is important to not read ahead.
    658709// 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;
     710extern char *xmalloc_reads(int fd, size_t *maxsz_p) FAST_FUNC;
    660711/* Reads block up to *maxsz_p (default: INT_MAX - 4095) */
    661712extern void *xmalloc_read(int fd, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC;
    662713/* Returns NULL if file can't be opened (default max size: INT_MAX - 4095) */
    663714extern 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 \
     715/* Never returns NULL */
     716extern void *xmalloc_xopen_read_close(const char *filename, size_t *maxsz_p) FAST_FUNC RETURNS_MALLOC;
     717
     718#define SEAMLESS_COMPRESSION (0 \
     719 || ENABLE_FEATURE_SEAMLESS_XZ \
     720 || ENABLE_FEATURE_SEAMLESS_LZMA \
    666721 || ENABLE_FEATURE_SEAMLESS_BZ2 \
    667722 || 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
     723 || ENABLE_FEATURE_SEAMLESS_Z)
     724
     725#if SEAMLESS_COMPRESSION
     726/* Autodetects gzip/bzip2 formats. fd may be in the middle of the file! */
     727extern int setup_unzip_on_fd(int fd, int fail_if_not_detected) FAST_FUNC;
    673728/* Autodetects .gz etc */
    674729extern int open_zipped(const char *fname) FAST_FUNC;
     730#else
     731# define setup_unzip_on_fd(...) (0)
     732# define open_zipped(fname)     open((fname), O_RDONLY);
     733#endif
    675734extern 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;
    678735
    679736extern ssize_t safe_write(int fd, const void *buf, size_t count) FAST_FUNC;
     
    693750extern void xprint_and_close_file(FILE *file) FAST_FUNC;
    694751
     752/* Reads a line from a text file, up to a newline or NUL byte, inclusive.
     753 * Returns malloc'ed char*. If end is NULL '\n' isn't considered
     754 * end of line. If end isn't NULL, length of the chunk is stored in it.
     755 * Returns NULL if EOF/error.
     756 */
    695757extern 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;
    697758/* Reads up to (and including) TERMINATING_STRING: */
    698759extern char *xmalloc_fgets_str(FILE *file, const char *terminating_string) FAST_FUNC RETURNS_MALLOC;
     
    736797
    737798char *safe_gethostname(void) FAST_FUNC;
    738 char *safe_getdomainname(void) FAST_FUNC;
    739799
    740800/* Convert each alpha char in str to lower-case */
     
    759819        unsigned long block_size, unsigned long display_unit) FAST_FUNC;
    760820/* Put a string of hex bytes ("1b2e66fe"...), return advanced pointer */
    761 char *bin2hex(char *buf, const char *cp, int count) FAST_FUNC;
     821char *bin2hex(char *dst, const char *src, int count) FAST_FUNC;
    762822/* Reverse */
    763 char* hex2bin(char *dst, const char *str, int count) FAST_FUNC;
     823char* hex2bin(char *dst, const char *src, int count) FAST_FUNC;
    764824
    765825/* Generate a UUID */
     
    813873char* uid2uname(uid_t uid) FAST_FUNC;
    814874char* gid2group(gid_t gid) FAST_FUNC;
    815 char* uid2uname_utoa(long uid) FAST_FUNC;
    816 char* gid2group_utoa(long gid) FAST_FUNC;
     875char* uid2uname_utoa(uid_t uid) FAST_FUNC;
     876char* gid2group_utoa(gid_t gid) FAST_FUNC;
    817877/* versions which cache results (useful for ps, ls etc) */
    818878const char* get_cached_username(uid_t uid) FAST_FUNC;
     
    820880void clear_username_cache(void) FAST_FUNC;
    821881/* internally usernames are saved in fixed-sized char[] buffers */
    822 enum { USERNAME_MAX_SIZE = 16 - sizeof(int) };
     882enum { USERNAME_MAX_SIZE = 32 - sizeof(uid_t) };
    823883#if ENABLE_FEATURE_CHECK_NAMES
    824884void die_if_bad_username(const char* name) FAST_FUNC;
     
    835895#endif
    836896
     897
    837898int execable_file(const char *name) FAST_FUNC;
    838899char *find_execable(const char *filename, char **PATHp) FAST_FUNC;
     
    843904 */
    844905#if ENABLE_FEATURE_PREFER_APPLETS
    845 int bb_execvp(const char *file, char *const argv[]) FAST_FUNC;
    846 #define BB_EXECVP(prog,cmd) bb_execvp(prog,cmd)
     906int BB_EXECVP(const char *file, char *const argv[]) FAST_FUNC;
    847907#define BB_EXECLP(prog,cmd,...) \
    848     execlp((find_applet_by_name(prog) >= 0) ? CONFIG_BUSYBOX_EXEC_PATH : prog, \
    849         cmd, __VA_ARGS__)
     908    do { \
     909        if (find_applet_by_name(prog) >= 0) \
     910            execlp(bb_busybox_exec_path, cmd, __VA_ARGS__); \
     911        execlp(prog, cmd, __VA_ARGS__); \
     912    } while (0)
    850913#else
    851914#define BB_EXECVP(prog,cmd)     execvp(prog,cmd)
    852 #define BB_EXECLP(prog,cmd,...) execlp(prog,cmd, __VA_ARGS__)
     915#define BB_EXECLP(prog,cmd,...) execlp(prog,cmd,__VA_ARGS__)
    853916#endif
    854917int BB_EXECVP_or_die(char **argv) NORETURN FAST_FUNC;
     
    884947/* Same as wait4pid(spawn(argv)), but with NOFORK/NOEXEC if configured: */
    885948int spawn_and_wait(char **argv) FAST_FUNC;
    886 struct nofork_save_area {
    887     jmp_buf die_jmp;
    888     const char *applet_name;
    889     uint32_t option_mask32;
    890     int die_sleep;
    891     uint8_t xfunc_error_retval;
    892     smallint saved;
    893 };
    894 void save_nofork_data(struct nofork_save_area *save) FAST_FUNC;
    895 void restore_nofork_data(struct nofork_save_area *save) FAST_FUNC;
    896949/* Does NOT check that applet is NOFORK, just blindly runs it */
    897950int 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;
    899951
    900952/* Helpers for daemonization.
     
    926978    DAEMON_CLOSE_EXTRA_FDS = 4,
    927979    DAEMON_ONLY_SANITIZE = 8, /* internal use */
     980    DAEMON_DOUBLE_FORK = 16, /* double fork to avoid controlling tty */
    928981};
    929982#if BB_MMU
     
    934987#else
    935988  extern bool re_execed;
     989  /* Note: re_exec() and fork_or_rexec() do argv[0][0] |= 0x80 on NOMMU!
     990   * _Parent_ needs to undo it if it doesn't want to have argv[0] mangled.
     991   */
    936992  void re_exec(char **argv) NORETURN FAST_FUNC;
    937993  pid_t fork_or_rexec(char **argv) FAST_FUNC;
     
    9631019
    9641020
     1021/* Having next pointer as a first member allows easy creation
     1022 * of "llist-compatible" structs, and using llist_FOO functions
     1023 * on them.
     1024 */
    9651025typedef struct llist_t {
     1026    struct llist_t *link;
    9661027    char *data;
    967     struct llist_t *link;
    9681028} llist_t;
    9691029void llist_add_to(llist_t **old_head, void *data) FAST_FUNC;
     
    11161176 * malloc and return it in *devname.
    11171177 * return value: 1: read-only loopdev was setup, 0: rw, < 0: error */
    1118 extern int set_loop(char **devname, const char *file, unsigned long long offset) FAST_FUNC;
     1178extern int set_loop(char **devname, const char *file, unsigned long long offset, int ro) FAST_FUNC;
    11191179
    11201180/* Like bb_ask below, but asks on stdin with no timeout.  */
     
    11371197    // keep a copy of current line
    11381198    PARSE_KEEP_COPY = 0x00200000 * ENABLE_FEATURE_CROND_D,
    1139 //  PARSE_ESCAPE    = 0x00400000, // process escape sequences in tokens
     1199    PARSE_EOL_COMMENTS = 0x00400000, // comments are recognized even if they aren't the first char
    11401200    // NORMAL is:
    11411201    // * remove leading and trailing delimiters and collapse
     
    11431203    // * warn and continue if less than mintokens delimiters found
    11441204    // * grab everything into last token
    1145     PARSE_NORMAL    = PARSE_COLLAPSE | PARSE_TRIM | PARSE_GREEDY,
     1205    // * comments are recognized even if they aren't the first char
     1206    PARSE_NORMAL    = PARSE_COLLAPSE | PARSE_TRIM | PARSE_GREEDY | PARSE_EOL_COMMENTS,
    11461207};
    11471208typedef struct parser_t {
    11481209    FILE *fp;
    1149     char *line;
    11501210    char *data;
     1211    char *line, *nline;
     1212    size_t line_alloc, nline_alloc;
    11511213    int lineno;
    11521214} parser_t;
     
    11641226 * filename should not be NULL. */
    11651227char *concat_path_file(const char *path, const char *filename) FAST_FUNC;
     1228/* Returns NULL on . and .. */
    11661229char *concat_subpath_file(const char *path, const char *filename) FAST_FUNC;
    1167 const char *bb_basename(const char *name) FAST_FUNC;
    1168 /* NB: can violate const-ness (similarly to strchr) */
    1169 char *last_char_is(const char *s, int c) FAST_FUNC;
    11701230
    11711231
     
    11801240char *bb_simplify_abs_path_inplace(char *path) FAST_FUNC;
    11811241
    1182 #define FAIL_DELAY 3
     1242#define LOGIN_FAIL_DELAY 3
    11831243extern void bb_do_delay(int seconds) FAST_FUNC;
    11841244extern void change_identity(const struct passwd *pw) FAST_FUNC;
    11851245extern void run_shell(const char *shell, int loginshell, const char *command, const char **additional_args) NORETURN FAST_FUNC;
     1246
     1247/* Returns $SHELL, getpwuid(getuid())->pw_shell, or DEFAULT_SHELL.
     1248 * Note that getpwuid result might need xstrdup'ing
     1249 * if there is a possibility of intervening getpwxxx() calls.
     1250 */
     1251const char *get_shell_name(void) FAST_FUNC;
     1252
    11861253#if ENABLE_SELINUX
    11871254extern void renew_current_security_context(void) FAST_FUNC;
     
    11951262#endif
    11961263extern void selinux_or_die(void) FAST_FUNC;
     1264
     1265
     1266/* systemd support */
     1267#define SD_LISTEN_FDS_START 3
     1268int sd_listen_fds(void);
     1269
    11971270
    11981271/* setup_environment:
     
    12141287#define SETUP_ENV_CLEARENV  (1 << 1)
    12151288#define SETUP_ENV_TO_TMP    (1 << 2)
     1289#define SETUP_ENV_NO_CHDIR  (1 << 4)
    12161290extern void setup_environment(const char *shell, int flags, const struct passwd *pw) FAST_FUNC;
    12171291extern int correct_password(const struct passwd *pw) FAST_FUNC;
     
    12221296extern char *pw_encrypt(const char *clear, const char *salt, int cleanup) FAST_FUNC;
    12231297extern int obscure(const char *old, const char *newval, const struct passwd *pwdp) FAST_FUNC;
    1224 /* rnd is additional random input. New one is returned.
     1298/*
     1299 * rnd is additional random input. New one is returned.
    12251300 * Useful if you call crypt_make_salt many times in a row:
    12261301 * rnd = crypt_make_salt(buf1, 4, 0);
     
    12291304 * (otherwise we risk having same salt generated)
    12301305 */
    1231 extern int crypt_make_salt(char *p, int cnt, int rnd) FAST_FUNC;
     1306extern int crypt_make_salt(char *p, int cnt /*, int rnd*/) FAST_FUNC;
     1307/* "$N$" + sha_salt_16_bytes + NUL */
     1308#define MAX_PW_SALT_LEN (3 + 16 + 1)
     1309extern char* crypt_make_pw_salt(char p[MAX_PW_SALT_LEN], const char *algo) FAST_FUNC;
     1310
    12321311
    12331312/* Returns number of lines changed, or -1 on error */
     
    12761355#ifdef __GLIBC__
    12771356/* At least glibc has horrendously large inline for this, so wrap it */
    1278 unsigned long long bb_makedev(unsigned int major, unsigned int minor) FAST_FUNC;
     1357unsigned long long bb_makedev(unsigned major, unsigned minor) FAST_FUNC;
    12791358#undef makedev
    12801359#define makedev(a,b) bb_makedev(a,b)
     
    12971376    KEYCODE_PAGEUP   = -10,
    12981377    KEYCODE_PAGEDOWN = -11,
    1299 
    1300     KEYCODE_CTRL_UP    = KEYCODE_UP    & ~0x40,
    1301     KEYCODE_CTRL_DOWN  = KEYCODE_DOWN  & ~0x40,
     1378    // -12 is reserved for Alt/Ctrl/Shift-TAB
     1379#if 0
     1380    KEYCODE_FUN1     = -13,
     1381    KEYCODE_FUN2     = -14,
     1382    KEYCODE_FUN3     = -15,
     1383    KEYCODE_FUN4     = -16,
     1384    KEYCODE_FUN5     = -17,
     1385    KEYCODE_FUN6     = -18,
     1386    KEYCODE_FUN7     = -19,
     1387    KEYCODE_FUN8     = -20,
     1388    KEYCODE_FUN9     = -21,
     1389    KEYCODE_FUN10    = -22,
     1390    KEYCODE_FUN11    = -23,
     1391    KEYCODE_FUN12    = -24,
     1392#endif
     1393    /* Be sure that last defined value is small enough
     1394     * to not interfere with Alt/Ctrl/Shift bits.
     1395     * So far we do not exceed -31 (0xfff..fffe1),
     1396     * which gives us three upper bits in LSB to play with.
     1397     */
     1398    //KEYCODE_SHIFT_TAB  = (-12)         & ~0x80,
     1399    //KEYCODE_SHIFT_...  = KEYCODE_...   & ~0x80,
     1400    //KEYCODE_CTRL_UP    = KEYCODE_UP    & ~0x40,
     1401    //KEYCODE_CTRL_DOWN  = KEYCODE_DOWN  & ~0x40,
    13021402    KEYCODE_CTRL_RIGHT = KEYCODE_RIGHT & ~0x40,
    13031403    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
     1404    //KEYCODE_ALT_UP     = KEYCODE_UP    & ~0x20,
     1405    //KEYCODE_ALT_DOWN   = KEYCODE_DOWN  & ~0x20,
     1406    KEYCODE_ALT_RIGHT  = KEYCODE_RIGHT & ~0x20,
     1407    KEYCODE_ALT_LEFT   = KEYCODE_LEFT  & ~0x20,
     1408
    13181409    KEYCODE_CURSOR_POS = -0x100, /* 0xfff..fff00 */
    13191410    /* How long is the longest ESC sequence we know?
     
    13421433#if ENABLE_FEATURE_EDITING
    13431434/* It's NOT just ENABLEd or disabled. It's a number: */
    1344 # ifdef CONFIG_FEATURE_EDITING_HISTORY
     1435# if defined CONFIG_FEATURE_EDITING_HISTORY && CONFIG_FEATURE_EDITING_HISTORY > 0
    13451436#  define MAX_HISTORY (CONFIG_FEATURE_EDITING_HISTORY + 0)
     1437unsigned size_from_HISTFILESIZE(const char *hp);
    13461438# else
    13471439#  define MAX_HISTORY 0
     
    13531445    int cnt_history;
    13541446    int cur_history;
     1447    int max_history; /* must never be <= 0 */
    13551448#  if ENABLE_FEATURE_EDITING_SAVEHISTORY
     1449    /* meaning of this field depends on FEATURE_EDITING_SAVE_ON_EXIT:
     1450     * if !FEATURE_EDITING_SAVE_ON_EXIT: "how many lines are
     1451     * in on-disk history"
     1452     * if FEATURE_EDITING_SAVE_ON_EXIT: "how many in-memory lines are
     1453     * also in on-disk history (and thus need to be skipped on save)"
     1454     */
    13561455    unsigned cnt_history_in_file;
    13571456    const char *hist_file;
     
    13611460} line_input_t;
    13621461enum {
    1363     DO_HISTORY = 1 * (MAX_HISTORY > 0),
    1364     SAVE_HISTORY = 2 * (MAX_HISTORY > 0) * ENABLE_FEATURE_EDITING_SAVEHISTORY,
    1365     TAB_COMPLETION = 4 * ENABLE_FEATURE_TAB_COMPLETION,
    1366     USERNAME_COMPLETION = 8 * ENABLE_FEATURE_USERNAME_COMPLETION,
    1367     VI_MODE = 0x10 * ENABLE_FEATURE_EDITING_VI,
    1368     WITH_PATH_LOOKUP = 0x20,
    1369     FOR_SHELL = DO_HISTORY | SAVE_HISTORY | TAB_COMPLETION | USERNAME_COMPLETION,
     1462    DO_HISTORY       = 1 * (MAX_HISTORY > 0),
     1463    TAB_COMPLETION   = 2 * ENABLE_FEATURE_TAB_COMPLETION,
     1464    USERNAME_COMPLETION = 4 * ENABLE_FEATURE_USERNAME_COMPLETION,
     1465    VI_MODE          = 8 * ENABLE_FEATURE_EDITING_VI,
     1466    WITH_PATH_LOOKUP = 0x10,
     1467    FOR_SHELL        = DO_HISTORY | TAB_COMPLETION | USERNAME_COMPLETION,
    13701468};
    13711469line_input_t *new_line_input_t(int flags) FAST_FUNC;
    13721470/* So far static: void free_line_input_t(line_input_t *n) FAST_FUNC; */
    1373 /* maxsize must be >= 2.
     1471/*
     1472 * maxsize must be >= 2.
    13741473 * Returns:
    13751474 * -1 on read errors or EOF, or on bare Ctrl-D,
     
    13771476 * >0 length of input string, including terminating '\n'
    13781477 */
    1379 int read_line_input(const char* prompt, char* command, int maxsize, line_input_t *state) FAST_FUNC;
     1478int read_line_input(line_input_t *st, const char *prompt, char *command, int maxsize, int timeout) FAST_FUNC;
     1479# if ENABLE_FEATURE_EDITING_SAVE_ON_EXIT
     1480void save_history(line_input_t *st);
     1481# endif
    13801482#else
    13811483#define MAX_HISTORY 0
    13821484int read_line_input(const char* prompt, char* command, int maxsize) FAST_FUNC;
    1383 #define read_line_input(prompt, command, maxsize, state) \
     1485#define read_line_input(state, prompt, command, maxsize, timeout) \
    13841486    read_line_input(prompt, command, maxsize)
    13851487#endif
     
    14151517#endif
    14161518int FAST_FUNC procps_read_smaps(pid_t pid, struct smaprec *total,
    1417               void (*cb)(struct smaprec *, void *), void *data);
     1519        void (*cb)(struct smaprec *, void *), void *data);
    14181520
    14191521typedef struct procps_status_t {
     
    14271529    char *exe;
    14281530    IF_SELINUX(char *context;)
     1531    IF_FEATURE_SHOW_THREADS(unsigned main_thread_pid;)
    14291532    /* Everything below must contain no ptrs to malloc'ed data:
    14301533     * it is memset(0) for each process in procps_scan() */
     
    14881591    PSSCAN_RUIDGID  = (1 << 21) * ENABLE_FEATURE_PS_ADDITIONAL_COLUMNS,
    14891592    PSSCAN_TASKS    = (1 << 22) * ENABLE_FEATURE_SHOW_THREADS,
    1490     /* These are all retrieved from proc/NN/stat in one go: */
    1491     PSSCAN_STAT     = PSSCAN_PPID | PSSCAN_PGID | PSSCAN_SID
    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
    14971593};
    14981594//procps_status_t* alloc_procps_scan(void) FAST_FUNC;
     
    15081604
    15091605
    1510 extern const char bb_uuenc_tbl_base64[];
    1511 extern const char bb_uuenc_tbl_std[];
     1606/* Use strict=1 if you process input from untrusted source:
     1607 * it will return NULL on invalid %xx (bad hex chars)
     1608 * and str + 1 if decoded char is / or NUL.
     1609 * In non-strict mode, it always succeeds (returns str),
     1610 * and also it additionally decoded '+' to space.
     1611 */
     1612char *percent_decode_in_place(char *str, int strict) FAST_FUNC;
     1613
     1614
     1615extern const char bb_uuenc_tbl_base64[] ALIGN1;
     1616extern const char bb_uuenc_tbl_std[] ALIGN1;
    15121617void bb_uuencode(char *store, const void *s, int length, const char *tbl) FAST_FUNC;
    15131618enum {
     
    15161621    BASE64_FLAG_NO_STOP_CHAR = 0x80,
    15171622};
    1518 void FAST_FUNC read_base64(FILE *src_stream, FILE *dst_stream, int flags);
     1623const char *decode_base64(char **pp_dst, const char *src) FAST_FUNC;
     1624void read_base64(FILE *src_stream, FILE *dst_stream, int flags) FAST_FUNC;
    15191625
    15201626typedef struct md5_ctx_t {
     
    15311637    uint8_t wbuffer[128]; /* always correctly aligned for uint64_t */
    15321638} sha512_ctx_t;
     1639typedef struct sha3_ctx_t {
     1640    uint64_t state[25];
     1641    unsigned bytes_queued;
     1642} sha3_ctx_t;
    15331643void md5_begin(md5_ctx_t *ctx) FAST_FUNC;
    1534 void md5_hash(md5_ctx_t *ctx, const void *data, size_t length) FAST_FUNC;
     1644void md5_hash(md5_ctx_t *ctx, const void *buffer, size_t len) FAST_FUNC;
    15351645void md5_end(md5_ctx_t *ctx, void *resbuf) FAST_FUNC;
    15361646void sha1_begin(sha1_ctx_t *ctx) FAST_FUNC;
     
    15431653void sha512_hash(sha512_ctx_t *ctx, const void *buffer, size_t len) FAST_FUNC;
    15441654void sha512_end(sha512_ctx_t *ctx, void *resbuf) FAST_FUNC;
     1655void sha3_begin(sha3_ctx_t *ctx) FAST_FUNC;
     1656void sha3_hash(sha3_ctx_t *ctx, const void *buffer, size_t len) FAST_FUNC;
     1657void sha3_end(sha3_ctx_t *ctx, void *resbuf) FAST_FUNC;
    15451658
    15461659extern uint32_t *global_crc32_table;
     
    15581671
    15591672typedef struct bb_progress_t {
    1560     off_t lastsize;
    1561     unsigned lastupdate_sec;
     1673    unsigned last_size;
     1674    unsigned last_update_sec;
     1675    unsigned last_change_sec;
    15621676    unsigned start_sec;
    1563     smallint inited;
     1677    const char *curfile;
    15641678} bb_progress_t;
    15651679
    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;
     1680#define is_bb_progress_inited(p) ((p)->curfile != NULL)
     1681#define bb_progress_free(p) do { \
     1682    if (ENABLE_UNICODE_SUPPORT) free((char*)((p)->curfile)); \
     1683    (p)->curfile = NULL; \
     1684} while (0)
     1685void bb_progress_init(bb_progress_t *p, const char *curfile) FAST_FUNC;
     1686void bb_progress_update(bb_progress_t *p,
     1687            uoff_t beg_range,
     1688            uoff_t transferred,
     1689            uoff_t totalsize) FAST_FUNC;
     1690
    15701691
    15711692extern const char *applet_name;
     
    15811702 */
    15821703/* "BusyBox vN.N.N (timestamp or extra_version)" */
    1583 extern const char bb_banner[];
    1584 extern const char bb_msg_memory_exhausted[];
    1585 extern const char bb_msg_invalid_date[];
     1704extern const char bb_banner[] ALIGN1;
     1705extern const char bb_msg_memory_exhausted[] ALIGN1;
     1706extern const char bb_msg_invalid_date[] ALIGN1;
    15861707#define bb_msg_read_error "read error"
    15871708#define bb_msg_write_error "write error"
    1588 extern const char bb_msg_unknown[];
    1589 extern const char bb_msg_can_not_create_raw_socket[];
    1590 extern const char bb_msg_perm_denied_are_you_root[];
    1591 extern const char bb_msg_you_must_be_root[];
    1592 extern const char bb_msg_requires_arg[];
    1593 extern const char bb_msg_invalid_arg[];
    1594 extern const char bb_msg_standard_input[];
    1595 extern const char bb_msg_standard_output[];
     1709extern const char bb_msg_unknown[] ALIGN1;
     1710extern const char bb_msg_can_not_create_raw_socket[] ALIGN1;
     1711extern const char bb_msg_perm_denied_are_you_root[] ALIGN1;
     1712extern const char bb_msg_you_must_be_root[] ALIGN1;
     1713extern const char bb_msg_requires_arg[] ALIGN1;
     1714extern const char bb_msg_invalid_arg[] ALIGN1;
     1715extern const char bb_msg_standard_input[] ALIGN1;
     1716extern const char bb_msg_standard_output[] ALIGN1;
    15961717
    15971718/* NB: (bb_hexdigits_upcase[i] | 0x20) -> lowercase hex digit */
    1598 extern const char bb_hexdigits_upcase[];
    1599 
    1600 extern const char bb_path_wtmp_file[];
     1719extern const char bb_hexdigits_upcase[] ALIGN1;
     1720
     1721extern const char bb_path_wtmp_file[] ALIGN1;
    16011722
    16021723/* Busybox mount uses either /proc/mounts or /etc/mtab to
     
    16041725#define bb_path_mtab_file IF_FEATURE_MTAB_SUPPORT("/etc/mtab")IF_NOT_FEATURE_MTAB_SUPPORT("/proc/mounts")
    16051726
    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"
     1727#define bb_path_passwd_file  _PATH_PASSWD
     1728#define bb_path_group_file   _PATH_GROUP
     1729#define bb_path_shadow_file  _PATH_SHADOW
     1730#define bb_path_gshadow_file _PATH_GSHADOW
    16101731
    16111732#define bb_path_motd_file "/etc/motd"
    16121733
    16131734#define bb_dev_null "/dev/null"
    1614 extern const char bb_busybox_exec_path[];
     1735extern const char bb_busybox_exec_path[] ALIGN1;
    16151736/* util-linux manpage says /sbin:/bin:/usr/sbin:/usr/bin,
    16161737 * but I want to save a few bytes here */
    1617 extern const char bb_PATH_root_path[]; /* "PATH=/sbin:/usr/sbin:/bin:/usr/bin" */
     1738extern const char bb_PATH_root_path[] ALIGN1; /* "PATH=/sbin:/usr/sbin:/bin:/usr/bin" */
    16181739#define bb_default_root_path (bb_PATH_root_path + sizeof("PATH"))
    16191740#define bb_default_path      (bb_PATH_root_path + sizeof("PATH=/sbin:/usr/sbin"))
     
    16451766 * don't forget to change increment constant. */
    16461767#define LIBBB_DEFAULT_LOGIN_SHELL  "-/bin/sh"
    1647 extern const char bb_default_login_shell[];
     1768extern const char bb_default_login_shell[] ALIGN1;
    16481769/* "/bin/sh" */
    16491770#define DEFAULT_SHELL              (bb_default_login_shell+1)
  • branches/3.2/mindi-busybox/include/platform.h

    r3085 r3232  
    88#define BB_PLATFORM_H 1
    99
    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
    2210
    2311/* Convenience macros to test the version of gcc. */
     
    3624# endif
    3725#endif
    38 
    39 /* Define macros for some gcc attributes.  This permits us to use the
    40    macros freely, and know that they will come into play for the
    41    version of gcc in which they are supported.  */
    4226
    4327#if !__GNUC_PREREQ(2,7)
     
    9478
    9579/* -fwhole-program makes all symbols local. The attribute externally_visible
    96    forces a symbol global.  */
     80 * forces a symbol global.  */
    9781#if __GNUC_PREREQ(4,1)
    9882# define EXTERNALLY_VISIBLE __attribute__(( visibility("default") ))
     
    11094
    11195/* We use __extension__ in some places to suppress -pedantic warnings
    112    about GCC extensions.  This feature didn't work properly before
    113    gcc 2.8.  */
     96 * about GCC extensions.  This feature didn't work properly before
     97 * gcc 2.8.  */
    11498#if !__GNUC_PREREQ(2,8)
    11599# ifndef __extension__
    116100#  define __extension__
    117 # endif
    118 #endif
    119 
    120 /* gcc-2.95 had no va_copy but only __va_copy. */
    121 #if !__GNUC_PREREQ(3,0)
    122 # include <stdarg.h>
    123 # if !defined va_copy && defined __va_copy
    124 #  define va_copy(d,s) __va_copy((d),(s))
    125101# endif
    126102#endif
     
    141117/* Make all declarations hidden (-fvisibility flag only affects definitions) */
    142118/* (don't include system headers after this until corresponding pop!) */
    143 #if __GNUC_PREREQ(4,1)
     119#if __GNUC_PREREQ(4,1) && !defined(__CYGWIN__)
    144120# define PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN _Pragma("GCC visibility push(hidden)")
    145121# define POP_SAVED_FUNCTION_VISIBILITY              _Pragma("GCC visibility pop")
     
    148124# define POP_SAVED_FUNCTION_VISIBILITY
    149125#endif
     126
     127/* gcc-2.95 had no va_copy but only __va_copy. */
     128#if !__GNUC_PREREQ(3,0)
     129# include <stdarg.h>
     130# if !defined va_copy && defined __va_copy
     131#  define va_copy(d,s) __va_copy((d),(s))
     132# endif
     133#endif
     134
    150135
    151136/* ---- Endian Detection ------------------------------------ */
     
    216201#endif
    217202
     203
    218204/* ---- Unaligned access ------------------------------------ */
     205
     206#include <stdint.h>
     207typedef int      bb__aliased_int      FIX_ALIASING;
     208typedef long     bb__aliased_long     FIX_ALIASING;
     209typedef uint16_t bb__aliased_uint16_t FIX_ALIASING;
     210typedef uint32_t bb__aliased_uint32_t FIX_ALIASING;
    219211
    220212/* NB: unaligned parameter should be a pointer, aligned one -
     
    222214 */
    223215#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))
     216# define move_from_unaligned_int(v, intp)  ((v) = *(bb__aliased_int*)(intp))
     217# define move_from_unaligned_long(v, longp) ((v) = *(bb__aliased_long*)(longp))
    229218# define move_from_unaligned16(v, u16p) ((v) = *(bb__aliased_uint16_t*)(u16p))
    230219# define move_from_unaligned32(v, u32p) ((v) = *(bb__aliased_uint32_t*)(u32p))
     
    235224/* performs reasonably well (gcc usually inlines memcpy here) */
    236225# define move_from_unaligned_int(v, intp) (memcpy(&(v), (intp), sizeof(int)))
     226# define move_from_unaligned_long(v, longp) (memcpy(&(v), (longp), sizeof(long)))
    237227# define move_from_unaligned16(v, u16p) (memcpy(&(v), (u16p), 2))
    238228# define move_from_unaligned32(v, u32p) (memcpy(&(v), (u32p), 4))
    239229# define move_to_unaligned16(u16p, v) do { \
    240230    uint16_t __t = (v); \
    241     memcpy((u16p), &__t, 4); \
     231    memcpy((u16p), &__t, 2); \
    242232} while (0)
    243233# define move_to_unaligned32(u32p, v) do { \
     
    247237#endif
    248238
    249 /* ---- Compiler dependent settings ------------------------- */
    250 
    251 #if (defined __digital__ && defined __unix__) \
    252  || defined __APPLE__ \
    253  || defined __FreeBSD__ || defined __OpenBSD__ || defined __NetBSD__
    254 # undef HAVE_MNTENT_H
    255 # undef HAVE_SYS_STATFS_H
    256 #else
    257 # define HAVE_MNTENT_H 1
    258 /*  Patch bco to compile this busybox on rhel3  */
    259 #include <linux/version.h>
    260 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
    261 # define HAVE_SYS_STATFS_H 1
    262 #endif
    263 #endif
    264 
    265 /*----- Kernel versioning ------------------------------------*/
    266 
    267 #ifndef KERNEL_VERSION
    268 #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
    269 #endif
    270 
    271 /* ---- Miscellaneous --------------------------------------- */
    272 
    273 #if defined __GLIBC__ || defined __UCLIBC__ \
    274  || defined __dietlibc__ || defined _NEWLIB_VERSION
    275 # include <features.h>
    276 #endif
    277 
    278 /* Size-saving "small" ints (arch-dependent) */
     239
     240/* ---- Size-saving "small" ints (arch-dependent) ----------- */
     241
    279242#if defined(i386) || defined(__x86_64__) || defined(__mips__) || defined(__cris__)
    280243/* add other arches which benefit from this... */
     
    296259#endif
    297260
    298 /* Try to defeat gcc's alignment of "char message[]"-like data */
    299 #if 1 /* if needed: !defined(arch1) && !defined(arch2) */
     261
     262/*----- Kernel versioning ------------------------------------*/
     263
     264#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
     265
     266
     267/* ---- Miscellaneous --------------------------------------- */
     268
     269#if defined __GLIBC__ \
     270 || defined __UCLIBC__ \
     271 || defined __dietlibc__ \
     272 || defined __BIONIC__ \
     273 || defined _NEWLIB_VERSION
     274# include <features.h>
     275#endif
     276
     277/* Define bb_setpgrp */
     278#if defined(__digital__) && defined(__unix__)
     279/* use legacy setpgrp(pid_t, pid_t) for now.  move to platform.c */
     280# define bb_setpgrp() do { pid_t __me = getpid(); setpgrp(__me, __me); } while (0)
     281#else
     282# define bb_setpgrp() setpgrp()
     283#endif
     284
     285/* fdprintf is more readable, we used it before dprintf was standardized */
     286#include <unistd.h>
     287#define fdprintf dprintf
     288
     289/* Useful for defeating gcc's alignment of "char message[]"-like data */
     290#if !defined(__s390__)
     291    /* on s390[x], non-word-aligned data accesses require larger code */
    300292# define ALIGN1 __attribute__((aligned(1)))
    301293# define ALIGN2 __attribute__((aligned(2)))
     
    308300#endif
    309301
    310 
    311 /* uclibc does not implement daemon() for no-mmu systems.
     302/*
    312303 * For 0.9.29 and svn, __ARCH_USE_MMU__ indicates no-mmu reliably.
    313304 * For earlier versions there is no reliable way to check if we are building
     
    326317#endif
    327318
    328 /* Don't use lchown with glibc older than 2.1.x */
    329 #if defined(__GLIBC__) && __GLIBC__ <= 2 && __GLIBC_MINOR__ < 1
    330 # define lchown chown
    331 #endif
    332 
    333319#if defined(__digital__) && defined(__unix__)
    334 
    335320# include <standards.h>
    336321# include <inttypes.h>
    337322# define PRIu32 "u"
    338 /* use legacy setpgrp(pid_t,pid_t) for now.  move to platform.c */
    339 # define bb_setpgrp() do { pid_t __me = getpid(); setpgrp(__me, __me); } while (0)
    340323# if !defined ADJ_OFFSET_SINGLESHOT && defined MOD_CLKA && defined MOD_OFFSET
    341324#  define ADJ_OFFSET_SINGLESHOT (MOD_CLKA | MOD_OFFSET)
     
    350333#  define ADJ_TICK MOD_CLKB
    351334# endif
    352 
    353 #else
    354 
    355 # define bb_setpgrp() setpgrp()
    356 
    357 #endif
    358 
    359 #if defined(__GLIBC__)
    360 # define fdprintf dprintf
     335#endif
     336
     337#if defined(__CYGWIN__)
     338# define MAXSYMLINKS SYMLOOP_MAX
     339#endif
     340
     341#if defined(ANDROID) || defined(__ANDROID__)
     342# define BB_ADDITIONAL_PATH ":/system/sbin:/system/bin:/system/xbin"
     343# define SYS_ioprio_set __NR_ioprio_set
     344# define SYS_ioprio_get __NR_ioprio_get
     345#endif
     346
     347
     348/* ---- Who misses what? ------------------------------------ */
     349
     350/* Assume all these functions and header files exist by default.
     351 * Platforms where it is not true will #undef them below.
     352 */
     353#define HAVE_CLEARENV 1
     354#define HAVE_FDATASYNC 1
     355#define HAVE_DPRINTF 1
     356#define HAVE_MEMRCHR 1
     357#define HAVE_MKDTEMP 1
     358#define HAVE_PTSNAME_R 1
     359#define HAVE_SETBIT 1
     360#define HAVE_SIGHANDLER_T 1
     361#define HAVE_STPCPY 1
     362#define HAVE_STRCASESTR 1
     363#define HAVE_STRCHRNUL 1
     364#define HAVE_STRSEP 1
     365#define HAVE_STRSIGNAL 1
     366#define HAVE_STRVERSCMP 1
     367#define HAVE_VASPRINTF 1
     368#define HAVE_UNLOCKED_STDIO 1
     369#define HAVE_UNLOCKED_LINE_OPS 1
     370#define HAVE_GETLINE 1
     371#define HAVE_XTABS 1
     372#define HAVE_MNTENT_H 1
     373#define HAVE_NET_ETHERNET_H 1
     374#define HAVE_SYS_STATFS_H 1
     375
     376#if defined(__UCLIBC_MAJOR__)
     377# if __UCLIBC_MAJOR__ == 0 \
     378  && (   __UCLIBC_MINOR__ < 9 \
     379     || (__UCLIBC_MINOR__ == 9 && __UCLIBC_SUBLEVEL__ < 32) \
     380     )
     381#  undef HAVE_STRVERSCMP
     382# endif
    361383#endif
    362384
     
    366388
    367389#if defined(__WATCOMC__)
    368 # undef HAVE_FDPRINTF
     390# undef HAVE_DPRINTF
     391# undef HAVE_GETLINE
    369392# undef HAVE_MEMRCHR
    370393# undef HAVE_MKDTEMP
    371394# undef HAVE_SETBIT
     395# undef HAVE_STPCPY
    372396# undef HAVE_STRCASESTR
    373397# undef HAVE_STRCHRNUL
    374398# undef HAVE_STRSEP
    375399# undef HAVE_STRSIGNAL
     400# undef HAVE_STRVERSCMP
    376401# undef HAVE_VASPRINTF
     402# undef HAVE_UNLOCKED_STDIO
     403# undef HAVE_UNLOCKED_LINE_OPS
     404# undef HAVE_NET_ETHERNET_H
     405#endif
     406
     407#if defined(__CYGWIN__)
     408# undef HAVE_CLEARENV
     409# undef HAVE_FDPRINTF
     410# undef HAVE_MEMRCHR
     411# undef HAVE_PTSNAME_R
     412# undef HAVE_STRVERSCMP
     413# undef HAVE_UNLOCKED_LINE_OPS
     414#endif
     415
     416/* These BSD-derived OSes share many similarities */
     417#if (defined __digital__ && defined __unix__) \
     418 || defined __APPLE__ \
     419 || defined __FreeBSD__ || defined __OpenBSD__ || defined __NetBSD__
     420# undef HAVE_CLEARENV
     421# undef HAVE_FDATASYNC
     422# undef HAVE_GETLINE
     423# undef HAVE_MNTENT_H
     424# undef HAVE_PTSNAME_R
     425# undef HAVE_SYS_STATFS_H
     426# undef HAVE_SIGHANDLER_T
     427# undef HAVE_STRVERSCMP
     428# undef HAVE_XTABS
     429# undef HAVE_DPRINTF
     430# undef HAVE_UNLOCKED_STDIO
     431# undef HAVE_UNLOCKED_LINE_OPS
    377432#endif
    378433
    379434#if defined(__FreeBSD__)
    380435# undef HAVE_STRCHRNUL
     436#endif
     437
     438#if defined(__NetBSD__)
     439# define HAVE_GETLINE 1  /* Recent NetBSD versions have getline() */
     440#endif
     441
     442#if defined(__digital__) && defined(__unix__)
     443# undef HAVE_STPCPY
     444#endif
     445
     446#if defined(ANDROID) || defined(__ANDROID__)
     447# undef HAVE_DPRINTF
     448# undef HAVE_GETLINE
     449# undef HAVE_STPCPY
     450# undef HAVE_STRCHRNUL
     451# undef HAVE_STRVERSCMP
     452# undef HAVE_UNLOCKED_LINE_OPS
     453# undef HAVE_NET_ETHERNET_H
    381454#endif
    382455
     
    386459 */
    387460
    388 #ifndef HAVE_FDPRINTF
    389 extern int fdprintf(int fd, const char *format, ...);
     461#ifndef HAVE_DPRINTF
     462extern int dprintf(int fd, const char *format, ...);
    390463#endif
    391464
     
    403476#endif
    404477
     478#ifndef HAVE_SIGHANDLER_T
     479typedef void (*sighandler_t)(int);
     480#endif
     481
     482#ifndef HAVE_STPCPY
     483extern char *stpcpy(char *p, const char *to_add) FAST_FUNC;
     484#endif
     485
    405486#ifndef HAVE_STRCASESTR
    406487extern char *strcasestr(const char *s, const char *pattern) FAST_FUNC;
     
    424505#endif
    425506
    426 #endif
     507#ifndef HAVE_GETLINE
     508# include <stdio.h> /* for FILE */
     509# include <sys/types.h> /* size_t */
     510extern ssize_t getline(char **lineptr, size_t *n, FILE *stream) FAST_FUNC;
     511#endif
     512
     513#endif
  • branches/3.2/mindi-busybox/include/pwd_.h

    r2725 r3232  
    3131 * so that function calls are directed to bb_internal_XXX replacements
    3232 */
    33 
     33#undef endpwent
    3434#define setpwent    bb_internal_setpwent
    3535#define endpwent    bb_internal_endpwent
     
    6464/* Write the given entry onto the given stream.  */
    6565extern int putpwent(const struct passwd *__restrict __p,
    66              FILE *__restrict __f);
     66        FILE *__restrict __f);
    6767#endif
    6868
     
    8282
    8383extern int getpwent_r(struct passwd *__restrict __resultbuf,
    84                char *__restrict __buffer, size_t __buflen,
    85                struct passwd **__restrict __result);
     84        char *__restrict __buffer, size_t __buflen,
     85        struct passwd **__restrict __result);
    8686
    8787extern int getpwuid_r(uid_t __uid,
    88                struct passwd *__restrict __resultbuf,
    89                char *__restrict __buffer, size_t __buflen,
    90                struct passwd **__restrict __result);
     88        struct passwd *__restrict __resultbuf,
     89        char *__restrict __buffer, size_t __buflen,
     90        struct passwd **__restrict __result);
    9191
    9292extern int getpwnam_r(const char *__restrict __name,
    93                struct passwd *__restrict __resultbuf,
    94                char *__restrict __buffer, size_t __buflen,
    95                struct passwd **__restrict __result);
     93        struct passwd *__restrict __resultbuf,
     94        char *__restrict __buffer, size_t __buflen,
     95        struct passwd **__restrict __result);
    9696
    9797/* Read an entry from STREAM.  This function is not standardized and
    9898   probably never will.  */
    9999extern int fgetpwent_r(FILE *__restrict __stream,
    100             struct passwd *__restrict __resultbuf,
    101             char *__restrict __buffer, size_t __buflen,
    102             struct passwd **__restrict __result);
     100        struct passwd *__restrict __resultbuf,
     101        char *__restrict __buffer, size_t __buflen,
     102        struct passwd **__restrict __result);
    103103
    104104POP_SAVED_FUNCTION_VISIBILITY
  • branches/3.2/mindi-busybox/include/shadow_.h

    r2725 r3232  
    3737    unsigned long sp_flag;  /* Reserved */
    3838};
    39 
    40 /* Paths to the user database files */
    41 #ifndef _PATH_SHADOW
    42 #define _PATH_SHADOW "/etc/shadow"
    43 #endif
    4439
    4540#define setspent    bb_internal_setspent
     
    8580/* Reentrant versions of some of the functions above */
    8681extern int getspent_r(struct spwd *__result_buf, char *__buffer,
    87                size_t __buflen, struct spwd **__result);
     82        size_t __buflen, struct spwd **__result);
    8883#endif
    8984
    9085extern int getspnam_r(const char *__name, struct spwd *__result_buf,
    91                char *__buffer, size_t __buflen,
    92                struct spwd **__result);
     86        char *__buffer, size_t __buflen,
     87        struct spwd **__result);
    9388
    9489#ifdef UNUSED_FOR_NOW
    9590extern int sgetspent_r(const char *__string, struct spwd *__result_buf,
    96             char *__buffer, size_t __buflen,
    97             struct spwd **__result);
     91        char *__buffer, size_t __buflen,
     92        struct spwd **__result);
    9893
    9994extern int fgetspent_r(FILE *__stream, struct spwd *__result_buf,
    100             char *__buffer, size_t __buflen,
    101             struct spwd **__result);
     95        char *__buffer, size_t __buflen,
     96        struct spwd **__result);
    10297/* Protect password file against multi writers */
    10398extern int lckpwdf(void);
  • branches/3.2/mindi-busybox/include/unicode.h

    r2725 r3232  
    2828# define unicode_status UNICODE_OFF
    2929# define init_unicode() ((void)0)
     30# define reinit_unicode(LANG) ((void)0)
    3031
    3132#else
     
    6162//UNUSED: char* FAST_FUNC unicode_conv_to_printable2(uni_stat_t *stats, const char *src, unsigned width, int flags);
    6263char* FAST_FUNC unicode_conv_to_printable(uni_stat_t *stats, const char *src);
    63 char* FAST_FUNC unicode_conv_to_printable_maxwidth(uni_stat_t *stats, const char *src, unsigned maxwidth);
    64 char* FAST_FUNC unicode_conv_to_printable_fixedwidth(uni_stat_t *stats, const char *src, unsigned width);
     64//UNUSED: char* FAST_FUNC unicode_conv_to_printable_maxwidth(uni_stat_t *stats, const char *src, unsigned maxwidth);
     65char* FAST_FUNC unicode_conv_to_printable_fixedwidth(/*uni_stat_t *stats,*/ const char *src, unsigned width);
    6566
    6667# if ENABLE_UNICODE_USING_LOCALE
     
    6869extern uint8_t unicode_status;
    6970void init_unicode(void) FAST_FUNC;
     71void reinit_unicode(const char *LANG) FAST_FUNC;
    7072
    7173# else
     
    7678#   define unicode_status UNICODE_ON
    7779#   define init_unicode() ((void)0)
     80#   define reinit_unicode(LANG) ((void)0)
    7881#  else
    7982extern uint8_t unicode_status;
    8083void init_unicode(void) FAST_FUNC;
     84void reinit_unicode(const char *LANG) FAST_FUNC;
    8185#  endif
    8286
  • branches/3.2/mindi-busybox/include/usage.src.h

    r2725 r3232  
    1313#define BB_USAGE_H 1
    1414
    15 
    1615#define NOUSAGE_STR "\b"
    1716
    1817INSERT
    1918
    20 #define acpid_trivial_usage \
    21        "[-d] [-c CONFDIR] [-l LOGFILE] [-a ACTIONFILE] [-M MAPFILE] [-e PROC_EVENT_FILE] [-p PIDFILE]"
    22 #define acpid_full_usage "\n\n" \
    23        "Listen to ACPI events and spawn specific helpers on event arrival\n" \
    24      "\nOptions:" \
    25      "\n    -c DIR  Config directory [/etc/acpi]" \
    26      "\n    -d  Don't daemonize, (implies -f)" \
    27      "\n    -e FILE /proc event file [/proc/acpi/event]" \
    28      "\n    -f  Run in foreground" \
    29      "\n    -l FILE Log file [/var/log/acpid.log]" \
    30      "\n    -p FILE Pid file [/var/run/acpid.pid]" \
    31      "\n    -a FILE Action file [/etc/acpid.conf]" \
    32      "\n    -M FILE Map file [/etc/acpi.map]" \
    33     IF_FEATURE_ACPID_COMPAT( \
    34      "\n\nAccept and ignore compatibility options -g -m -s -S -v" \
    35     )
    36 
    37 #define acpid_example_usage \
    38        "Without -e option, acpid uses all /dev/input/event* files\n" \
    39        "# acpid\n" \
    40        "# acpid -l /var/log/my-acpi-log\n" \
    41        "# acpid -e /proc/acpi/event\n"
    42 
    43 #define addgroup_trivial_usage \
    44        "[-g GID] " IF_FEATURE_ADDUSER_TO_GROUP("[USER] ") "GROUP"
    45 #define addgroup_full_usage "\n\n" \
    46        "Add a group " IF_FEATURE_ADDUSER_TO_GROUP("or add a user to a group") "\n" \
    47      "\nOptions:" \
    48      "\n    -g GID  Group id" \
    49      "\n    -S  Create a system group" \
    50 
    51 #define adduser_trivial_usage \
    52        "[OPTIONS] USER"
    53 #define adduser_full_usage "\n\n" \
    54        "Add a user\n" \
    55      "\nOptions:" \
    56      "\n    -h DIR      Home directory" \
    57      "\n    -g GECOS    GECOS field" \
    58      "\n    -s SHELL    Login shell" \
    59      "\n    -G GRP      Add user to existing group" \
    60      "\n    -S      Create a system user" \
    61      "\n    -D      Don't assign a password" \
    62      "\n    -H      Don't create home directory" \
    63      "\n    -u UID      User id" \
    64 
    65 #define adjtimex_trivial_usage \
    66        "[-q] [-o OFF] [-f FREQ] [-p TCONST] [-t TICK]"
    67 #define adjtimex_full_usage "\n\n" \
    68        "Read and optionally set system timebase parameters. See adjtimex(2)\n" \
    69      "\nOptions:" \
    70      "\n    -q  Quiet" \
    71      "\n    -o OFF  Time offset, microseconds" \
    72      "\n    -f FREQ Frequency adjust, integer kernel units (65536 is 1ppm)" \
    73      "\n        (positive values make clock run faster)" \
    74      "\n    -t TICK Microseconds per tick, usually 10000" \
    75      "\n    -p TCONST" \
    76 
    77 #define ar_trivial_usage \
    78        "[-o] [-v] [-p] [-t] [-x] ARCHIVE FILES"
    79 #define ar_full_usage "\n\n" \
    80        "Extract or list FILES from an ar archive\n" \
    81      "\nOptions:" \
    82      "\n    -o  Preserve original dates" \
    83      "\n    -p  Extract to stdout" \
    84      "\n    -t  List" \
    85      "\n    -x  Extract" \
    86      "\n    -v  Verbose" \
    87 
    88 #define arp_trivial_usage \
    89      "\n[-vn]   [-H HWTYPE] [-i IF] -a [HOSTNAME]" \
    90      "\n[-v]            [-i IF] -d HOSTNAME [pub]" \
    91      "\n[-v]    [-H HWTYPE] [-i IF] -s HOSTNAME HWADDR [temp]" \
    92      "\n[-v]    [-H HWTYPE] [-i IF] -s HOSTNAME HWADDR [netmask MASK] pub" \
    93      "\n[-v]    [-H HWTYPE] [-i IF] -Ds HOSTNAME IFACE [netmask MASK] pub"
    94 #define arp_full_usage "\n\n" \
    95        "Manipulate ARP cache\n" \
    96      "\nOptions:" \
    97        "\n  -a      Display (all) hosts" \
    98        "\n  -s      Set new ARP entry" \
    99        "\n  -d      Delete a specified entry" \
    100        "\n  -v      Verbose" \
    101        "\n  -n      Don't resolve names" \
    102        "\n  -i IF       Network interface" \
    103        "\n  -D      Read <hwaddr> from given device" \
    104        "\n  -A,-p AF    Protocol family" \
    105        "\n  -H HWTYPE   Hardware address type" \
    106 
    107 #define arping_trivial_usage \
    108        "[-fqbDUA] [-c CNT] [-w TIMEOUT] [-I IFACE] [-s SRC_IP] DST_IP"
    109 #define arping_full_usage "\n\n" \
    110        "Send ARP requests/replies\n" \
    111      "\nOptions:" \
    112      "\n    -f      Quit on first ARP reply" \
    113      "\n    -q      Quiet" \
    114      "\n    -b      Keep broadcasting, don't go unicast" \
    115      "\n    -D      Duplicated address detection mode" \
    116      "\n    -U      Unsolicited ARP mode, update your neighbors" \
    117      "\n    -A      ARP answer mode, update your neighbors" \
    118      "\n    -c N        Stop after sending N ARP requests" \
    119      "\n    -w TIMEOUT  Time to wait for ARP reply, seconds" \
    120      "\n    -I IFACE    Interface to use (default eth0)" \
    121      "\n    -s SRC_IP   Sender IP address" \
    122      "\n    DST_IP      Target IP address" \
    123 
    124 #define awk_trivial_usage \
    125        "[OPTIONS] [AWK_PROGRAM] [FILE]..."
    126 #define awk_full_usage "\n\n" \
    127        "Options:" \
    128      "\n    -v VAR=VAL  Set variable" \
    129      "\n    -F SEP      Use SEP as field separator" \
    130      "\n    -f FILE     Read program from FILE" \
    131 
    132 #define basename_trivial_usage \
    133        "FILE [SUFFIX]"
    134 #define basename_full_usage "\n\n" \
    135        "Strip directory path and .SUFFIX from FILE\n"
    136 #define basename_example_usage \
    137        "$ basename /usr/local/bin/foo\n" \
    138        "foo\n" \
    139        "$ basename /usr/local/bin/\n" \
    140        "bin\n" \
    141        "$ basename /foo/bar.txt .txt\n" \
    142        "bar"
    143 
    144 #define beep_trivial_usage \
    145        "-f FREQ -l LEN -d DELAY -r COUNT -n"
    146 #define beep_full_usage "\n\n" \
    147        "Options:" \
    148      "\n    -f  Frequency in Hz" \
    149      "\n    -l  Length in ms" \
    150      "\n    -d  Delay in ms" \
    151      "\n    -r  Repetitions" \
    152      "\n    -n  Start new tone" \
    153 
    154 #define blkid_trivial_usage \
    155        ""
    156 #define blkid_full_usage "\n\n" \
    157        "Print UUIDs of all filesystems"
    158 
    159 #define brctl_trivial_usage \
    160        "COMMAND [BRIDGE [INTERFACE]]"
    161 #define brctl_full_usage "\n\n" \
    162        "Manage ethernet bridges\n" \
    163      "\nCommands:" \
    164     IF_FEATURE_BRCTL_SHOW( \
    165      "\n    show            Show a list of bridges" \
    166     ) \
    167      "\n    addbr BRIDGE        Create BRIDGE" \
    168      "\n    delbr BRIDGE        Delete BRIDGE" \
    169      "\n    addif BRIDGE IFACE  Add IFACE to BRIDGE" \
    170      "\n    delif BRIDGE IFACE  Delete IFACE from BRIDGE" \
    171     IF_FEATURE_BRCTL_FANCY( \
    172      "\n    setageing BRIDGE TIME       Set ageing time" \
    173      "\n    setfd BRIDGE TIME       Set bridge forward delay" \
    174      "\n    sethello BRIDGE TIME        Set hello time" \
    175      "\n    setmaxage BRIDGE TIME       Set max message age" \
    176      "\n    setpathcost BRIDGE COST     Set path cost" \
    177      "\n    setportprio BRIDGE PRIO     Set port priority" \
    178      "\n    setbridgeprio BRIDGE PRIO   Set bridge priority" \
    179      "\n    stp BRIDGE [1/yes/on|0/no/off]  STP on/off" \
    180     ) \
    181 
    182 #define bzip2_trivial_usage \
    183        "[OPTIONS] [FILE]..."
    184 #define bzip2_full_usage "\n\n" \
    185        "Compress FILEs (or stdin) with bzip2 algorithm\n" \
    186      "\nOptions:" \
    187      "\n    -1..9   Compression level" \
    188      "\n    -d  Decompress" \
    189      "\n    -c  Write to stdout" \
    190      "\n    -f  Force" \
    191 
    19219#define busybox_notes_usage \
    19320       "Hello world!\n"
    19421
    195 #define lzop_trivial_usage \
    196        "[-cfvd123456789CF] [FILE]..."
    197 #define lzop_full_usage "\n\n" \
    198        "Options:" \
    199      "\n    -1..9   Compression level" \
    200      "\n    -d  Decompress" \
    201      "\n    -c  Write to stdout" \
    202      "\n    -f  Force" \
    203      "\n    -v  Verbose" \
    204      "\n    -F  Don't store or verify checksum" \
    205      "\n    -C  Also write checksum of compressed block" \
    206 
    207 #define lzopcat_trivial_usage \
    208        "[-vCF] [FILE]..."
    209 #define lzopcat_full_usage "\n\n" \
    210        "    -v  Verbose" \
    211      "\n    -F  Don't store or verify checksum" \
    212 
    213 #define unlzop_trivial_usage \
    214        "[-cfvCF] [FILE]..."
    215 #define unlzop_full_usage "\n\n" \
    216        "Options:" \
    217      "\n    -c  Write to stdout" \
    218      "\n    -f  Force" \
    219      "\n    -v  Verbose" \
    220      "\n    -F  Don't store or verify checksum" \
    221 
    222 #define unlzma_trivial_usage \
    223        "[-cf] [FILE]..."
    224 #define unlzma_full_usage "\n\n" \
    225        "Decompress FILE (or stdin)\n" \
    226      "\nOptions:" \
    227      "\n    -c  Write to stdout" \
    228      "\n    -f  Force" \
    229 
    230 #define lzma_trivial_usage \
    231        "-d [-cf] [FILE]..."
    232 #define lzma_full_usage "\n\n" \
    233        "Decompress FILE (or stdin)\n" \
    234      "\nOptions:" \
    235      "\n    -d  Decompress" \
    236      "\n    -c  Write to stdout" \
    237      "\n    -f  Force" \
    238 
    239 #define lzcat_trivial_usage \
    240        "FILE"
    241 #define lzcat_full_usage "\n\n" \
    242        "Decompress to stdout"
    243 
    244 #define unxz_trivial_usage \
    245        "[-cf] [FILE]..."
    246 #define unxz_full_usage "\n\n" \
    247        "Decompress FILE (or stdin)\n" \
    248      "\nOptions:" \
    249      "\n    -c  Write to stdout" \
    250      "\n    -f  Force" \
    251 
    252 #define xz_trivial_usage \
    253        "-d [-cf] [FILE]..."
    254 #define xz_full_usage "\n\n" \
    255        "Decompress FILE (or stdin)\n" \
    256      "\nOptions:" \
    257      "\n    -d  Decompress" \
    258      "\n    -c  Write to stdout" \
    259      "\n    -f  Force" \
    260 
    261 #define xzcat_trivial_usage \
    262        "FILE"
    263 #define xzcat_full_usage "\n\n" \
    264        "Decompress to stdout"
    265 
    266 #define cal_trivial_usage \
    267        "[-jy] [[MONTH] YEAR]"
    268 #define cal_full_usage "\n\n" \
    269        "Display a calendar\n" \
    270      "\nOptions:" \
    271      "\n    -j  Use julian dates" \
    272      "\n    -y  Display the entire year" \
    273 
    274 #define cat_trivial_usage \
    275        "[FILE]..."
    276 #define cat_full_usage "\n\n" \
    277        "Concatenate FILEs and print them to stdout" \
    278 
    279 #define cat_example_usage \
    280        "$ cat /proc/uptime\n" \
    281        "110716.72 17.67"
    282 
    283 #define catv_trivial_usage \
    284        "[-etv] [FILE]..."
    285 #define catv_full_usage "\n\n" \
    286        "Display nonprinting characters as ^x or M-x\n" \
    287      "\nOptions:" \
    288      "\n    -e  End each line with $" \
    289      "\n    -t  Show tabs as ^I" \
    290      "\n    -v  Don't use ^x or M-x escapes" \
    291 
    292 #define chat_trivial_usage \
    293        "EXPECT [SEND [EXPECT [SEND...]]]"
    294 #define chat_full_usage "\n\n" \
    295        "Useful for interacting with a modem connected to stdin/stdout.\n" \
    296        "A script consists of one or more \"expect-send\" pairs of strings,\n" \
    297        "each pair is a pair of arguments. Example:\n" \
    298        "chat '' ATZ OK ATD123456 CONNECT '' ogin: pppuser word: ppppass '~'" \
    299 
    300 #define chattr_trivial_usage \
    301        "[-R] [-+=AacDdijsStTu] [-v VERSION] [FILE]..."
    302 #define chattr_full_usage "\n\n" \
    303        "Change file attributes on an ext2 fs\n" \
    304      "\nModifiers:" \
    305      "\n    -   Remove attributes" \
    306      "\n    +   Add attributes" \
    307      "\n    =   Set attributes" \
    308      "\nAttributes:" \
    309      "\n    A   Don't track atime" \
    310      "\n    a   Append mode only" \
    311      "\n    c   Enable compress" \
    312      "\n    D   Write dir contents synchronously" \
    313      "\n    d   Don't backup with dump" \
    314      "\n    i   Cannot be modified (immutable)" \
    315      "\n    j   Write all data to journal first" \
    316      "\n    s   Zero disk storage when deleted" \
    317      "\n    S   Write file contents synchronously" \
    318      "\n    t   Disable tail-merging of partial blocks with other files" \
    319      "\n    u   Allow file to be undeleted" \
    320      "\nOptions:" \
    321      "\n    -R  Recurse" \
    322      "\n    -v  Set the file's version/generation number" \
    323 
    324 #define chcon_trivial_usage \
    325        "[OPTIONS] CONTEXT FILE..." \
    326        "\n  chcon [OPTIONS] [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE..." \
    327     IF_FEATURE_CHCON_LONG_OPTIONS( \
    328        "\n  chcon [OPTIONS] --reference=RFILE FILE..." \
    329     )
    330 #define chcon_full_usage "\n\n" \
    331        "Change the security context of each FILE to CONTEXT\n" \
    332     IF_FEATURE_CHCON_LONG_OPTIONS( \
    333      "\n    -v,--verbose        Verbose" \
    334      "\n    -c,--changes        Report changes made" \
    335      "\n    -h,--no-dereference Affect symlinks instead of their targets" \
    336      "\n    -f,--silent,--quiet Suppress most error messages" \
    337      "\n    --reference=RFILE   Use RFILE's group instead of using a CONTEXT value" \
    338      "\n    -u,--user=USER      Set user/role/type/range in the target" \
    339      "\n    -r,--role=ROLE      security context" \
    340      "\n    -t,--type=TYPE" \
    341      "\n    -l,--range=RANGE" \
    342      "\n    -R,--recursive      Recurse" \
    343     ) \
    344     IF_NOT_FEATURE_CHCON_LONG_OPTIONS( \
    345      "\n    -v  Verbose" \
    346      "\n    -c  Report changes made" \
    347      "\n    -h  Affect symlinks instead of their targets" \
    348      "\n    -f  Suppress most error messages" \
    349      "\n    -u USER Set user/role/type/range in the target security context" \
    350      "\n    -r ROLE" \
    351      "\n    -t TYPE" \
    352      "\n    -l RNG" \
    353      "\n    -R  Recurse" \
    354     )
    355 
    356 #define chmod_trivial_usage \
    357        "[-R"IF_DESKTOP("cvf")"] MODE[,MODE]... FILE..."
    358 #define chmod_full_usage "\n\n" \
    359        "Each MODE is one or more of the letters ugoa, one of the\n" \
    360        "symbols +-= and one or more of the letters rwxst\n" \
    361      "\nOptions:" \
    362      "\n    -R  Recurse" \
    363     IF_DESKTOP( \
    364      "\n    -c  List changed files" \
    365      "\n    -v  List all files" \
    366      "\n    -f  Hide errors" \
    367     )
    368 #define chmod_example_usage \
    369        "$ ls -l /tmp/foo\n" \
    370        "-rw-rw-r--    1 root     root            0 Apr 12 18:25 /tmp/foo\n" \
    371        "$ chmod u+x /tmp/foo\n" \
    372        "$ ls -l /tmp/foo\n" \
    373        "-rwxrw-r--    1 root     root            0 Apr 12 18:25 /tmp/foo*\n" \
    374        "$ chmod 444 /tmp/foo\n" \
    375        "$ ls -l /tmp/foo\n" \
    376        "-r--r--r--    1 root     root            0 Apr 12 18:25 /tmp/foo\n"
    377 
    378 #define chgrp_trivial_usage \
    379        "[-RhLHP"IF_DESKTOP("cvf")"]... GROUP FILE..."
    380 #define chgrp_full_usage "\n\n" \
    381        "Change the group membership of each FILE to GROUP\n" \
    382      "\nOptions:" \
    383      "\n    -R  Recurse" \
    384      "\n    -h  Affect symlinks instead of symlink targets" \
    385      "\n    -L  Traverse all symlinks to directories" \
    386      "\n    -H  Traverse symlinks on command line only" \
    387      "\n    -P  Don't traverse symlinks (default)" \
    388     IF_DESKTOP( \
    389      "\n    -c  List changed files" \
    390      "\n    -v  Verbose" \
    391      "\n    -f  Hide errors" \
    392     )
    393 #define chgrp_example_usage \
    394        "$ ls -l /tmp/foo\n" \
    395        "-r--r--r--    1 andersen andersen        0 Apr 12 18:25 /tmp/foo\n" \
    396        "$ chgrp root /tmp/foo\n" \
    397        "$ ls -l /tmp/foo\n" \
    398        "-r--r--r--    1 andersen root            0 Apr 12 18:25 /tmp/foo\n"
    399 
    400 #define chown_trivial_usage \
    401        "[-RhLHP"IF_DESKTOP("cvf")"]... OWNER[<.|:>[GROUP]] FILE..."
    402 #define chown_full_usage "\n\n" \
    403        "Change the owner and/or group of each FILE to OWNER and/or GROUP\n" \
    404      "\nOptions:" \
    405      "\n    -R  Recurse" \
    406      "\n    -h  Affect symlinks instead of symlink targets" \
    407      "\n    -L  Traverse all symlinks to directories" \
    408      "\n    -H  Traverse symlinks on command line only" \
    409      "\n    -P  Don't traverse symlinks (default)" \
    410     IF_DESKTOP( \
    411      "\n    -c  List changed files" \
    412      "\n    -v  List all files" \
    413      "\n    -f  Hide errors" \
    414     )
    415 #define chown_example_usage \
    416        "$ ls -l /tmp/foo\n" \
    417        "-r--r--r--    1 andersen andersen        0 Apr 12 18:25 /tmp/foo\n" \
    418        "$ chown root /tmp/foo\n" \
    419        "$ ls -l /tmp/foo\n" \
    420        "-r--r--r--    1 root     andersen        0 Apr 12 18:25 /tmp/foo\n" \
    421        "$ chown root.root /tmp/foo\n" \
    422        "ls -l /tmp/foo\n" \
    423        "-r--r--r--    1 root     root            0 Apr 12 18:25 /tmp/foo\n"
    424 
    425 #define chpst_trivial_usage \
    426        "[-vP012] [-u USER[:GRP]] [-U USER[:GRP]] [-e DIR]\n" \
    427        "    [-/ DIR] [-n NICE] [-m BYTES] [-d BYTES] [-o N]\n" \
    428        "    [-p N] [-f BYTES] [-c BYTES] PROG ARGS"
    429 #define chpst_full_usage "\n\n" \
    430        "Change the process state, run PROG\n" \
    431      "\nOptions:" \
    432      "\n    -u USER[:GRP]   Set uid and gid" \
    433      "\n    -U USER[:GRP]   Set $UID and $GID in environment" \
    434      "\n    -e DIR      Set environment variables as specified by files" \
    435      "\n            in DIR: file=1st_line_of_file" \
    436      "\n    -/ DIR      Chroot to DIR" \
    437      "\n    -n NICE     Add NICE to nice value" \
    438      "\n    -m BYTES    Same as -d BYTES -s BYTES -l BYTES" \
    439      "\n    -d BYTES    Limit data segment" \
    440      "\n    -o N        Limit number of open files per process" \
    441      "\n    -p N        Limit number of processes per uid" \
    442      "\n    -f BYTES    Limit output file sizes" \
    443      "\n    -c BYTES    Limit core file size" \
    444      "\n    -v      Verbose" \
    445      "\n    -P      Create new process group" \
    446      "\n    -0      Close stdin" \
    447      "\n    -1      Close stdout" \
    448      "\n    -2      Close stderr" \
    449 
    450 #define setuidgid_trivial_usage \
    451        "USER PROG ARGS"
    452 #define setuidgid_full_usage "\n\n" \
    453        "Set uid and gid to USER's uid and gid, drop supplementary group ids,\n" \
    454        "run PROG"
    455 #define envuidgid_trivial_usage \
    456        "USER PROG ARGS"
    457 #define envuidgid_full_usage "\n\n" \
    458        "Set $UID to USER's uid and $GID to USER's gid, run PROG"
    459 #define envdir_trivial_usage \
    460        "DIR PROG ARGS"
    461 #define envdir_full_usage "\n\n" \
    462        "Set various environment variables as specified by files\n" \
    463        "in the directory DIR, run PROG"
    464 #define softlimit_trivial_usage \
    465        "[-a BYTES] [-m BYTES] [-d BYTES] [-s BYTES] [-l BYTES]\n" \
    466        "    [-f BYTES] [-c BYTES] [-r BYTES] [-o N] [-p N] [-t N]\n" \
    467        "    PROG ARGS"
    468 #define softlimit_full_usage "\n\n" \
    469        "Set soft resource limits, then run PROG\n" \
    470      "\nOptions:" \
    471      "\n    -a BYTES    Limit total size of all segments" \
    472      "\n    -m BYTES    Same as -d BYTES -s BYTES -l BYTES -a BYTES" \
    473      "\n    -d BYTES    Limit data segment" \
    474      "\n    -s BYTES    Limit stack segment" \
    475      "\n    -l BYTES    Limit locked memory size" \
    476      "\n    -o N        Limit number of open files per process" \
    477      "\n    -p N        Limit number of processes per uid" \
    478      "\nOptions controlling file sizes:" \
    479      "\n    -f BYTES    Limit output file sizes" \
    480      "\n    -c BYTES    Limit core file size" \
    481      "\nEfficiency opts:" \
    482      "\n    -r BYTES    Limit resident set size" \
    483      "\n    -t N        Limit CPU time, process receives" \
    484      "\n            a SIGXCPU after N seconds" \
    485 
    486 #define chroot_trivial_usage \
    487        "NEWROOT [PROG ARGS]"
    488 #define chroot_full_usage "\n\n" \
    489        "Run PROG with root directory set to NEWROOT"
    490 #define chroot_example_usage \
    491        "$ ls -l /bin/ls\n" \
    492        "lrwxrwxrwx    1 root     root          12 Apr 13 00:46 /bin/ls -> /BusyBox\n" \
    493        "# mount /dev/hdc1 /mnt -t minix\n" \
    494        "# chroot /mnt\n" \
    495        "# ls -l /bin/ls\n" \
    496        "-rwxr-xr-x    1 root     root        40816 Feb  5 07:45 /bin/ls*\n"
    497 
    498 #define chvt_trivial_usage \
    499        "N"
    500 #define chvt_full_usage "\n\n" \
    501        "Change the foreground virtual terminal to /dev/ttyN"
    502 
    503 #define cksum_trivial_usage \
    504        "FILES..."
    505 #define cksum_full_usage "\n\n" \
    506        "Calculate the CRC32 checksums of FILES"
    507 
    508 #define clear_trivial_usage \
    509        ""
    510 #define clear_full_usage "\n\n" \
    511        "Clear screen"
    512 
    513 #define cmp_trivial_usage \
    514        "[-l] [-s] FILE1 [FILE2" IF_DESKTOP(" [SKIP1 [SKIP2]]") "]"
    515 #define cmp_full_usage "\n\n" \
    516        "Compare FILE1 with FILE2 (or stdin)\n" \
    517      "\nOptions:" \
    518      "\n    -l  Write the byte numbers (decimal) and values (octal)" \
    519      "\n        for all differing bytes" \
    520      "\n    -s  Quiet" \
    521 
    522 #define comm_trivial_usage \
    523        "[-123] FILE1 FILE2"
    524 #define comm_full_usage "\n\n" \
    525        "Compare FILE1 with FILE2\n" \
    526      "\nOptions:" \
    527      "\n    -1  Suppress lines unique to FILE1" \
    528      "\n    -2  Suppress lines unique to FILE2" \
    529      "\n    -3  Suppress lines common to both files" \
    530 
    531 #define bbconfig_trivial_usage \
    532        ""
    533 #define bbconfig_full_usage "\n\n" \
    534        "Print the config file used by busybox build"
    535 
    536 #define chrt_trivial_usage \
    537        "[-prfom] [PRIO] [PID | PROG ARGS]"
    538 #define chrt_full_usage "\n\n" \
    539        "Change scheduling priority and class for a process\n" \
    540      "\nOptions:" \
    541      "\n    -p  Operate on PID" \
    542      "\n    -r  Set SCHED_RR class" \
    543      "\n    -f  Set SCHED_FIFO class" \
    544      "\n    -o  Set SCHED_OTHER class" \
    545      "\n    -m  Show min/max priorities" \
    546 
    547 #define chrt_example_usage \
    548        "$ chrt -r 4 sleep 900; x=$!\n" \
    549        "$ chrt -f -p 3 $x\n" \
    550        "You need CAP_SYS_NICE privileges to set scheduling attributes of a process"
    551 
    552 #define nice_trivial_usage \
    553        "[-n ADJUST] [PROG ARGS]"
    554 #define nice_full_usage "\n\n" \
    555        "Change scheduling priority, run PROG\n" \
    556      "\nOptions:" \
    557      "\n    -n ADJUST   Adjust priority by ADJUST" \
    558 
    559 #define renice_trivial_usage \
    560        "{{-n INCREMENT} | PRIORITY} [[-p | -g | -u] ID...]"
    561 #define renice_full_usage "\n\n" \
    562        "Change scheduling priority for a running process\n" \
    563      "\nOptions:" \
    564      "\n    -n  Adjust current nice value (smaller is faster)" \
    565      "\n    -p  Process id(s) (default)" \
    566      "\n    -g  Process group id(s)" \
    567      "\n    -u  Process user name(s) and/or id(s)" \
    568 
    569 #define ionice_trivial_usage \
    570     "[-c 1-3] [-n 0-7] [-p PID] [PROG]"
    571 #define ionice_full_usage "\n\n" \
    572        "Change I/O priority and class\n" \
    573      "\nOptions:" \
    574      "\n    -c  Class. 1:realtime 2:best-effort 3:idle" \
    575      "\n    -n  Priority" \
    576 
    577 #define cp_trivial_usage \
    578        "[OPTIONS] SOURCE DEST"
    579 #define cp_full_usage "\n\n" \
    580        "Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY\n" \
    581      "\nOptions:" \
    582      "\n    -a  Same as -dpR" \
    583     IF_SELINUX( \
    584      "\n    -c  Preserve security context" \
    585     ) \
    586      "\n    -R,-r   Recurse" \
    587      "\n    -d,-P   Preserve symlinks (default if -R)" \
    588      "\n    -L  Follow all symlinks" \
    589      "\n    -H  Follow symlinks on command line" \
    590      "\n    -p  Preserve file attributes if possible" \
    591      "\n    -f  Overwrite" \
    592      "\n    -i  Prompt before overwrite" \
    593      "\n    -l,-s   Create (sym)links" \
    594 
    595 #define cpio_trivial_usage \
    596        "[-dmvu] [-F FILE]" IF_FEATURE_CPIO_O(" [-H newc]") \
    597        " [-ti"IF_FEATURE_CPIO_O("o")"]" IF_FEATURE_CPIO_P(" [-p DIR]")
    598 #define cpio_full_usage "\n\n" \
    599        "Extract or list files from a cpio archive" \
    600     IF_FEATURE_CPIO_O(", or" \
    601      "\ncreate an archive" IF_FEATURE_CPIO_P(" (-o) or copy files (-p)") \
    602         " using file list on stdin" \
    603     ) \
    604      "\n" \
    605      "\nMain operation mode:" \
    606      "\n    -t  List" \
    607      "\n    -i  Extract" \
    608     IF_FEATURE_CPIO_O( \
    609      "\n    -o  Create (requires -H newc)" \
    610     ) \
    611     IF_FEATURE_CPIO_P( \
    612      "\n    -p DIR  Copy files to DIR" \
    613     ) \
    614      "\nOptions:" \
    615      "\n    -d  Make leading directories" \
    616      "\n    -m  Preserve mtime" \
    617      "\n    -v  Verbose" \
    618      "\n    -u  Overwrite" \
    619      "\n    -F FILE Input (-t,-i,-p) or output (-o) file" \
    620     IF_FEATURE_CPIO_O( \
    621      "\n    -H newc Archive format" \
    622     ) \
    623 
    624 #define crond_trivial_usage \
    625        "-fbS -l N " IF_FEATURE_CROND_D("-d N ") "-L LOGFILE -c DIR"
    626 #define crond_full_usage "\n\n" \
    627        "    -f  Foreground" \
    628      "\n    -b  Background (default)" \
    629      "\n    -S  Log to syslog (default)" \
    630      "\n    -l  Set log level. 0 is the most verbose, default 8" \
    631     IF_FEATURE_CROND_D( \
    632      "\n    -d  Set log level, log to stderr" \
    633     ) \
    634      "\n    -L  Log to file" \
    635      "\n    -c  Working dir" \
    636 
    637 #define crontab_trivial_usage \
    638        "[-c DIR] [-u USER] [-ler]|[FILE]"
    639 #define crontab_full_usage "\n\n" \
    640        "    -c  Crontab directory" \
    641      "\n    -u  User" \
    642      "\n    -l  List crontab" \
    643      "\n    -e  Edit crontab" \
    644      "\n    -r  Delete crontab" \
    645      "\n    FILE    Replace crontab by FILE ('-': stdin)" \
    646 
    647 #define cryptpw_trivial_usage \
    648        "[OPTIONS] [PASSWORD] [SALT]"
    649 /* We do support -s, we just don't mention it */
    650 #define cryptpw_full_usage "\n\n" \
    651        "Crypt the PASSWORD using crypt(3)\n" \
    652      "\nOptions:" \
    653     IF_LONG_OPTS( \
    654      "\n    -P,--password-fd=N  Read password from fd N" \
    655 /*   "\n    -s,--stdin      Use stdin; like -P0" */ \
    656      "\n    -m,--method=TYPE    Encryption method TYPE" \
    657      "\n    -S,--salt=SALT" \
    658     ) \
    659     IF_NOT_LONG_OPTS( \
    660      "\n    -P N    Read password from fd N" \
    661 /*   "\n    -s  Use stdin; like -P0" */ \
    662      "\n    -m TYPE Encryption method TYPE" \
    663      "\n    -S SALT" \
    664     ) \
    665 
    666 /* mkpasswd is an alias to cryptpw */
    667 
    668 #define mkpasswd_trivial_usage \
    669        "[OPTIONS] [PASSWORD] [SALT]"
    670 /* We do support -s, we just don't mention it */
    671 #define mkpasswd_full_usage "\n\n" \
    672        "Crypt the PASSWORD using crypt(3)\n" \
    673      "\nOptions:" \
    674     IF_LONG_OPTS( \
    675      "\n    -P,--password-fd=N  Read password from fd N" \
    676 /*   "\n    -s,--stdin      Use stdin; like -P0" */ \
    677      "\n    -m,--method=TYPE    Encryption method TYPE" \
    678      "\n    -S,--salt=SALT" \
    679     ) \
    680     IF_NOT_LONG_OPTS( \
    681      "\n    -P N    Read password from fd N" \
    682 /*   "\n    -s  Use stdin; like -P0" */ \
    683      "\n    -m TYPE Encryption method TYPE" \
    684      "\n    -S SALT" \
    685     ) \
    686 
    687 #define cut_trivial_usage \
    688        "[OPTIONS] [FILE]..."
    689 #define cut_full_usage "\n\n" \
    690        "Print selected fields from each input FILE to stdout\n" \
    691      "\nOptions:" \
    692      "\n    -b LIST Output only bytes from LIST" \
    693      "\n    -c LIST Output only characters from LIST" \
    694      "\n    -d CHAR Use CHAR instead of tab as the field delimiter" \
    695      "\n    -s  Output only the lines containing delimiter" \
    696      "\n    -f N    Print only these fields" \
    697      "\n    -n  Ignored" \
    698 
    699 #define cut_example_usage \
    700        "$ echo \"Hello world\" | cut -f 1 -d ' '\n" \
    701        "Hello\n" \
    702        "$ echo \"Hello world\" | cut -f 2 -d ' '\n" \
    703        "world\n"
    704 
    705 #define dd_trivial_usage \
    706        "[if=FILE] [of=FILE] " IF_FEATURE_DD_IBS_OBS("[ibs=N] [obs=N] ") "[bs=N] [count=N] [skip=N]\n" \
    707        "    [seek=N]" IF_FEATURE_DD_IBS_OBS(" [conv=notrunc|noerror|sync|fsync]")
    708 #define dd_full_usage "\n\n" \
    709        "Copy a file with converting and formatting\n" \
    710      "\nOptions:" \
    711      "\n    if=FILE     Read from FILE instead of stdin" \
    712      "\n    of=FILE     Write to FILE instead of stdout" \
    713      "\n    bs=N        Read and write N bytes at a time" \
    714     IF_FEATURE_DD_IBS_OBS( \
    715      "\n    ibs=N       Read N bytes at a time" \
    716     ) \
    717     IF_FEATURE_DD_IBS_OBS( \
    718      "\n    obs=N       Write N bytes at a time" \
    719     ) \
    720      "\n    count=N     Copy only N input blocks" \
    721      "\n    skip=N      Skip N input blocks" \
    722      "\n    seek=N      Skip N output blocks" \
    723     IF_FEATURE_DD_IBS_OBS( \
    724      "\n    conv=notrunc    Don't truncate output file" \
    725      "\n    conv=noerror    Continue after read errors" \
    726      "\n    conv=sync   Pad blocks with zeros" \
    727      "\n    conv=fsync  Physically write data out before finishing" \
    728     ) \
    729      "\n" \
    730      "\nNumbers may be suffixed by c (x1), w (x2), b (x512), kD (x1000), k (x1024)," \
    731      "\nMD (x1000000), M (x1048576), GD (x1000000000) or G (x1073741824)" \
    732 
    733 #define dd_example_usage \
    734        "$ dd if=/dev/zero of=/dev/ram1 bs=1M count=4\n" \
    735        "4+0 records in\n" \
    736        "4+0 records out\n"
    737 
    738 #define deallocvt_trivial_usage \
    739        "[N]"
    740 #define deallocvt_full_usage "\n\n" \
    741        "Deallocate unused virtual terminal /dev/ttyN"
    742 
    743 #define delgroup_trivial_usage \
    744     IF_FEATURE_DEL_USER_FROM_GROUP("[USER] ")"GROUP"
    745 #define delgroup_full_usage "\n\n" \
    746        "Delete group GROUP from the system" \
    747     IF_FEATURE_DEL_USER_FROM_GROUP(" or user USER from group GROUP")
    748 
    749 #define deluser_trivial_usage \
    750        "USER"
    751 #define deluser_full_usage "\n\n" \
    752        "Delete USER from the system"
    753 
    754 #define devmem_trivial_usage \
    755     "ADDRESS [WIDTH [VALUE]]"
    756 
    757 #define devmem_full_usage "\n\n" \
    758        "Read/write from physical address\n" \
    759      "\n    ADDRESS Address to act upon" \
    760      "\n    WIDTH   Width (8/16/...)" \
    761      "\n    VALUE   Data to be written" \
    762 
    763 #define devfsd_trivial_usage \
    764        "mntpnt [-v]" IF_DEVFSD_FG_NP("[-fg][-np]")
    765 #define devfsd_full_usage "\n\n" \
    766        "Manage devfs permissions and old device name symlinks\n" \
    767      "\nOptions:" \
    768      "\n    mntpnt  The mount point where devfs is mounted" \
    769      "\n    -v  Print the protocol version numbers for devfsd" \
    770      "\n        and the kernel-side protocol version and exit" \
    771     IF_DEVFSD_FG_NP( \
    772      "\n    -fg Run in foreground" \
    773      "\n    -np Exit after parsing the configuration file" \
    774      "\n        and processing synthetic REGISTER events," \
    775      "\n        don't poll for events" \
    776     )
    777 
    778 #define df_trivial_usage \
    779     "[-Pk" \
    780     IF_FEATURE_HUMAN_READABLE("mh") \
    781     IF_FEATURE_DF_FANCY("ai] [-B SIZE") \
    782     "] [FILESYSTEM]..."
    783 #define df_full_usage "\n\n" \
    784        "Print filesystem usage statistics\n" \
    785      "\nOptions:" \
    786      "\n    -P  POSIX output format" \
    787      "\n    -k  1024-byte blocks (default)" \
    788     IF_FEATURE_HUMAN_READABLE( \
    789      "\n    -m  1M-byte blocks" \
    790      "\n    -h  Human readable (e.g. 1K 243M 2G)" \
    791     ) \
    792     IF_FEATURE_DF_FANCY( \
    793      "\n    -a  Show all filesystems" \
    794      "\n    -i  Inodes" \
    795      "\n    -B SIZE Blocksize" \
    796     ) \
    797 
    798 #define df_example_usage \
    799        "$ df\n" \
    800        "Filesystem           1K-blocks      Used Available Use% Mounted on\n" \
    801        "/dev/sda3              8690864   8553540    137324  98% /\n" \
    802        "/dev/sda1                64216     36364     27852  57% /boot\n" \
    803        "$ df /dev/sda3\n" \
    804        "Filesystem           1K-blocks      Used Available Use% Mounted on\n" \
    805        "/dev/sda3              8690864   8553540    137324  98% /\n" \
    806        "$ POSIXLY_CORRECT=sure df /dev/sda3\n" \
    807        "Filesystem         512B-blocks      Used Available Use% Mounted on\n" \
    808        "/dev/sda3             17381728  17107080    274648  98% /\n" \
    809        "$ POSIXLY_CORRECT=yep df -P /dev/sda3\n" \
    810        "Filesystem          512-blocks      Used Available Capacity Mounted on\n" \
    811        "/dev/sda3             17381728  17107080    274648      98% /\n"
    812 
    813 #define dhcprelay_trivial_usage \
    814        "CLIENT_IFACE[,CLIENT_IFACE2]... SERVER_IFACE [SERVER_IP]"
    815 #define dhcprelay_full_usage "\n\n" \
    816        "Relay DHCP requests between clients and server" \
    817 
    818 #define diff_trivial_usage \
    819        "[-abBdiNqrTstw] [-L LABEL] [-S FILE] [-U LINES] FILE1 FILE2"
    820 #define diff_full_usage "\n\n" \
    821        "Compare files line by line and output the differences between them.\n" \
    822        "This implementation supports unified diffs only.\n" \
    823      "\nOptions:" \
    824      "\n    -a  Treat all files as text" \
    825      "\n    -b  Ignore changes in the amount of whitespace" \
    826      "\n    -B  Ignore changes whose lines are all blank" \
    827      "\n    -d  Try hard to find a smaller set of changes" \
    828      "\n    -i  Ignore case differences" \
    829      "\n    -L  Use LABEL instead of the filename in the unified header" \
    830      "\n    -N  Treat absent files as empty" \
    831      "\n    -q  Output only whether files differ" \
    832      "\n    -r  Recurse" \
    833      "\n    -S  Start with FILE when comparing directories" \
    834      "\n    -T  Make tabs line up by prefixing a tab when necessary" \
    835      "\n    -s  Report when two files are the same" \
    836      "\n    -t  Expand tabs to spaces in output" \
    837      "\n    -U  Output LINES lines of context" \
    838      "\n    -w  Ignore all whitespace" \
    839 
    840 #define dirname_trivial_usage \
    841        "FILENAME"
    842 #define dirname_full_usage "\n\n" \
    843        "Strip non-directory suffix from FILENAME"
    844 #define dirname_example_usage \
    845        "$ dirname /tmp/foo\n" \
    846        "/tmp\n" \
    847        "$ dirname /tmp/foo/\n" \
    848        "/tmp\n"
    849 
    850 #define dmesg_trivial_usage \
    851        "[-c] [-n LEVEL] [-s SIZE]"
    852 #define dmesg_full_usage "\n\n" \
    853        "Print or control the kernel ring buffer\n" \
    854      "\nOptions:" \
    855      "\n    -c      Clear ring buffer after printing" \
    856      "\n    -n LEVEL    Set console logging level" \
    857      "\n    -s SIZE     Buffer size" \
    858 
    859 #define dnsd_trivial_usage \
    860        "[-dvs] [-c CONFFILE] [-t TTL_SEC] [-p PORT] [-i ADDR]"
    861 #define dnsd_full_usage "\n\n" \
    862        "Small static DNS server daemon\n" \
    863      "\nOptions:" \
    864      "\n    -c FILE Config file" \
    865      "\n    -t SEC  TTL" \
    866      "\n    -p PORT Listen on PORT" \
    867      "\n    -i ADDR Listen on ADDR" \
    868      "\n    -d  Daemonize" \
    869      "\n    -v  Verbose" \
    870      "\n    -s  Send successful replies only. Use this if you want" \
    871      "\n        to use /etc/resolv.conf with two nameserver lines:" \
    872      "\n            nameserver DNSD_SERVER" \
    873      "\n            nameserver NORNAL_DNS_SERVER" \
    874 
    875 #define dos2unix_trivial_usage \
    876        "[-ud] [FILE]"
    877 #define dos2unix_full_usage "\n\n" \
    878        "Convert FILE in-place from DOS to Unix format.\n" \
    879        "When no file is given, use stdin/stdout.\n" \
    880      "\nOptions:" \
    881      "\n    -u  dos2unix" \
    882      "\n    -d  unix2dos" \
    883 
    884 #define unix2dos_trivial_usage \
    885        "[-ud] [FILE]"
    886 #define unix2dos_full_usage "\n\n" \
    887        "Convert FILE in-place from Unix to DOS format.\n" \
    888        "When no file is given, use stdin/stdout.\n" \
    889      "\nOptions:" \
    890      "\n    -u  dos2unix" \
    891      "\n    -d  unix2dos" \
    892 
    893 #define dpkg_trivial_usage \
    894        "[-ilCPru] [-F OPT] PACKAGE"
    895 #define dpkg_full_usage "\n\n" \
    896        "Install, remove and manage Debian packages\n" \
    897      "\nOptions:" \
    898     IF_LONG_OPTS( \
    899      "\n    -i,--install    Install the package" \
    900      "\n    -l,--list   List of installed packages" \
    901      "\n    --configure Configure an unpackaged package" \
    902      "\n    -P,--purge  Purge all files of a package" \
    903      "\n    -r,--remove Remove all but the configuration files for a package" \
    904      "\n    --unpack    Unpack a package, but don't configure it" \
    905      "\n    --force-depends Ignore dependency problems" \
    906      "\n    --force-confnew Overwrite existing config files when installing" \
    907      "\n    --force-confold Keep old config files when installing" \
    908     ) \
    909     IF_NOT_LONG_OPTS( \
    910      "\n    -i      Install the package" \
    911      "\n    -l      List of installed packages" \
    912      "\n    -C      Configure an unpackaged package" \
    913      "\n    -P      Purge all files of a package" \
    914      "\n    -r      Remove all but the configuration files for a package" \
    915      "\n    -u      Unpack a package, but don't configure it" \
    916      "\n    -F depends  Ignore dependency problems" \
    917      "\n    -F confnew  Overwrite existing config files when installing" \
    918      "\n    -F confold  Keep old config files when installing" \
    919     )
    920 
    921 #define dpkg_deb_trivial_usage \
    922        "[-cefxX] FILE [argument]"
    923 #define dpkg_deb_full_usage "\n\n" \
    924        "Perform actions on Debian packages (.debs)\n" \
    925      "\nOptions:" \
    926      "\n    -c  List contents of filesystem tree" \
    927      "\n    -e  Extract control files to [argument] directory" \
    928      "\n    -f  Display control field name starting with [argument]" \
    929      "\n    -x  Extract packages filesystem tree to directory" \
    930      "\n    -X  Verbose extract" \
    931 
    932 #define dpkg_deb_example_usage \
    933        "$ dpkg-deb -X ./busybox_0.48-1_i386.deb /tmp\n"
    934 
    935 #define du_trivial_usage \
    936        "[-aHLdclsx" IF_FEATURE_HUMAN_READABLE("hm") "k] [FILE]..."
    937 #define du_full_usage "\n\n" \
    938        "Summarize disk space used for each FILE and/or directory.\n" \
    939        "Disk space is printed in units of " \
    940     IF_FEATURE_DU_DEFAULT_BLOCKSIZE_1K("1024") \
    941     IF_NOT_FEATURE_DU_DEFAULT_BLOCKSIZE_1K("512") \
    942        " bytes.\n" \
    943      "\nOptions:" \
    944      "\n    -a  Show file sizes too" \
    945      "\n    -L  Follow all symlinks" \
    946      "\n    -H  Follow symlinks on command line" \
    947      "\n    -d N    Limit output to directories (and files with -a) of depth < N" \
    948      "\n    -c  Show grand total" \
    949      "\n    -l  Count sizes many times if hard linked" \
    950      "\n    -s  Display only a total for each argument" \
    951      "\n    -x  Skip directories on different filesystems" \
    952     IF_FEATURE_HUMAN_READABLE( \
    953      "\n    -h  Sizes in human readable format (e.g., 1K 243M 2G )" \
    954      "\n    -m  Sizes in megabytes" \
    955     ) \
    956      "\n    -k  Sizes in kilobytes" \
    957             IF_FEATURE_DU_DEFAULT_BLOCKSIZE_1K(" (default)") \
    958 
    959 #define du_example_usage \
    960        "$ du\n" \
    961        "16      ./CVS\n" \
    962        "12      ./kernel-patches/CVS\n" \
    963        "80      ./kernel-patches\n" \
    964        "12      ./tests/CVS\n" \
    965        "36      ./tests\n" \
    966        "12      ./scripts/CVS\n" \
    967        "16      ./scripts\n" \
    968        "12      ./docs/CVS\n" \
    969        "104     ./docs\n" \
    970        "2417    .\n"
    971 
    972 #define dumpkmap_trivial_usage \
    973        "> keymap"
    974 #define dumpkmap_full_usage "\n\n" \
    975        "Print a binary keyboard translation table to stdout"
    976 #define dumpkmap_example_usage \
    977        "$ dumpkmap > keymap\n"
    978 
    979 #define dumpleases_trivial_usage \
    980        "[-r|-a] [-f LEASEFILE]"
    981 #define dumpleases_full_usage "\n\n" \
    982        "Display DHCP leases granted by udhcpd\n" \
    983      "\nOptions:" \
    984     IF_LONG_OPTS( \
    985      "\n    -f,--file=FILE  Lease file" \
    986      "\n    -r,--remaining  Show remaining time" \
    987      "\n    -a,--absolute   Show expiration time" \
    988     ) \
    989     IF_NOT_LONG_OPTS( \
    990      "\n    -f FILE Lease file" \
    991      "\n    -r  Show remaining time" \
    992      "\n    -a  Show expiration time" \
    993     )
    994 
    995 /*
    996 #define e2fsck_trivial_usage \
    997        "[-panyrcdfvstDFSV] [-b superblock] [-B blocksize] " \
    998        "[-I inode_buffer_blocks] [-P process_inode_size] " \
    999        "[-l|-L bad_blocks_file] [-C fd] [-j external_journal] " \
    1000        "[-E extended-options] device"
    1001 #define e2fsck_full_usage "\n\n" \
    1002        "Check ext2/ext3 file system\n" \
    1003      "\nOptions:" \
    1004      "\n    -p      Automatic repair (no questions)" \
    1005      "\n    -n      Make no changes to the filesystem" \
    1006      "\n    -y      Assume 'yes' to all questions" \
    1007      "\n    -c      Check for bad blocks and add them to the badblock list" \
    1008      "\n    -f      Force checking even if filesystem is marked clean" \
    1009      "\n    -v      Verbose" \
    1010      "\n    -b superblock   Use alternative superblock" \
    1011      "\n    -B blocksize    Force blocksize when looking for superblock" \
    1012      "\n    -j journal  Set location of the external journal" \
    1013      "\n    -l file     Add to badblocks list" \
    1014      "\n    -L file     Set badblocks list" \
    1015 */
    1016 
    1017 #define echo_trivial_usage \
    1018     IF_FEATURE_FANCY_ECHO("[-neE] ") "[ARG]..."
    1019 #define echo_full_usage "\n\n" \
    1020        "Print the specified ARGs to stdout" \
    1021     IF_FEATURE_FANCY_ECHO( "\n" \
    1022      "\nOptions:" \
    1023      "\n    -n  Suppress trailing newline" \
    1024      "\n    -e  Interpret backslash escapes (i.e., \\t=tab)" \
    1025      "\n    -E  Don't interpret backslash escapes (default)" \
    1026     )
    1027 #define echo_example_usage \
    1028        "$ echo \"Erik is cool\"\n" \
    1029        "Erik is cool\n" \
    1030     IF_FEATURE_FANCY_ECHO("$ echo -e \"Erik\\nis\\ncool\"\n" \
    1031        "Erik\n" \
    1032        "is\n" \
    1033        "cool\n" \
    1034        "$ echo \"Erik\\nis\\ncool\"\n" \
    1035        "Erik\\nis\\ncool\n")
    1036 
    1037 #define eject_trivial_usage \
    1038        "[-t] [-T] [DEVICE]"
    1039 #define eject_full_usage "\n\n" \
    1040        "Eject DEVICE or default /dev/cdrom\n" \
    1041      "\nOptions:" \
    1042     IF_FEATURE_EJECT_SCSI( \
    1043      "\n    -s  SCSI device" \
    1044     ) \
    1045      "\n    -t  Close tray" \
    1046      "\n    -T  Open/close tray (toggle)" \
    1047 
    1048 #define ed_trivial_usage ""
    1049 #define ed_full_usage ""
    1050 
    1051 #define env_trivial_usage \
    1052        "[-iu] [-] [name=value]... [PROG ARGS]"
    1053 #define env_full_usage "\n\n" \
    1054        "Print the current environment or run PROG after setting up\n" \
    1055        "the specified environment\n" \
    1056      "\nOptions:" \
    1057      "\n    -, -i   Start with an empty environment" \
    1058      "\n    -u  Remove variable from the environment" \
    1059 
    1060 #define ether_wake_trivial_usage \
    1061        "[-b] [-i iface] [-p aa:bb:cc:dd[:ee:ff]] MAC"
    1062 #define ether_wake_full_usage "\n\n" \
    1063        "Send a magic packet to wake up sleeping machines.\n" \
    1064        "MAC must be a station address (00:11:22:33:44:55) or\n" \
    1065        "a hostname with a known 'ethers' entry.\n" \
    1066      "\nOptions:" \
    1067      "\n    -b      Send wake-up packet to the broadcast address" \
    1068      "\n    -i iface    Interface to use (default eth0)" \
    1069      "\n    -p pass     Append four or six byte password PW to the packet" \
    1070 
    1071 #define expand_trivial_usage \
    1072        "[-i] [-t N] [FILE]..."
    1073 #define expand_full_usage "\n\n" \
    1074        "Convert tabs to spaces, writing to stdout\n" \
    1075      "\nOptions:" \
    1076     IF_FEATURE_EXPAND_LONG_OPTIONS( \
    1077      "\n    -i,--initial    Don't convert tabs after non blanks" \
    1078      "\n    -t,--tabs=N Tabstops every N chars" \
    1079     ) \
    1080     IF_NOT_FEATURE_EXPAND_LONG_OPTIONS( \
    1081      "\n    -i  Don't convert tabs after non blanks" \
    1082      "\n    -t  Tabstops every N chars" \
    1083     )
    1084 
    1085 #define expr_trivial_usage \
    1086        "EXPRESSION"
    1087 #define expr_full_usage "\n\n" \
    1088        "Print the value of EXPRESSION to stdout\n" \
    1089     "\n" \
    1090        "EXPRESSION may be:\n" \
    1091        "    ARG1 | ARG2 ARG1 if it is neither null nor 0, otherwise ARG2\n" \
    1092        "    ARG1 & ARG2 ARG1 if neither argument is null or 0, otherwise 0\n" \
    1093        "    ARG1 < ARG2 1 if ARG1 is less than ARG2, else 0. Similarly:\n" \
    1094        "    ARG1 <= ARG2\n" \
    1095        "    ARG1 = ARG2\n" \
    1096        "    ARG1 != ARG2\n" \
    1097        "    ARG1 >= ARG2\n" \
    1098        "    ARG1 > ARG2\n" \
    1099        "    ARG1 + ARG2 Sum of ARG1 and ARG2. Similarly:\n" \
    1100        "    ARG1 - ARG2\n" \
    1101        "    ARG1 * ARG2\n" \
    1102        "    ARG1 / ARG2\n" \
    1103        "    ARG1 % ARG2\n" \
    1104        "    STRING : REGEXP     Anchored pattern match of REGEXP in STRING\n" \
    1105        "    match STRING REGEXP Same as STRING : REGEXP\n" \
    1106        "    substr STRING POS LENGTH Substring of STRING, POS counted from 1\n" \
    1107        "    index STRING CHARS  Index in STRING where any CHARS is found, or 0\n" \
    1108        "    length STRING       Length of STRING\n" \
    1109        "    quote TOKEN     Interpret TOKEN as a string, even if\n" \
    1110        "                it is a keyword like 'match' or an\n" \
    1111        "                operator like '/'\n" \
    1112        "    (EXPRESSION)        Value of EXPRESSION\n" \
    1113        "\n" \
    1114        "Beware that many operators need to be escaped or quoted for shells.\n" \
    1115        "Comparisons are arithmetic if both ARGs are numbers, else\n" \
    1116        "lexicographical. Pattern matches return the string matched between\n" \
    1117        "\\( and \\) or null; if \\( and \\) are not used, they return the number\n" \
    1118        "of characters matched or 0."
    1119 
    1120 #define fakeidentd_trivial_usage \
    1121        "[-fiw] [-b ADDR] [STRING]"
    1122 #define fakeidentd_full_usage "\n\n" \
    1123        "Provide fake ident (auth) service\n" \
    1124      "\nOptions:" \
    1125      "\n    -f  Run in foreground" \
    1126      "\n    -i  Inetd mode" \
    1127      "\n    -w  Inetd 'wait' mode" \
    1128      "\n    -b ADDR Bind to specified address" \
    1129      "\n    STRING  Ident answer string (default: nobody)" \
    1130 
    1131 #define false_trivial_usage \
    1132        ""
    1133 #define false_full_usage "\n\n" \
    1134        "Return an exit code of FALSE (1)"
    1135 
    1136 #define false_example_usage \
    1137        "$ false\n" \
    1138        "$ echo $?\n" \
    1139        "1\n"
    1140 
    1141 #define fbsplash_trivial_usage \
    1142        "-s IMGFILE [-c] [-d DEV] [-i INIFILE] [-f CMD]"
    1143 #define fbsplash_full_usage "\n\n" \
    1144        "Options:" \
    1145      "\n    -s  Image" \
    1146      "\n    -c  Hide cursor" \
    1147      "\n    -d  Framebuffer device (default /dev/fb0)" \
    1148      "\n    -i  Config file (var=value):" \
    1149      "\n            BAR_LEFT,BAR_TOP,BAR_WIDTH,BAR_HEIGHT" \
    1150      "\n            BAR_R,BAR_G,BAR_B" \
    1151      "\n    -f  Control pipe (else exit after drawing image)" \
    1152      "\n            commands: 'NN' (% for progress bar) or 'exit'" \
    1153 
    1154 #define fbset_trivial_usage \
    1155        "[OPTIONS] [MODE]"
    1156 #define fbset_full_usage "\n\n" \
    1157        "Show and modify frame buffer settings"
    1158 
    1159 #define fbset_example_usage \
    1160        "$ fbset\n" \
    1161        "mode \"1024x768-76\"\n" \
    1162        "    # D: 78.653 MHz, H: 59.949 kHz, V: 75.694 Hz\n" \
    1163        "    geometry 1024 768 1024 768 16\n" \
    1164        "    timings 12714 128 32 16 4 128 4\n" \
    1165        "    accel false\n" \
    1166        "    rgba 5/11,6/5,5/0,0/0\n" \
    1167        "endmode\n"
    1168 
    1169 #define fdflush_trivial_usage \
    1170        "DEVICE"
    1171 #define fdflush_full_usage "\n\n" \
    1172        "Force floppy disk drive to detect disk change"
    1173 
    1174 #define fdformat_trivial_usage \
    1175        "[-n] DEVICE"
    1176 #define fdformat_full_usage "\n\n" \
    1177        "Format floppy disk\n" \
    1178      "\nOptions:" \
    1179      "\n    -n  Don't verify after format" \
    1180 
    1181 /* Looks like someone forgot to add this to config system */
    1182 #ifndef ENABLE_FEATURE_FDISK_BLKSIZE
    1183 # define ENABLE_FEATURE_FDISK_BLKSIZE 0
    1184 # define IF_FEATURE_FDISK_BLKSIZE(a)
    118522#endif
    1186 
    1187 #define fdisk_trivial_usage \
    1188        "[-ul" IF_FEATURE_FDISK_BLKSIZE("s") "] " \
    1189        "[-C CYLINDERS] [-H HEADS] [-S SECTORS] [-b SSZ] DISK"
    1190 #define fdisk_full_usage "\n\n" \
    1191        "Change partition table\n" \
    1192      "\nOptions:" \
    1193      "\n    -u      Start and End are in sectors (instead of cylinders)" \
    1194      "\n    -l      Show partition table for each DISK, then exit" \
    1195     IF_FEATURE_FDISK_BLKSIZE( \
    1196      "\n    -s      Show partition sizes in kb for each DISK, then exit" \
    1197     ) \
    1198      "\n    -b 2048     (for certain MO disks) use 2048-byte sectors" \
    1199      "\n    -C CYLINDERS    Set number of cylinders/heads/sectors" \
    1200      "\n    -H HEADS" \
    1201      "\n    -S SECTORS" \
    1202 
    1203 #define fgconsole_trivial_usage \
    1204     ""
    1205 #define fgconsole_full_usage "\n\n" \
    1206     "Get active console"
    1207 
    1208 #define findfs_trivial_usage \
    1209        "LABEL=label or UUID=uuid"
    1210 #define findfs_full_usage "\n\n" \
    1211        "Find a filesystem device based on a label or UUID"
    1212 #define findfs_example_usage \
    1213        "$ findfs LABEL=MyDevice"
    1214 
    1215 #define flash_lock_trivial_usage \
    1216        "MTD_DEVICE OFFSET SECTORS"
    1217 #define flash_lock_full_usage "\n\n" \
    1218        "Lock part or all of an MTD device. If SECTORS is -1, then all sectors\n" \
    1219        "will be locked, regardless of the value of OFFSET"
    1220 
    1221 #define flash_unlock_trivial_usage \
    1222        "MTD_DEVICE"
    1223 #define flash_unlock_full_usage "\n\n" \
    1224        "Unlock an MTD device"
    1225 
    1226 #define flash_eraseall_trivial_usage \
    1227        "[-jq] MTD_DEVICE"
    1228 #define flash_eraseall_full_usage "\n\n" \
    1229        "Erase an MTD device\n" \
    1230      "\nOptions:" \
    1231      "\n    -j  Format the device for jffs2" \
    1232      "\n    -q  Don't display progress messages" \
    1233 
    1234 #define flashcp_trivial_usage \
    1235        "-v FILE MTD_DEVICE"
    1236 #define flashcp_full_usage "\n\n" \
    1237        "Copy an image to MTD device\n" \
    1238      "\nOptions:" \
    1239      "\n    -v  Verbose" \
    1240 
    1241 #define flock_trivial_usage \
    1242        "[-sxun] FD|{FILE [-c] PROG ARGS}"
    1243 #define flock_full_usage "\n\n" \
    1244        "[Un]lock file descriptor, or lock FILE, run PROG\n" \
    1245      "\nOptions:" \
    1246      "\n    -s  Shared lock" \
    1247      "\n    -x  Exclusive lock (default)" \
    1248      "\n    -u  Unlock FD" \
    1249      "\n    -n  Fail rather than wait" \
    1250 
    1251 #define fold_trivial_usage \
    1252        "[-bs] [-w WIDTH] [FILE]..."
    1253 #define fold_full_usage "\n\n" \
    1254        "Wrap input lines in each FILE (or stdin), writing to stdout\n" \
    1255      "\nOptions:" \
    1256      "\n    -b  Count bytes rather than columns" \
    1257      "\n    -s  Break at spaces" \
    1258      "\n    -w  Use WIDTH columns instead of 80" \
    1259 
    1260 #define free_trivial_usage \
    1261        "" IF_DESKTOP("[-b/k/m/g]")
    1262 #define free_full_usage "\n\n" \
    1263        "Display the amount of free and used system memory"
    1264 #define free_example_usage \
    1265        "$ free\n" \
    1266        "              total         used         free       shared      buffers\n" \
    1267        "  Mem:       257628       248724         8904        59644        93124\n" \
    1268        " Swap:       128516         8404       120112\n" \
    1269        "Total:       386144       257128       129016\n" \
    1270 
    1271 #define freeramdisk_trivial_usage \
    1272        "DEVICE"
    1273 #define freeramdisk_full_usage "\n\n" \
    1274        "Free all memory used by the specified ramdisk"
    1275 #define freeramdisk_example_usage \
    1276        "$ freeramdisk /dev/ram2\n"
    1277 
    1278 #define fsck_trivial_usage \
    1279        "[-ANPRTV] [-C FD] [-t FSTYPE] [FS_OPTS] [BLOCKDEV]..."
    1280 #define fsck_full_usage "\n\n" \
    1281        "Check and repair filesystems\n" \
    1282      "\nOptions:" \
    1283      "\n    -A  Walk /etc/fstab and check all filesystems" \
    1284      "\n    -N  Don't execute, just show what would be done" \
    1285      "\n    -P  With -A, check filesystems in parallel" \
    1286      "\n    -R  With -A, skip the root filesystem" \
    1287      "\n    -T  Don't show title on startup" \
    1288      "\n    -V  Verbose" \
    1289      "\n    -C n    Write status information to specified filedescriptor" \
    1290      "\n    -t TYPE List of filesystem types to check" \
    1291 
    1292 #define fsck_minix_trivial_usage \
    1293        "[-larvsmf] BLOCKDEV"
    1294 #define fsck_minix_full_usage "\n\n" \
    1295        "Check MINIX filesystem\n" \
    1296      "\nOptions:" \
    1297      "\n    -l  List all filenames" \
    1298      "\n    -r  Perform interactive repairs" \
    1299      "\n    -a  Perform automatic repairs" \
    1300      "\n    -v  Verbose" \
    1301      "\n    -s  Output superblock information" \
    1302      "\n    -m  Show \"mode not cleared\" warnings" \
    1303      "\n    -f  Force file system check" \
    1304 
    1305 #define ftpd_trivial_usage \
    1306        "[-wvS] [-t N] [-T N] [DIR]"
    1307 #define ftpd_full_usage "\n\n" \
    1308        "Anonymous FTP server\n" \
    1309        "\n" \
    1310        "ftpd should be used as an inetd service.\n" \
    1311        "ftpd's line for inetd.conf:\n" \
    1312        "    21 stream tcp nowait root ftpd ftpd /files/to/serve\n" \
    1313        "It also can be ran from tcpsvd:\n" \
    1314        "    tcpsvd -vE 0.0.0.0 21 ftpd /files/to/serve\n" \
    1315      "\nOptions:" \
    1316      "\n    -w  Allow upload" \
    1317      "\n    -v  Log to stderr" \
    1318      "\n    -S  Log to syslog" \
    1319      "\n    -t,-T   Idle and absolute timeouts" \
    1320      "\n    DIR Change root to this directory" \
    1321 
    1322 #define ftpget_trivial_usage \
    1323        "[OPTIONS] HOST [LOCAL_FILE] REMOTE_FILE"
    1324 #define ftpget_full_usage "\n\n" \
    1325        "Retrieve a remote file via FTP\n" \
    1326      "\nOptions:" \
    1327     IF_FEATURE_FTPGETPUT_LONG_OPTIONS( \
    1328      "\n    -c,--continue   Continue previous transfer" \
    1329      "\n    -v,--verbose    Verbose" \
    1330      "\n    -u,--username   Username" \
    1331      "\n    -p,--password   Password" \
    1332      "\n    -P,--port   Port number" \
    1333     ) \
    1334     IF_NOT_FEATURE_FTPGETPUT_LONG_OPTIONS( \
    1335      "\n    -c  Continue previous transfer" \
    1336      "\n    -v  Verbose" \
    1337      "\n    -u  Username" \
    1338      "\n    -p  Password" \
    1339      "\n    -P  Port number" \
    1340     )
    1341 
    1342 #define ftpput_trivial_usage \
    1343        "[OPTIONS] HOST [REMOTE_FILE] LOCAL_FILE"
    1344 #define ftpput_full_usage "\n\n" \
    1345        "Store a local file on a remote machine via FTP\n" \
    1346      "\nOptions:" \
    1347     IF_FEATURE_FTPGETPUT_LONG_OPTIONS( \
    1348      "\n    -v,--verbose    Verbose" \
    1349      "\n    -u,--username   Username" \
    1350      "\n    -p,--password   Password" \
    1351      "\n    -P,--port   Port number" \
    1352     ) \
    1353     IF_NOT_FEATURE_FTPGETPUT_LONG_OPTIONS( \
    1354      "\n    -v  Verbose" \
    1355      "\n    -u  Username" \
    1356      "\n    -p  Password" \
    1357      "\n    -P  Port number" \
    1358     )
    1359 
    1360 #define fuser_trivial_usage \
    1361        "[OPTIONS] FILE or PORT/PROTO"
    1362 #define fuser_full_usage "\n\n" \
    1363        "Find processes which use FILEs or PORTs\n" \
    1364      "\nOptions:" \
    1365      "\n    -m  Find processes which use same fs as FILEs" \
    1366      "\n    -4,-6   Search only IPv4/IPv6 space" \
    1367      "\n    -s  Don't display PIDs" \
    1368      "\n    -k  Kill found processes" \
    1369      "\n    -SIGNAL Signal to send (default: KILL)" \
    1370 
    1371 #define getenforce_trivial_usage NOUSAGE_STR
    1372 #define getenforce_full_usage ""
    1373 
    1374 #define getopt_trivial_usage \
    1375        "[OPTIONS]"
    1376 #define getopt_full_usage "\n\n" \
    1377        "Options:" \
    1378     IF_LONG_OPTS( \
    1379      "\n    -a,--alternative        Allow long options starting with single -" \
    1380      "\n    -l,--longoptions=longopts   Long options to be recognized" \
    1381      "\n    -n,--name=progname      The name under which errors are reported" \
    1382      "\n    -o,--options=optstring      Short options to be recognized" \
    1383      "\n    -q,--quiet          Disable error reporting by getopt(3)" \
    1384      "\n    -Q,--quiet-output       No normal output" \
    1385      "\n    -s,--shell=shell        Set shell quoting conventions" \
    1386      "\n    -T,--test           Test for getopt(1) version" \
    1387      "\n    -u,--unquoted           Don't quote the output" \
    1388     ) \
    1389     IF_NOT_LONG_OPTS( \
    1390      "\n    -a      Allow long options starting with single -" \
    1391      "\n    -l longopts Long options to be recognized" \
    1392      "\n    -n progname The name under which errors are reported" \
    1393      "\n    -o optstring    Short options to be recognized" \
    1394      "\n    -q      Disable error reporting by getopt(3)" \
    1395      "\n    -Q      No normal output" \
    1396      "\n    -s shell    Set shell quoting conventions" \
    1397      "\n    -T      Test for getopt(1) version" \
    1398      "\n    -u      Don't quote the output" \
    1399     )
    1400 #define getopt_example_usage \
    1401        "$ cat getopt.test\n" \
    1402        "#!/bin/sh\n" \
    1403        "GETOPT=`getopt -o ab:c:: --long a-long,b-long:,c-long:: \\\n" \
    1404        "       -n 'example.busybox' -- \"$@\"`\n" \
    1405        "if [ $? != 0 ]; then exit 1; fi\n" \
    1406        "eval set -- \"$GETOPT\"\n" \
    1407        "while true; do\n" \
    1408        " case $1 in\n" \
    1409        "   -a|--a-long) echo \"Option a\"; shift;;\n" \
    1410        "   -b|--b-long) echo \"Option b, argument '$2'\"; shift 2;;\n" \
    1411        "   -c|--c-long)\n" \
    1412        "     case \"$2\" in\n" \
    1413        "       \"\") echo \"Option c, no argument\"; shift 2;;\n" \
    1414        "       *)  echo \"Option c, argument '$2'\"; shift 2;;\n" \
    1415        "     esac;;\n" \
    1416        "   --) shift; break;;\n" \
    1417        "   *) echo \"Internal error!\"; exit 1;;\n" \
    1418        " esac\n" \
    1419        "done\n"
    1420 
    1421 #define getsebool_trivial_usage \
    1422        "-a or getsebool boolean..."
    1423 #define getsebool_full_usage "\n\n" \
    1424        "    -a  Show all selinux booleans"
    1425 
    1426 #define getty_trivial_usage \
    1427        "[OPTIONS] BAUD_RATE TTY [TERMTYPE]"
    1428 #define getty_full_usage "\n\n" \
    1429        "Open a tty, prompt for a login name, then invoke /bin/login\n" \
    1430      "\nOptions:" \
    1431      "\n    -h      Enable hardware (RTS/CTS) flow control" \
    1432      "\n    -i      Don't display /etc/issue before running login" \
    1433      "\n    -L      Local line, don't do carrier detect" \
    1434      "\n    -m      Get baud rate from modem's CONNECT status message" \
    1435      "\n    -w      Wait for a CR or LF before sending /etc/issue" \
    1436      "\n    -n      Don't prompt the user for a login name" \
    1437      "\n    -f ISSUE_FILE   Display ISSUE_FILE instead of /etc/issue" \
    1438      "\n    -l LOGIN    Invoke LOGIN instead of /bin/login" \
    1439      "\n    -t SEC      Terminate after SEC if no username is read" \
    1440      "\n    -I INITSTR  Send INITSTR before anything else" \
    1441      "\n    -H HOST     Log HOST into the utmp file as the hostname" \
    1442 
    1443 #define gunzip_trivial_usage \
    1444        "[-cft] [FILE]..."
    1445 #define gunzip_full_usage "\n\n" \
    1446        "Decompress FILEs (or stdin)\n" \
    1447      "\nOptions:" \
    1448      "\n    -c  Write to stdout" \
    1449      "\n    -f  Force" \
    1450      "\n    -t  Test file integrity" \
    1451 
    1452 #define gunzip_example_usage \
    1453        "$ ls -la /tmp/BusyBox*\n" \
    1454        "-rw-rw-r--    1 andersen andersen   557009 Apr 11 10:55 /tmp/BusyBox-0.43.tar.gz\n" \
    1455        "$ gunzip /tmp/BusyBox-0.43.tar.gz\n" \
    1456        "$ ls -la /tmp/BusyBox*\n" \
    1457        "-rw-rw-r--    1 andersen andersen  1761280 Apr 14 17:47 /tmp/BusyBox-0.43.tar\n"
    1458 
    1459 #define gzip_trivial_usage \
    1460        "[-cfd] [FILE]..."
    1461 #define gzip_full_usage "\n\n" \
    1462        "Compress FILEs (or stdin)\n" \
    1463      "\nOptions:" \
    1464      "\n    -d  Decompress" \
    1465      "\n    -c  Write to stdout" \
    1466      "\n    -f  Force" \
    1467 
    1468 #define gzip_example_usage \
    1469        "$ ls -la /tmp/busybox*\n" \
    1470        "-rw-rw-r--    1 andersen andersen  1761280 Apr 14 17:47 /tmp/busybox.tar\n" \
    1471        "$ gzip /tmp/busybox.tar\n" \
    1472        "$ ls -la /tmp/busybox*\n" \
    1473        "-rw-rw-r--    1 andersen andersen   554058 Apr 14 17:49 /tmp/busybox.tar.gz\n"
    1474 
    1475 #define hdparm_trivial_usage \
    1476        "[OPTIONS] [DEVICE]"
    1477 #define hdparm_full_usage "\n\n" \
    1478        "Options:" \
    1479      "\n    -a  Get/set fs readahead" \
    1480      "\n    -A  Set drive read-lookahead flag (0/1)" \
    1481      "\n    -b  Get/set bus state (0 == off, 1 == on, 2 == tristate)" \
    1482      "\n    -B  Set Advanced Power Management setting (1-255)" \
    1483      "\n    -c  Get/set IDE 32-bit IO setting" \
    1484      "\n    -C  Check IDE power mode status" \
    1485     IF_FEATURE_HDPARM_HDIO_GETSET_DMA( \
    1486      "\n    -d  Get/set using_dma flag") \
    1487      "\n    -D  Enable/disable drive defect-mgmt" \
    1488      "\n    -f  Flush buffer cache for device on exit" \
    1489      "\n    -g  Display drive geometry" \
    1490      "\n    -h  Display terse usage information" \
    1491     IF_FEATURE_HDPARM_GET_IDENTITY( \
    1492      "\n    -i  Display drive identification") \
    1493     IF_FEATURE_HDPARM_GET_IDENTITY( \
    1494      "\n    -I  Detailed/current information directly from drive") \
    1495      "\n    -k  Get/set keep_settings_over_reset flag (0/1)" \
    1496      "\n    -K  Set drive keep_features_over_reset flag (0/1)" \
    1497      "\n    -L  Set drive doorlock (0/1) (removable harddisks only)" \
    1498      "\n    -m  Get/set multiple sector count" \
    1499      "\n    -n  Get/set ignore-write-errors flag (0/1)" \
    1500      "\n    -p  Set PIO mode on IDE interface chipset (0,1,2,3,4,...)" \
    1501      "\n    -P  Set drive prefetch count" \
    1502 /*   "\n    -q  Change next setting quietly" - not supported ib bbox */ \
    1503      "\n    -Q  Get/set DMA tagged-queuing depth (if supported)" \
    1504      "\n    -r  Get/set readonly flag (DANGEROUS to set)" \
    1505     IF_FEATURE_HDPARM_HDIO_SCAN_HWIF( \
    1506      "\n    -R  Register an IDE interface (DANGEROUS)") \
    1507      "\n    -S  Set standby (spindown) timeout" \
    1508      "\n    -t  Perform device read timings" \
    1509      "\n    -T  Perform cache read timings" \
    1510      "\n    -u  Get/set unmaskirq flag (0/1)" \
    1511     IF_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF( \
    1512      "\n    -U  Unregister an IDE interface (DANGEROUS)") \
    1513      "\n    -v  Defaults; same as -mcudkrag for IDE drives" \
    1514      "\n    -V  Display program version and exit immediately" \
    1515     IF_FEATURE_HDPARM_HDIO_DRIVE_RESET( \
    1516      "\n    -w  Perform device reset (DANGEROUS)") \
    1517      "\n    -W  Set drive write-caching flag (0/1) (DANGEROUS)" \
    1518     IF_FEATURE_HDPARM_HDIO_TRISTATE_HWIF( \
    1519      "\n    -x  Tristate device for hotswap (0/1) (DANGEROUS)") \
    1520      "\n    -X  Set IDE xfer mode (DANGEROUS)" \
    1521      "\n    -y  Put IDE drive in standby mode" \
    1522      "\n    -Y  Put IDE drive to sleep" \
    1523      "\n    -Z  Disable Seagate auto-powersaving mode" \
    1524      "\n    -z  Reread partition table" \
    1525 
    1526 #define head_trivial_usage \
    1527        "[OPTIONS] [FILE]..."
    1528 #define head_full_usage "\n\n" \
    1529        "Print first 10 lines of each FILE (or stdin) to stdout.\n" \
    1530        "With more than one FILE, precede each with a filename header.\n" \
    1531      "\nOptions:" \
    1532      "\n    -n N[kbm]   Print first N lines" \
    1533     IF_FEATURE_FANCY_HEAD( \
    1534      "\n    -c N[kbm]   Print first N bytes" \
    1535      "\n    -q      Never print headers" \
    1536      "\n    -v      Always print headers" \
    1537     ) \
    1538      "\n" \
    1539      "\nN may be suffixed by k (x1024), b (x512), or m (x1024^2)." \
    1540 
    1541 #define head_example_usage \
    1542        "$ head -n 2 /etc/passwd\n" \
    1543        "root:x:0:0:root:/root:/bin/bash\n" \
    1544        "daemon:x:1:1:daemon:/usr/sbin:/bin/sh\n"
    1545 
    1546 #define tail_trivial_usage \
    1547        "[OPTIONS] [FILE]..."
    1548 #define tail_full_usage "\n\n" \
    1549        "Print last 10 lines of each FILE (or stdin) to stdout.\n" \
    1550        "With more than one FILE, precede each with a filename header.\n" \
    1551      "\nOptions:" \
    1552      "\n    -f      Print data as file grows" \
    1553     IF_FEATURE_FANCY_TAIL( \
    1554      "\n    -s SECONDS  Wait SECONDS between reads with -f" \
    1555     ) \
    1556      "\n    -n N[kbm]   Print last N lines" \
    1557     IF_FEATURE_FANCY_TAIL( \
    1558      "\n    -c N[kbm]   Print last N bytes" \
    1559      "\n    -q      Never print headers" \
    1560      "\n    -v      Always print headers" \
    1561      "\n" \
    1562      "\nN may be suffixed by k (x1024), b (x512), or m (x1024^2)." \
    1563      "\nIf N starts with a '+', output begins with the Nth item from the start" \
    1564      "\nof each file, not from the end." \
    1565     ) \
    1566 
    1567 #define tail_example_usage \
    1568        "$ tail -n 1 /etc/resolv.conf\n" \
    1569        "nameserver 10.0.0.1\n"
    1570 
    1571 #define hexdump_trivial_usage \
    1572        "[-bcCdefnosvx" IF_FEATURE_HEXDUMP_REVERSE("R") "] [FILE]..."
    1573 #define hexdump_full_usage "\n\n" \
    1574        "Display FILEs (or stdin) in a user specified format\n" \
    1575      "\nOptions:" \
    1576      "\n    -b      One-byte octal display" \
    1577      "\n    -c      One-byte character display" \
    1578      "\n    -C      Canonical hex+ASCII, 16 bytes per line" \
    1579      "\n    -d      Two-byte decimal display" \
    1580      "\n    -e FORMAT STRING" \
    1581      "\n    -f FORMAT FILE" \
    1582      "\n    -n LENGTH   Interpret only LENGTH bytes of input" \
    1583      "\n    -o      Two-byte octal display" \
    1584      "\n    -s OFFSET   Skip OFFSET bytes" \
    1585      "\n    -v      Display all input data" \
    1586      "\n    -x      Two-byte hexadecimal display" \
    1587     IF_FEATURE_HEXDUMP_REVERSE( \
    1588      "\n    -R      Reverse of 'hexdump -Cv'") \
    1589 
    1590 #define hd_trivial_usage \
    1591        "FILE..."
    1592 #define hd_full_usage "\n\n" \
    1593        "hd is an alias for hexdump -C"
    1594 
    1595 #define hostid_trivial_usage \
    1596        ""
    1597 #define hostid_full_usage "\n\n" \
    1598        "Print out a unique 32-bit identifier for the machine"
    1599 
    1600 #define hostname_trivial_usage \
    1601        "[OPTIONS] [HOSTNAME | -F FILE]"
    1602 #define hostname_full_usage "\n\n" \
    1603        "Get or set hostname or DNS domain name\n" \
    1604      "\nOptions:" \
    1605      "\n    -s  Short" \
    1606      "\n    -i  Addresses for the hostname" \
    1607      "\n    -d  DNS domain name" \
    1608      "\n    -f  Fully qualified domain name" \
    1609      "\n    -F FILE Use FILE's content as hostname" \
    1610 
    1611 #define hostname_example_usage \
    1612        "$ hostname\n" \
    1613        "sage\n"
    1614 
    1615 #define dnsdomainname_trivial_usage NOUSAGE_STR
    1616 #define dnsdomainname_full_usage ""
    1617 
    1618 #define httpd_trivial_usage \
    1619        "[-ifv[v]]" \
    1620        " [-c CONFFILE]" \
    1621        " [-p [IP:]PORT]" \
    1622     IF_FEATURE_HTTPD_SETUID(" [-u USER[:GRP]]") \
    1623     IF_FEATURE_HTTPD_BASIC_AUTH(" [-r REALM]") \
    1624        " [-h HOME]\n" \
    1625        "or httpd -d/-e" IF_FEATURE_HTTPD_AUTH_MD5("/-m") " STRING"
    1626 #define httpd_full_usage "\n\n" \
    1627        "Listen for incoming HTTP requests\n" \
    1628      "\nOptions:" \
    1629      "\n    -i      Inetd mode" \
    1630      "\n    -f      Don't daemonize" \
    1631      "\n    -v[v]       Verbose" \
    1632      "\n    -p [IP:]PORT    Bind to IP:PORT (default *:80)" \
    1633     IF_FEATURE_HTTPD_SETUID( \
    1634      "\n    -u USER[:GRP]   Set uid/gid after binding to port") \
    1635     IF_FEATURE_HTTPD_BASIC_AUTH( \
    1636      "\n    -r REALM    Authentication Realm for Basic Authentication") \
    1637      "\n    -h HOME     Home directory (default .)" \
    1638      "\n    -c FILE     Configuration file (default {/etc,HOME}/httpd.conf)" \
    1639     IF_FEATURE_HTTPD_AUTH_MD5( \
    1640      "\n    -m STRING   MD5 crypt STRING") \
    1641      "\n    -e STRING   HTML encode STRING" \
    1642      "\n    -d STRING   URL decode STRING" \
    1643 
    1644 #define hwclock_trivial_usage \
    1645     IF_FEATURE_HWCLOCK_LONG_OPTIONS( \
    1646        "[-r|--show] [-s|--hctosys] [-w|--systohc]" \
    1647        " [-l|--localtime] [-u|--utc]" \
    1648        " [-f FILE]" \
    1649     ) \
    1650     IF_NOT_FEATURE_HWCLOCK_LONG_OPTIONS( \
    1651        "[-r] [-s] [-w] [-l] [-u] [-f FILE]" \
    1652     )
    1653 #define hwclock_full_usage "\n\n" \
    1654        "Query and set hardware clock (RTC)\n" \
    1655      "\nOptions:" \
    1656      "\n    -r  Show hardware clock time" \
    1657      "\n    -s  Set system time from hardware clock" \
    1658      "\n    -w  Set hardware clock to system time" \
    1659      "\n    -u  Hardware clock is in UTC" \
    1660      "\n    -l  Hardware clock is in local time" \
    1661      "\n    -f FILE Use specified device (e.g. /dev/rtc2)" \
    1662 
    1663 #define id_trivial_usage \
    1664        "[OPTIONS] [USER]"
    1665 #define id_full_usage "\n\n" \
    1666        "Print information about USER or the current user\n" \
    1667      "\nOptions:" \
    1668     IF_SELINUX( \
    1669      "\n    -Z  Security context" \
    1670     ) \
    1671      "\n    -u  User ID" \
    1672      "\n    -g  Group ID" \
    1673      "\n    -G  Supplementary group IDs" \
    1674      "\n    -n  Print names instead of numbers" \
    1675      "\n    -r  Print real ID instead of effective ID" \
    1676 
    1677 #define id_example_usage \
    1678        "$ id\n" \
    1679        "uid=1000(andersen) gid=1000(andersen)\n"
    1680 
    1681 #define ifconfig_trivial_usage \
    1682     IF_FEATURE_IFCONFIG_STATUS("[-a]") " interface [address]"
    1683 #define ifconfig_full_usage "\n\n" \
    1684        "Configure a network interface\n" \
    1685      "\nOptions:" \
    1686      "\n" \
    1687     IF_FEATURE_IPV6( \
    1688        "    [add ADDRESS[/PREFIXLEN]]\n") \
    1689     IF_FEATURE_IPV6( \
    1690        "    [del ADDRESS[/PREFIXLEN]]\n") \
    1691        "    [[-]broadcast [ADDRESS]] [[-]pointopoint [ADDRESS]]\n" \
    1692        "    [netmask ADDRESS] [dstaddr ADDRESS]\n" \
    1693     IF_FEATURE_IFCONFIG_SLIP( \
    1694        "    [outfill NN] [keepalive NN]\n") \
    1695        "    " IF_FEATURE_IFCONFIG_HW("[hw ether" IF_FEATURE_HWIB("|infiniband")" ADDRESS] ") "[metric NN] [mtu NN]\n" \
    1696        "    [[-]trailers] [[-]arp] [[-]allmulti]\n" \
    1697        "    [multicast] [[-]promisc] [txqueuelen NN] [[-]dynamic]\n" \
    1698     IF_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ( \
    1699        "    [mem_start NN] [io_addr NN] [irq NN]\n") \
    1700        "    [up|down] ..."
    1701 
    1702 #define ifenslave_trivial_usage \
    1703        "[-cdf] MASTER_IFACE SLAVE_IFACE..."
    1704 #define ifenslave_full_usage "\n\n" \
    1705        "Configure network interfaces for parallel routing\n" \
    1706      "\nOptions:" \
    1707      "\n    -c,--change-active  Change active slave" \
    1708      "\n    -d,--detach     Remove slave interface from bonding device" \
    1709      "\n    -f,--force      Force, even if interface is not Ethernet" \
    1710 /*   "\n    -r,--receive-slave  Create a receive-only slave" */
    1711 
    1712 #define ifenslave_example_usage \
    1713        "To create a bond device, simply follow these three steps:\n" \
    1714        "- ensure that the required drivers are properly loaded:\n" \
    1715        "  # modprobe bonding ; modprobe <3c59x|eepro100|pcnet32|tulip|...>\n" \
    1716        "- assign an IP address to the bond device:\n" \
    1717        "  # ifconfig bond0 <addr> netmask <mask> broadcast <bcast>\n" \
    1718        "- attach all the interfaces you need to the bond device:\n" \
    1719        "  # ifenslave bond0 eth0 eth1 eth2\n" \
    1720        "  If bond0 didn't have a MAC address, it will take eth0's. Then, all\n" \
    1721        "  interfaces attached AFTER this assignment will get the same MAC addr.\n\n" \
    1722        "  To detach a dead interface without setting the bond device down:\n" \
    1723        "  # ifenslave -d bond0 eth1\n\n" \
    1724        "  To set the bond device down and automatically release all the slaves:\n" \
    1725        "  # ifconfig bond0 down\n\n" \
    1726        "  To change active slave:\n" \
    1727        "  # ifenslave -c bond0 eth0\n" \
    1728 
    1729 #define ifplugd_trivial_usage \
    1730        "[OPTIONS]"
    1731 #define ifplugd_full_usage "\n\n" \
    1732        "Network interface plug detection daemon\n" \
    1733      "\nOptions:" \
    1734      "\n    -n      Don't daemonize" \
    1735      "\n    -s      Don't log to syslog" \
    1736      "\n    -i IFACE    Interface" \
    1737      "\n    -f/-F       Treat link detection error as link down/link up" \
    1738      "\n            (otherwise exit on error)" \
    1739      "\n    -a      Don't up interface at each link probe" \
    1740      "\n    -M      Monitor creation/destruction of interface" \
    1741      "\n            (otherwise it must exist)" \
    1742      "\n    -r PROG     Script to run" \
    1743      "\n    -x ARG      Extra argument for script" \
    1744      "\n    -I      Don't exit on nonzero exit code from script" \
    1745      "\n    -p      Don't run script on daemon startup" \
    1746      "\n    -q      Don't run script on daemon quit" \
    1747      "\n    -l      Run script on startup even if no cable is detected" \
    1748      "\n    -t SECS     Poll time in seconds" \
    1749      "\n    -u SECS     Delay before running script after link up" \
    1750      "\n    -d SECS     Delay after link down" \
    1751      "\n    -m MODE     API mode (mii, priv, ethtool, wlan, iff, auto)" \
    1752      "\n    -k      Kill running daemon" \
    1753 
    1754 #define ifup_trivial_usage \
    1755        "[-an"IF_FEATURE_IFUPDOWN_MAPPING("m")"vf] [-i FILE] IFACE..."
    1756 #define ifup_full_usage "\n\n" \
    1757        "Options:" \
    1758      "\n    -a  De/configure all interfaces automatically" \
    1759      "\n    -i FILE Use FILE for interface definitions" \
    1760      "\n    -n  Print out what would happen, but don't do it" \
    1761     IF_FEATURE_IFUPDOWN_MAPPING( \
    1762      "\n        (note: doesn't disable mappings)" \
    1763      "\n    -m  Don't run any mappings" \
    1764     ) \
    1765      "\n    -v  Print out what would happen before doing it" \
    1766      "\n    -f  Force de/configuration" \
    1767 
    1768 #define ifdown_trivial_usage \
    1769        "[-an"IF_FEATURE_IFUPDOWN_MAPPING("m")"vf] [-i FILE] IFACE..."
    1770 #define ifdown_full_usage "\n\n" \
    1771        "Options:" \
    1772      "\n    -a  De/configure all interfaces automatically" \
    1773      "\n    -i FILE Use FILE for interface definitions" \
    1774      "\n    -n  Print out what would happen, but don't do it" \
    1775     IF_FEATURE_IFUPDOWN_MAPPING( \
    1776      "\n        (note: doesn't disable mappings)" \
    1777      "\n    -m  Don't run any mappings" \
    1778     ) \
    1779      "\n    -v  Print out what would happen before doing it" \
    1780      "\n    -f  Force de/configuration" \
    1781 
    1782 #define inetd_trivial_usage \
    1783        "[-fe] [-q N] [-R N] [CONFFILE]"
    1784 #define inetd_full_usage "\n\n" \
    1785        "Listen for network connections and launch programs\n" \
    1786      "\nOptions:" \
    1787      "\n    -f  Run in foreground" \
    1788      "\n    -e  Log to stderr" \
    1789      "\n    -q N    Socket listen queue (default: 128)" \
    1790      "\n    -R N    Pause services after N connects/min" \
    1791      "\n        (default: 0 - disabled)" \
    1792 
    1793 #define inotifyd_trivial_usage \
    1794     "PROG FILE1[:MASK]..."
    1795 #define inotifyd_full_usage "\n\n" \
    1796        "Run PROG on filesystem changes." \
    1797      "\nWhen a filesystem event matching MASK occurs on FILEn," \
    1798      "\nPROG ACTUAL_EVENTS FILEn [SUBFILE] is run." \
    1799      "\nEvents:" \
    1800      "\n    a   File is accessed" \
    1801      "\n    c   File is modified" \
    1802      "\n    e   Metadata changed" \
    1803      "\n    w   Writable file is closed" \
    1804      "\n    0   Unwritable file is closed" \
    1805      "\n    r   File is opened" \
    1806      "\n    D   File is deleted" \
    1807      "\n    M   File is moved" \
    1808      "\n    u   Backing fs is unmounted" \
    1809      "\n    o   Event queue overflowed" \
    1810      "\n    x   File can't be watched anymore" \
    1811      "\nIf watching a directory:" \
    1812      "\n    m   Subfile is moved into dir" \
    1813      "\n    y   Subfile is moved out of dir" \
    1814      "\n    n   Subfile is created" \
    1815      "\n    d   Subfile is deleted" \
    1816      "\n" \
    1817      "\ninotifyd waits for PROG to exit." \
    1818      "\nWhen x event happens for all FILEs, inotifyd exits." \
    1819 
    1820 /* -v, -b, -c are ignored */
    1821 #define install_trivial_usage \
    1822     "[-cdDsp] [-o USER] [-g GRP] [-m MODE] [SOURCE]... DEST"
    1823 #define install_full_usage "\n\n" \
    1824        "Copy files and set attributes\n" \
    1825      "\nOptions:" \
    1826      "\n    -c  Just copy (default)" \
    1827      "\n    -d  Create directories" \
    1828      "\n    -D  Create leading target directories" \
    1829      "\n    -s  Strip symbol table" \
    1830      "\n    -p  Preserve date" \
    1831      "\n    -o USER Set ownership" \
    1832      "\n    -g GRP  Set group ownership" \
    1833      "\n    -m MODE Set permissions" \
    1834     IF_SELINUX( \
    1835      "\n    -Z  Set security context" \
    1836     )
    1837 
    1838 /* would need to make the " | " optional depending on more than one selected: */
    1839 #define ip_trivial_usage \
    1840        "[OPTIONS] {" \
    1841     IF_FEATURE_IP_ADDRESS("address | ") \
    1842     IF_FEATURE_IP_ROUTE("route | ") \
    1843     IF_FEATURE_IP_LINK("link | ") \
    1844     IF_FEATURE_IP_TUNNEL("tunnel | ") \
    1845     IF_FEATURE_IP_RULE("rule") \
    1846        "} {COMMAND}"
    1847 #define ip_full_usage "\n\n" \
    1848        "ip [OPTIONS] OBJECT {COMMAND}\n" \
    1849        "where OBJECT := {" \
    1850     IF_FEATURE_IP_ADDRESS("address | ") \
    1851     IF_FEATURE_IP_ROUTE("route | ") \
    1852     IF_FEATURE_IP_LINK("link | ") \
    1853     IF_FEATURE_IP_TUNNEL("tunnel | ") \
    1854     IF_FEATURE_IP_RULE("rule") \
    1855        "}\n" \
    1856        "OPTIONS := { -f[amily] { inet | inet6 | link } | -o[neline] }" \
    1857 
    1858 #define ipaddr_trivial_usage \
    1859        "{ {add|del} IFADDR dev STRING | {show|flush}\n" \
    1860        "        [dev STRING] [to PREFIX] }"
    1861 #define ipaddr_full_usage "\n\n" \
    1862        "ipaddr {add|delete} IFADDR dev STRING\n" \
    1863        "ipaddr {show|flush} [dev STRING] [scope SCOPE-ID]\n" \
    1864        "    [to PREFIX] [label PATTERN]\n" \
    1865        "    IFADDR := PREFIX | ADDR peer PREFIX\n" \
    1866        "    [broadcast ADDR] [anycast ADDR]\n" \
    1867        "    [label STRING] [scope SCOPE-ID]\n" \
    1868        "    SCOPE-ID := [host | link | global | NUMBER]" \
    1869 
    1870 #define ipcalc_trivial_usage \
    1871        "[OPTIONS] ADDRESS[[/]NETMASK] [NETMASK]"
    1872 #define ipcalc_full_usage "\n\n" \
    1873        "Calculate IP network settings from a IP address\n" \
    1874      "\nOptions:" \
    1875     IF_FEATURE_IPCALC_LONG_OPTIONS( \
    1876      "\n    -b,--broadcast  Display calculated broadcast address" \
    1877      "\n    -n,--network    Display calculated network address" \
    1878      "\n    -m,--netmask    Display default netmask for IP" \
    1879     IF_FEATURE_IPCALC_FANCY( \
    1880      "\n    -p,--prefix Display the prefix for IP/NETMASK" \
    1881      "\n    -h,--hostname   Display first resolved host name" \
    1882      "\n    -s,--silent Don't ever display error messages" \
    1883     ) \
    1884     ) \
    1885     IF_NOT_FEATURE_IPCALC_LONG_OPTIONS( \
    1886      "\n    -b  Display calculated broadcast address" \
    1887      "\n    -n  Display calculated network address" \
    1888      "\n    -m  Display default netmask for IP" \
    1889     IF_FEATURE_IPCALC_FANCY( \
    1890      "\n    -p  Display the prefix for IP/NETMASK" \
    1891      "\n    -h  Display first resolved host name" \
    1892      "\n    -s  Don't ever display error messages" \
    1893     ) \
    1894     )
    1895 
    1896 #define ipcrm_trivial_usage \
    1897        "[-MQS key] [-mqs id]"
    1898 #define ipcrm_full_usage "\n\n" \
    1899        "Upper-case options MQS remove an object by shmkey value.\n" \
    1900        "Lower-case options remove an object by shmid value.\n" \
    1901      "\nOptions:" \
    1902      "\n    -mM Remove memory segment after last detach" \
    1903      "\n    -qQ Remove message queue" \
    1904      "\n    -sS Remove semaphore" \
    1905 
    1906 #define ipcs_trivial_usage \
    1907        "[[-smq] -i shmid] | [[-asmq] [-tcplu]]"
    1908 #define ipcs_full_usage "\n\n" \
    1909        "    -i  Show specific resource" \
    1910      "\nResource specification:" \
    1911      "\n    -m  Shared memory segments" \
    1912      "\n    -q  Message queues" \
    1913      "\n    -s  Semaphore arrays" \
    1914      "\n    -a  All (default)" \
    1915      "\nOutput format:" \
    1916      "\n    -t  Time" \
    1917      "\n    -c  Creator" \
    1918      "\n    -p  Pid" \
    1919      "\n    -l  Limits" \
    1920      "\n    -u  Summary" \
    1921 
    1922 #define iplink_trivial_usage \
    1923        "{ set DEVICE { up | down | arp { on | off } | show [DEVICE] }"
    1924 #define iplink_full_usage "\n\n" \
    1925        "iplink set DEVICE { up | down | arp | multicast { on | off } |\n" \
    1926        "            dynamic { on | off } |\n" \
    1927        "            mtu MTU }\n" \
    1928        "iplink show [DEVICE]" \
    1929 
    1930 #define iproute_trivial_usage \
    1931        "{ list | flush | { add | del | change | append |\n" \
    1932        "        replace | monitor } ROUTE }"
    1933 #define iproute_full_usage "\n\n" \
    1934        "iproute { list | flush } SELECTOR\n" \
    1935        "iproute get ADDRESS [from ADDRESS iif STRING]\n" \
    1936        "            [oif STRING]  [tos TOS]\n" \
    1937        "iproute { add | del | change | append | replace | monitor } ROUTE\n" \
    1938        "            SELECTOR := [root PREFIX] [match PREFIX] [proto RTPROTO]\n" \
    1939        "            ROUTE := [TYPE] PREFIX [tos TOS] [proto RTPROTO]\n" \
    1940        "                [metric METRIC]" \
    1941 
    1942 #define iprule_trivial_usage \
    1943        "{[list | add | del] RULE}"
    1944 #define iprule_full_usage "\n\n" \
    1945        "iprule [list | add | del] SELECTOR ACTION\n" \
    1946        "    SELECTOR := [from PREFIX] [to PREFIX] [tos TOS] [fwmark FWMARK]\n" \
    1947        "            [dev STRING] [pref NUMBER]\n" \
    1948        "    ACTION := [table TABLE_ID] [nat ADDRESS]\n" \
    1949        "            [prohibit | reject | unreachable]\n" \
    1950        "            [realms [SRCREALM/]DSTREALM]\n" \
    1951        "    TABLE_ID := [local | main | default | NUMBER]" \
    1952 
    1953 #define iptunnel_trivial_usage \
    1954        "{ add | change | del | show } [NAME]\n" \
    1955        "    [mode { ipip | gre | sit }]\n" \
    1956        "    [remote ADDR] [local ADDR] [ttl TTL]"
    1957 #define iptunnel_full_usage "\n\n" \
    1958        "iptunnel { add | change | del | show } [NAME]\n" \
    1959        "    [mode { ipip | gre | sit }] [remote ADDR] [local ADDR]\n" \
    1960        "    [[i|o]seq] [[i|o]key KEY] [[i|o]csum]\n" \
    1961        "    [ttl TTL] [tos TOS] [[no]pmtudisc] [dev PHYS_DEV]" \
    1962 
    1963 #define kbd_mode_trivial_usage \
    1964        "[-a|k|s|u] [-C TTY]"
    1965 #define kbd_mode_full_usage "\n\n" \
    1966        "Report or set the keyboard mode\n" \
    1967      "\nOptions:" \
    1968      "\n    -a  Default (ASCII)" \
    1969      "\n    -k  Medium-raw (keyboard)" \
    1970      "\n    -s  Raw (scancode)" \
    1971      "\n    -u  Unicode (utf-8)" \
    1972      "\n    -C TTY  Affect TTY instead of /dev/tty" \
    1973 
    1974 #define kill_trivial_usage \
    1975        "[-l] [-SIG] PID..."
    1976 #define kill_full_usage "\n\n" \
    1977        "Send a signal (default: TERM) to given PIDs\n" \
    1978      "\nOptions:" \
    1979      "\n    -l  List all signal names and numbers" \
    1980 /*   "\n    -s SIG  Yet another way of specifying SIG" */ \
    1981 
    1982 #define kill_example_usage \
    1983        "$ ps | grep apache\n" \
    1984        "252 root     root     S [apache]\n" \
    1985        "263 www-data www-data S [apache]\n" \
    1986        "264 www-data www-data S [apache]\n" \
    1987        "265 www-data www-data S [apache]\n" \
    1988        "266 www-data www-data S [apache]\n" \
    1989        "267 www-data www-data S [apache]\n" \
    1990        "$ kill 252\n"
    1991 
    1992 #define killall_trivial_usage \
    1993        "[-l] [-q] [-SIG] PROCESS_NAME..."
    1994 #define killall_full_usage "\n\n" \
    1995        "Send a signal (default: TERM) to given processes\n" \
    1996      "\nOptions:" \
    1997      "\n    -l  List all signal names and numbers" \
    1998 /*   "\n    -s SIG  Yet another way of specifying SIG" */ \
    1999      "\n    -q  Don't complain if no processes were killed" \
    2000 
    2001 #define killall_example_usage \
    2002        "$ killall apache\n"
    2003 
    2004 #define killall5_trivial_usage \
    2005        "[-l] [-SIG] [-o PID]..."
    2006 #define killall5_full_usage "\n\n" \
    2007        "Send a signal (default: TERM) to all processes outside current session\n" \
    2008      "\nOptions:" \
    2009      "\n    -l  List all signal names and numbers" \
    2010      "\n    -o PID  Don't signal this PID" \
    2011 /*   "\n    -s SIG  Yet another way of specifying SIG" */ \
    2012 
    2013 #define klogd_trivial_usage \
    2014        "[-c N] [-n]"
    2015 #define klogd_full_usage "\n\n" \
    2016        "Kernel logger\n" \
    2017      "\nOptions:" \
    2018      "\n    -c N    Only messages with level < N are printed to console" \
    2019      "\n    -n  Run in foreground" \
    2020 
    2021 #define length_trivial_usage \
    2022        "STRING"
    2023 #define length_full_usage "\n\n" \
    2024        "Print STRING's length"
    2025 
    2026 #define length_example_usage \
    2027        "$ length Hello\n" \
    2028        "5\n"
    2029 
    2030 #define less_trivial_usage \
    2031        "[-EMNmh~I?] [FILE]..."
    2032 #define less_full_usage "\n\n" \
    2033        "View FILE (or stdin) one screenful at a time\n" \
    2034      "\nOptions:" \
    2035      "\n    -E  Quit once the end of a file is reached" \
    2036      "\n    -M,-m   Display status line with line numbers" \
    2037      "\n        and percentage through the file" \
    2038      "\n    -N  Prefix line number to each line" \
    2039      "\n    -I  Ignore case in all searches" \
    2040      "\n    -~  Suppress ~s displayed past the end of the file" \
    2041 
    2042 #define linux32_trivial_usage NOUSAGE_STR
    2043 #define linux32_full_usage ""
    2044 #define linux64_trivial_usage NOUSAGE_STR
    2045 #define linux64_full_usage ""
    2046 
    2047 #define setarch_trivial_usage \
    2048        "personality PROG ARGS"
    2049 #define setarch_full_usage "\n\n" \
    2050        "Personality may be:\n" \
    2051        "    linux32     Set 32bit uname emulation\n" \
    2052        "    linux64     Set 64bit uname emulation" \
    2053 
    2054 #define ln_trivial_usage \
    2055        "[OPTIONS] TARGET... LINK|DIR"
    2056 #define ln_full_usage "\n\n" \
    2057        "Create a link LINK or DIR/TARGET to the specified TARGET(s)\n" \
    2058      "\nOptions:" \
    2059      "\n    -s  Make symlinks instead of hardlinks" \
    2060      "\n    -f  Remove existing destinations" \
    2061      "\n    -n  Don't dereference symlinks - treat like normal file" \
    2062      "\n    -b  Make a backup of the target (if exists) before link operation" \
    2063      "\n    -S suf  Use suffix instead of ~ when making backup files" \
    2064 
    2065 #define ln_example_usage \
    2066        "$ ln -s BusyBox /tmp/ls\n" \
    2067        "$ ls -l /tmp/ls\n" \
    2068        "lrwxrwxrwx    1 root     root            7 Apr 12 18:39 ls -> BusyBox*\n"
    2069 
    2070 #define load_policy_trivial_usage NOUSAGE_STR
    2071 #define load_policy_full_usage ""
    2072 
    2073 #define loadfont_trivial_usage \
    2074        "< font"
    2075 #define loadfont_full_usage "\n\n" \
    2076        "Load a console font from stdin" \
    2077 /*   "\n    -C TTY  Affect TTY instead of /dev/tty" */ \
    2078 
    2079 #define loadfont_example_usage \
    2080        "$ loadfont < /etc/i18n/fontname\n"
    2081 
    2082 #define loadkmap_trivial_usage \
    2083        "< keymap"
    2084 #define loadkmap_full_usage "\n\n" \
    2085        "Load a binary keyboard translation table from stdin\n" \
    2086 /*   "\n    -C TTY  Affect TTY instead of /dev/tty" */ \
    2087 
    2088 #define loadkmap_example_usage \
    2089        "$ loadkmap < /etc/i18n/lang-keymap\n"
    2090 
    2091 #define logger_trivial_usage \
    2092        "[OPTIONS] [MESSAGE]"
    2093 #define logger_full_usage "\n\n" \
    2094        "Write MESSAGE (or stdin) to syslog\n" \
    2095      "\nOptions:" \
    2096      "\n    -s  Log to stderr as well as the system log" \
    2097      "\n    -t TAG  Log using the specified tag (defaults to user name)" \
    2098      "\n    -p PRIO Priority (numeric or facility.level pair)" \
    2099 
    2100 #define logger_example_usage \
    2101        "$ logger \"hello\"\n"
    2102 
    2103 #define login_trivial_usage \
    2104        "[-p] [-h HOST] [[-f] USER]"
    2105 #define login_full_usage "\n\n" \
    2106        "Begin a new session on the system\n" \
    2107      "\nOptions:" \
    2108      "\n    -f  Don't authenticate (user already authenticated)" \
    2109      "\n    -h  Name of the remote host" \
    2110      "\n    -p  Preserve environment" \
    2111 
    2112 #define logname_trivial_usage \
    2113        ""
    2114 #define logname_full_usage "\n\n" \
    2115        "Print the name of the current user"
    2116 #define logname_example_usage \
    2117        "$ logname\n" \
    2118        "root\n"
    2119 
    2120 #define logread_trivial_usage \
    2121        "[-f]"
    2122 #define logread_full_usage "\n\n" \
    2123        "Show messages in syslogd's circular buffer\n" \
    2124      "\nOptions:" \
    2125      "\n    -f  Output data as log grows" \
    2126 
    2127 #define losetup_trivial_usage \
    2128        "[-o OFS] LOOPDEV FILE - associate loop devices\n" \
    2129        "    losetup -d LOOPDEV - disassociate\n" \
    2130        "    losetup [-f] - show"
    2131 #define losetup_full_usage "\n\n" \
    2132        "Options:" \
    2133      "\n    -o OFS  Start OFS bytes into FILE" \
    2134      "\n    -f  Show first free loop device" \
    2135 
    2136 #define losetup_notes_usage \
    2137        "No arguments will display all current associations.\n" \
    2138        "One argument (losetup /dev/loop1) will display the current association\n" \
    2139        "(if any), or disassociate it (with -d). The display shows the offset\n" \
    2140        "and filename of the file the loop device is currently bound to.\n\n" \
    2141        "Two arguments (losetup /dev/loop1 file.img) create a new association,\n" \
    2142        "with an optional offset (-o 12345). Encryption is not yet supported.\n" \
    2143        "losetup -f will show the first loop free loop device\n\n"
    2144 
    2145 #define lpd_trivial_usage \
    2146        "SPOOLDIR [HELPER [ARGS]]"
    2147 #define lpd_full_usage "\n\n" \
    2148        "SPOOLDIR must contain (symlinks to) device nodes or directories" \
    2149      "\nwith names matching print queue names. In the first case, jobs are" \
    2150      "\nsent directly to the device. Otherwise each job is stored in queue" \
    2151      "\ndirectory and HELPER program is called. Name of file to print" \
    2152      "\nis passed in $DATAFILE variable." \
    2153      "\nExample:" \
    2154      "\n    tcpsvd -E 0 515 softlimit -m 999999 lpd /var/spool ./print" \
    2155 
    2156 #define lpq_trivial_usage \
    2157        "[-P queue[@host[:port]]] [-U USERNAME] [-d JOBID]... [-fs]"
    2158 #define lpq_full_usage "\n\n" \
    2159        "Options:" \
    2160      "\n    -P  lp service to connect to (else uses $PRINTER)" \
    2161      "\n    -d  Delete jobs" \
    2162      "\n    -f  Force any waiting job to be printed" \
    2163      "\n    -s  Short display" \
    2164 
    2165 #define lpr_trivial_usage \
    2166        "-P queue[@host[:port]] -U USERNAME -J TITLE -Vmh [FILE]..."
    2167 /* -C CLASS exists too, not shown.
    2168  * CLASS is supposed to be printed on banner page, if one is requested */
    2169 #define lpr_full_usage "\n\n" \
    2170        "Options:" \
    2171      "\n    -P  lp service to connect to (else uses $PRINTER)"\
    2172      "\n    -m  Send mail on completion" \
    2173      "\n    -h  Print banner page too" \
    2174      "\n    -V  Verbose" \
    2175 
    2176 #define ls_trivial_usage \
    2177        "[-1Aa" IF_FEATURE_LS_TIMESTAMPS("c") "Cd" \
    2178     IF_FEATURE_LS_TIMESTAMPS("e") IF_FEATURE_LS_FILETYPES("F") "iln" \
    2179     IF_FEATURE_LS_FILETYPES("p") IF_FEATURE_LS_FOLLOWLINKS("L") \
    2180     IF_FEATURE_LS_RECURSIVE("R") IF_FEATURE_LS_SORTFILES("rS") "s" \
    2181     IF_FEATURE_AUTOWIDTH("T") IF_FEATURE_LS_TIMESTAMPS("tu") \
    2182     IF_FEATURE_LS_SORTFILES("v") IF_FEATURE_AUTOWIDTH("w") "x" \
    2183     IF_FEATURE_LS_SORTFILES("X") IF_FEATURE_HUMAN_READABLE("h") "k" \
    2184     IF_SELINUX("K") "] [FILE]..."
    2185 #define ls_full_usage "\n\n" \
    2186        "List directory contents\n" \
    2187      "\nOptions:" \
    2188      "\n    -1  List in a single column" \
    2189      "\n    -A  Don't list . and .." \
    2190      "\n    -a  Don't hide entries starting with ." \
    2191      "\n    -C  List by columns" \
    2192     IF_FEATURE_LS_TIMESTAMPS( \
    2193      "\n    -c  With -l: sort by ctime") \
    2194     IF_FEATURE_LS_COLOR( \
    2195      "\n    --color[={always,never,auto}]   Control coloring") \
    2196      "\n    -d  List directory entries instead of contents" \
    2197     IF_FEATURE_LS_TIMESTAMPS( \
    2198      "\n    -e  List full date and time") \
    2199     IF_FEATURE_LS_FILETYPES( \
    2200      "\n    -F  Append indicator (one of */=@|) to entries") \
    2201      "\n    -i  List inode numbers" \
    2202      "\n    -l  Long listing format" \
    2203      "\n    -n  List numeric UIDs and GIDs instead of names" \
    2204     IF_FEATURE_LS_FILETYPES( \
    2205      "\n    -p  Append indicator (one of /=@|) to entries") \
    2206     IF_FEATURE_LS_FOLLOWLINKS( \
    2207      "\n    -L  List entries pointed to by symlinks") \
    2208     IF_FEATURE_LS_RECURSIVE( \
    2209      "\n    -R  Recurse") \
    2210     IF_FEATURE_LS_SORTFILES( \
    2211      "\n    -r  Sort in reverse order") \
    2212     IF_FEATURE_LS_SORTFILES( \
    2213      "\n    -S  Sort by file size") \
    2214      "\n    -s  List the size of each file, in blocks" \
    2215     IF_FEATURE_AUTOWIDTH( \
    2216      "\n    -T N    Assume tabstop every N columns") \
    2217     IF_FEATURE_LS_TIMESTAMPS( \
    2218      "\n    -t  With -l: sort by modification time") \
    2219     IF_FEATURE_LS_TIMESTAMPS( \
    2220      "\n    -u  With -l: sort by access time") \
    2221     IF_FEATURE_LS_SORTFILES( \
    2222      "\n    -v  Sort by version") \
    2223     IF_FEATURE_AUTOWIDTH( \
    2224      "\n    -w N    Assume the terminal is N columns wide") \
    2225      "\n    -x  List by lines" \
    2226     IF_FEATURE_LS_SORTFILES( \
    2227      "\n    -X  Sort by extension") \
    2228     IF_FEATURE_HUMAN_READABLE( \
    2229      "\n    -h  List sizes in human readable format (1K 243M 2G)") \
    2230     IF_SELINUX( \
    2231      "\n    -k  List security context") \
    2232     IF_SELINUX( \
    2233      "\n    -K  List security context in long format") \
    2234     IF_SELINUX( \
    2235      "\n    -Z  List security context and permission") \
    2236 
    2237 #define lsattr_trivial_usage \
    2238        "[-Radlv] [FILE]..."
    2239 #define lsattr_full_usage "\n\n" \
    2240        "List file attributes on an ext2 fs\n" \
    2241      "\nOptions:" \
    2242      "\n    -R  Recurse" \
    2243      "\n    -a  Don't hide entries starting with ." \
    2244      "\n    -d  List directory entries instead of contents" \
    2245      "\n    -l  List long flag names" \
    2246      "\n    -v  List the file's version/generation number" \
    2247 
    2248 #define lspci_trivial_usage \
    2249        "[-mk]"
    2250 #define lspci_full_usage "\n\n" \
    2251        "List all PCI devices" \
    2252      "\n" \
    2253      "\n    -m  Parseable output" \
    2254      "\n    -k  Show driver" \
    2255 
    2256 #define lsusb_trivial_usage NOUSAGE_STR
    2257 #define lsusb_full_usage ""
    2258 
    2259 #if ENABLE_FEATURE_MAKEDEVS_LEAF
    2260 #define makedevs_trivial_usage \
    2261        "NAME TYPE MAJOR MINOR FIRST LAST [s]"
    2262 #define makedevs_full_usage "\n\n" \
    2263        "Create a range of block or character special files" \
    2264      "\n" \
    2265      "\nTYPE is:" \
    2266      "\n    b   Block device" \
    2267      "\n    c   Character device" \
    2268      "\n    f   FIFO, MAJOR and MINOR are ignored" \
    2269      "\n" \
    2270      "\nFIRST..LAST specify numbers appended to NAME." \
    2271      "\nIf 's' is the last argument, the base device is created as well." \
    2272      "\n" \
    2273      "\nExamples:" \
    2274      "\n    makedevs /dev/ttyS c 4 66 2 63   ->  ttyS2-ttyS63" \
    2275      "\n    makedevs /dev/hda b 3 0 0 8 s    ->  hda,hda1-hda8"
    2276 #define makedevs_example_usage \
    2277        "# makedevs /dev/ttyS c 4 66 2 63\n" \
    2278        "[creates ttyS2-ttyS63]\n" \
    2279        "# makedevs /dev/hda b 3 0 0 8 s\n" \
    2280        "[creates hda,hda1-hda8]\n"
    2281 #endif
    2282 
    2283 #if ENABLE_FEATURE_MAKEDEVS_TABLE
    2284 #define makedevs_trivial_usage \
    2285        "[-d device_table] rootdir"
    2286 #define makedevs_full_usage "\n\n" \
    2287        "Create a range of special files as specified in a device table.\n" \
    2288        "Device table entries take the form of:\n" \
    2289        "<type> <mode> <uid> <gid> <major> <minor> <start> <inc> <count>\n" \
    2290        "Where name is the file name, type can be one of:\n" \
    2291        "    f   Regular file\n" \
    2292        "    d   Directory\n" \
    2293        "    c   Character device\n" \
    2294        "    b   Block device\n" \
    2295        "    p   Fifo (named pipe)\n" \
    2296        "uid is the user id for the target file, gid is the group id for the\n" \
    2297        "target file. The rest of the entries (major, minor, etc) apply to\n" \
    2298        "to device special files. A '-' may be used for blank entries."
    2299 #define makedevs_example_usage \
    2300        "For example:\n" \
    2301        "<name>    <type> <mode><uid><gid><major><minor><start><inc><count>\n" \
    2302        "/dev         d   755    0    0    -      -      -      -    -\n" \
    2303        "/dev/console c   666    0    0    5      1      -      -    -\n" \
    2304        "/dev/null    c   666    0    0    1      3      0      0    -\n" \
    2305        "/dev/zero    c   666    0    0    1      5      0      0    -\n" \
    2306        "/dev/hda     b   640    0    0    3      0      0      0    -\n" \
    2307        "/dev/hda     b   640    0    0    3      1      1      1    15\n\n" \
    2308        "Will Produce:\n" \
    2309        "/dev\n" \
    2310        "/dev/console\n" \
    2311        "/dev/null\n" \
    2312        "/dev/zero\n" \
    2313        "/dev/hda\n" \
    2314        "/dev/hda[0-15]\n"
    2315 #endif
    2316 
    2317 #define makemime_trivial_usage \
    2318        "[OPTIONS] [FILE]..."
    2319 #define makemime_full_usage "\n\n" \
    2320        "Create multipart MIME-encoded message from FILEs\n" \
    2321 /*     "Transfer encoding is base64, disposition is inline (not attachment)\n" */ \
    2322      "\nOptions:" \
    2323      "\n    -o FILE Output. Default: stdout" \
    2324      "\n    -a HDR  Add header. Examples:" \
    2325      "\n        \"From: user@host.org\", \"Date: `date -R`\"" \
    2326      "\n    -c CT   Content type. Default: text/plain" \
    2327      "\n    -C CS   Charset. Default: " CONFIG_FEATURE_MIME_CHARSET \
    2328 /*   "\n    -e ENC  Transfer encoding. Ignored. base64 is assumed" */ \
    2329      "\n" \
    2330      "\nOther options are silently ignored" \
    2331 
    2332 #define man_trivial_usage \
    2333        "[-aw] [MANPAGE]..."
    2334 #define man_full_usage "\n\n" \
    2335        "Format and display manual page\n" \
    2336      "\nOptions:" \
    2337      "\n    -a      Display all pages" \
    2338      "\n    -w  Show page locations" \
    2339 
    2340 #define matchpathcon_trivial_usage \
    2341        "[-n] [-N] [-f file_contexts_file] [-p prefix] [-V]"
    2342 #define matchpathcon_full_usage "\n\n" \
    2343        "    -n  Don't display path" \
    2344      "\n    -N  Don't use translations" \
    2345      "\n    -f  Use alternate file_context file" \
    2346      "\n    -p  Use prefix to speed translations" \
    2347      "\n    -V  Verify file context on disk matches defaults" \
    2348 
    2349 #define md5sum_trivial_usage \
    2350        "[FILE]..." \
    2351     IF_FEATURE_MD5_SHA1_SUM_CHECK("\n   or: md5sum -c [-sw] [FILE]")
    2352 #define md5sum_full_usage "\n\n" \
    2353        "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " MD5 checksums" \
    2354     IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n" \
    2355      "\nOptions:" \
    2356      "\n    -c  Check sums against given list" \
    2357      "\n    -s  Don't output anything, status code shows success" \
    2358      "\n    -w  Warn about improperly formatted checksum lines" \
    2359     )
    2360 
    2361 #define md5sum_example_usage \
    2362        "$ md5sum < busybox\n" \
    2363        "6fd11e98b98a58f64ff3398d7b324003\n" \
    2364        "$ md5sum busybox\n" \
    2365        "6fd11e98b98a58f64ff3398d7b324003  busybox\n" \
    2366        "$ md5sum -c -\n" \
    2367        "6fd11e98b98a58f64ff3398d7b324003  busybox\n" \
    2368        "busybox: OK\n" \
    2369        "^D\n"
    2370 
    2371 #define sha1sum_trivial_usage \
    2372        "[FILE]..." \
    2373     IF_FEATURE_MD5_SHA1_SUM_CHECK("\n   or: sha1sum -c [-sw] [FILE]")
    2374 #define sha1sum_full_usage "\n\n" \
    2375        "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA1 checksums" \
    2376     IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n" \
    2377      "\nOptions:" \
    2378      "\n    -c  Check sums against given list" \
    2379      "\n    -s  Don't output anything, status code shows success" \
    2380      "\n    -w  Warn about improperly formatted checksum lines" \
    2381     )
    2382 
    2383 #define sha256sum_trivial_usage \
    2384        "[FILE]..." \
    2385     IF_FEATURE_MD5_SHA1_SUM_CHECK("\n   or: sha256sum -c [-sw] [FILE]")
    2386 #define sha256sum_full_usage "\n\n" \
    2387        "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA256 checksums" \
    2388     IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n" \
    2389      "\nOptions:" \
    2390      "\n    -c  Check sums against given list" \
    2391      "\n    -s  Don't output anything, status code shows success" \
    2392      "\n    -w  Warn about improperly formatted checksum lines" \
    2393     )
    2394 
    2395 #define sha512sum_trivial_usage \
    2396        "[FILE]..." \
    2397     IF_FEATURE_MD5_SHA1_SUM_CHECK("\n   or: sha512sum -c [-sw] [FILE]")
    2398 #define sha512sum_full_usage "\n\n" \
    2399        "Print" IF_FEATURE_MD5_SHA1_SUM_CHECK(" or check") " SHA512 checksums" \
    2400     IF_FEATURE_MD5_SHA1_SUM_CHECK( "\n" \
    2401      "\nOptions:" \
    2402      "\n    -c  Check sums against given list" \
    2403      "\n    -s  Don't output anything, status code shows success" \
    2404      "\n    -w  Warn about improperly formatted checksum lines" \
    2405     )
    2406 
    2407 #define mdev_trivial_usage \
    2408        "[-s]"
    2409 #define mdev_full_usage "\n\n" \
    2410        "    -s  Scan /sys and populate /dev during system boot\n" \
    2411        "\n" \
    2412        "It can be run by kernel as a hotplug helper. To activate it:\n" \
    2413        " echo /sbin/mdev > /proc/sys/kernel/hotplug\n" \
    2414     IF_FEATURE_MDEV_CONF( \
    2415        "It uses /etc/mdev.conf with lines\n" \
    2416        "[-]DEVNAME UID:GID PERM" \
    2417             IF_FEATURE_MDEV_RENAME(" [>|=PATH]") \
    2418             IF_FEATURE_MDEV_EXEC(" [@|$|*PROG]") \
    2419     ) \
    2420 
    2421 #define mdev_notes_usage "" \
    2422     IF_FEATURE_MDEV_CONFIG( \
    2423        "The mdev config file contains lines that look like:\n" \
    2424        "  hd[a-z][0-9]* 0:3 660\n\n" \
    2425        "That's device name (with regex match), uid:gid, and permissions.\n\n" \
    2426     IF_FEATURE_MDEV_EXEC( \
    2427        "Optionally, that can be followed (on the same line) by a special character\n" \
    2428        "and a command line to run after creating/before deleting the corresponding\n" \
    2429        "device(s). The environment variable $MDEV indicates the active device node\n" \
    2430        "(which is useful if it's a regex match). For example:\n\n" \
    2431        "  hdc root:cdrom 660  *ln -s $MDEV cdrom\n\n" \
    2432        "The special characters are @ (run after creating), $ (run before deleting),\n" \
    2433        "and * (run both after creating and before deleting). The commands run in\n" \
    2434        "the /dev directory, and use system() which calls /bin/sh.\n\n" \
    2435     ) \
    2436        "Config file parsing stops on the first matching line. If no config\n" \
    2437        "entry is matched, devices are created with default 0:0 660. (Make\n" \
    2438        "the last line match .* to override this.)\n\n" \
    2439     )
    2440 
    2441 #define microcom_trivial_usage \
    2442        "[-d DELAY] [-t TIMEOUT] [-s SPEED] [-X] TTY"
    2443 #define microcom_full_usage "\n\n" \
    2444        "Copy bytes for stdin to TTY and from TTY to stdout\n" \
    2445      "\nOptions:" \
    2446      "\n    -d  Wait up to DELAY ms for TTY output before sending every" \
    2447      "\n        next byte to it" \
    2448      "\n    -t  Exit if both stdin and TTY are silent for TIMEOUT ms" \
    2449      "\n    -s  Set serial line to SPEED" \
    2450      "\n    -X  Disable special meaning of NUL and Ctrl-X from stdin" \
    2451 
    2452 #define mkdir_trivial_usage \
    2453        "[OPTIONS] DIRECTORY..."
    2454 #define mkdir_full_usage "\n\n" \
    2455        "Create DIRECTORY\n" \
    2456      "\nOptions:" \
    2457      "\n    -m MODE Mode" \
    2458      "\n    -p  No error if exists; make parent directories as needed" \
    2459     IF_SELINUX( \
    2460      "\n    -Z  Set security context" \
    2461     )
    2462 
    2463 #define mkdir_example_usage \
    2464        "$ mkdir /tmp/foo\n" \
    2465        "$ mkdir /tmp/foo\n" \
    2466        "/tmp/foo: File exists\n" \
    2467        "$ mkdir /tmp/foo/bar/baz\n" \
    2468        "/tmp/foo/bar/baz: No such file or directory\n" \
    2469        "$ mkdir -p /tmp/foo/bar/baz\n"
    2470 
    2471 #define mkfifo_trivial_usage \
    2472        "[-m MODE] " IF_SELINUX("[-Z] ") "NAME"
    2473 #define mkfifo_full_usage "\n\n" \
    2474        "Create named pipe\n" \
    2475      "\nOptions:" \
    2476      "\n    -m MODE Mode (default a=rw)" \
    2477     IF_SELINUX( \
    2478      "\n    -Z  Set security context" \
    2479     )
    2480 
    2481 #define mkfs_ext2_trivial_usage \
    2482        "[-Fn] " \
    2483        /* "[-c|-l filename] " */ \
    2484        "[-b BLK_SIZE] " \
    2485        /* "[-f fragment-size] [-g blocks-per-group] " */ \
    2486        "[-i INODE_RATIO] [-I INODE_SIZE] " \
    2487        /* "[-j] [-J journal-options] [-N number-of-inodes] " */ \
    2488        "[-m RESERVED_PERCENT] " \
    2489        /* "[-o creator-os] [-O feature[,...]] [-q] " */ \
    2490        /* "[r fs-revision-level] [-E extended-options] [-v] [-F] " */ \
    2491        "[-L LABEL] " \
    2492        /* "[-M last-mounted-directory] [-S] [-T filesystem-type] " */ \
    2493        "BLOCKDEV [KBYTES]"
    2494 #define mkfs_ext2_full_usage "\n\n" \
    2495        "    -b BLK_SIZE Block size, bytes" \
    2496 /*   "\n    -c      Check device for bad blocks" */ \
    2497 /*   "\n    -E opts     Set extended options" */ \
    2498 /*   "\n    -f size     Fragment size in bytes" */ \
    2499      "\n    -F      Force" \
    2500 /*   "\n    -g N        Number of blocks in a block group" */ \
    2501      "\n    -i RATIO    Max number of files is filesystem_size / RATIO" \
    2502      "\n    -I BYTES    Inode size (min 128)" \
    2503 /*   "\n    -j      Create a journal (ext3)" */ \
    2504 /*   "\n    -J opts     Set journal options (size/device)" */ \
    2505 /*   "\n    -l file     Read bad blocks list from file" */ \
    2506      "\n    -L LBL      Volume label" \
    2507      "\n    -m PERCENT  Percent of blocks to reserve for admin" \
    2508 /*   "\n    -M dir      Set last mounted directory" */ \
    2509      "\n    -n      Dry run" \
    2510 /*   "\n    -N N        Number of inodes to create" */ \
    2511 /*   "\n    -o os       Set the 'creator os' field" */ \
    2512 /*   "\n    -O features Dir_index/filetype/has_journal/journal_dev/sparse_super" */ \
    2513 /*   "\n    -q      Quiet" */ \
    2514 /*   "\n    -r rev      Set filesystem revision" */ \
    2515 /*   "\n    -S      Write superblock and group descriptors only" */ \
    2516 /*   "\n    -T fs-type  Set usage type (news/largefile/largefile4)" */ \
    2517 /*   "\n    -v      Verbose" */ \
    2518 
    2519 #define mkfs_minix_trivial_usage \
    2520        "[-c | -l FILE] [-nXX] [-iXX] BLOCKDEV [KBYTES]"
    2521 #define mkfs_minix_full_usage "\n\n" \
    2522        "Make a MINIX filesystem\n" \
    2523      "\nOptions:" \
    2524      "\n    -c      Check device for bad blocks" \
    2525      "\n    -n [14|30]  Maximum length of filenames" \
    2526      "\n    -i INODES   Number of inodes for the filesystem" \
    2527      "\n    -l FILE     Read bad blocks list from FILE" \
    2528      "\n    -v      Make version 2 filesystem" \
    2529 
    2530 #define mkfs_reiser_trivial_usage \
    2531        "[-f] [-l LABEL] BLOCKDEV [4K-BLOCKS]"
    2532 
    2533 #define mkfs_reiser_full_usage "\n\n" \
    2534        "Make a ReiserFS V3 filesystem\n" \
    2535      "\nOptions:" \
    2536      "\n    -f  Force" \
    2537      "\n    -l LBL  Volume label" \
    2538 
    2539 #define mkfs_vfat_trivial_usage \
    2540        "[-v] [-n LABEL] BLOCKDEV [KBYTES]"
    2541 /* Accepted but ignored:
    2542        "[-c] [-C] [-I] [-l bad-block-file] [-b backup-boot-sector] "
    2543        "[-m boot-msg-file] [-i volume-id] "
    2544        "[-s sectors-per-cluster] [-S logical-sector-size] [-f number-of-FATs] "
    2545        "[-h hidden-sectors] [-F fat-size] [-r root-dir-entries] [-R reserved-sectors] "
    2546 */
    2547 #define mkfs_vfat_full_usage "\n\n" \
    2548        "Make a FAT32 filesystem\n" \
    2549      "\nOptions:" \
    2550 /*   "\n    -c  Check device for bad blocks" */ \
    2551      "\n    -v  Verbose" \
    2552 /*   "\n    -I  Allow to use entire disk device (e.g. /dev/hda)" */ \
    2553      "\n    -n LBL  Volume label" \
    2554 
    2555 #define mknod_trivial_usage \
    2556        "[-m MODE] " IF_SELINUX("[-Z] ") "NAME TYPE MAJOR MINOR"
    2557 #define mknod_full_usage "\n\n" \
    2558        "Create a special file (block, character, or pipe)\n" \
    2559      "\nOptions:" \
    2560      "\n    -m MODE Creation mode (default a=rw)" \
    2561     IF_SELINUX( \
    2562      "\n    -Z  Set security context" \
    2563     ) \
    2564      "\nTYPE:" \
    2565      "\n    b   Block device" \
    2566      "\n    c or u  Character device" \
    2567      "\n    p   Named pipe (MAJOR and MINOR are ignored)" \
    2568 
    2569 #define mknod_example_usage \
    2570        "$ mknod /dev/fd0 b 2 0\n" \
    2571        "$ mknod -m 644 /tmp/pipe p\n"
    2572 
    2573 #define mkswap_trivial_usage \
    2574        "[-L LBL] BLOCKDEV [KBYTES]"
    2575 #define mkswap_full_usage "\n\n" \
    2576        "Prepare BLOCKDEV to be used as swap partition\n" \
    2577      "\nOptions:" \
    2578      "\n    -L LBL  Label" \
    2579 
    2580 #define mktemp_trivial_usage \
    2581        "[-dt] [-p DIR] [TEMPLATE]"
    2582 #define mktemp_full_usage "\n\n" \
    2583        "Create a temporary file with name based on TEMPLATE and print its name.\n" \
    2584        "TEMPLATE must end with XXXXXX (e.g. [/dir/]nameXXXXXX).\n" \
    2585      "\nOptions:" \
    2586      "\n    -d  Make a directory instead of a file" \
    2587 /*   "\n    -q  Fail silently if an error occurs" - we ignore it */ \
    2588      "\n    -t  Generate a path rooted in temporary directory" \
    2589      "\n    -p DIR  Use DIR as a temporary directory (implies -t)" \
    2590      "\n" \
    2591      "\nFor -t or -p, directory is chosen as follows:" \
    2592      "\n$TMPDIR if set, else -p DIR, else /tmp" \
    2593 
    2594 #define mktemp_example_usage \
    2595        "$ mktemp /tmp/temp.XXXXXX\n" \
    2596        "/tmp/temp.mWiLjM\n" \
    2597        "$ ls -la /tmp/temp.mWiLjM\n" \
    2598        "-rw-------    1 andersen andersen        0 Apr 25 17:10 /tmp/temp.mWiLjM\n"
    2599 
    2600 #define more_trivial_usage \
    2601        "[FILE]..."
    2602 #define more_full_usage "\n\n" \
    2603        "View FILE (or stdin) one screenful at a time"
    2604 
    2605 #define more_example_usage \
    2606        "$ dmesg | more\n"
    2607 
    2608 #define mount_trivial_usage \
    2609        "[OPTIONS] [-o OPTS] DEVICE NODE"
    2610 #define mount_full_usage "\n\n" \
    2611        "Mount a filesystem. Filesystem autodetection requires /proc.\n" \
    2612      "\nOptions:" \
    2613      "\n    -a      Mount all filesystems in fstab" \
    2614     IF_FEATURE_MOUNT_FAKE( \
    2615     IF_FEATURE_MTAB_SUPPORT( \
    2616      "\n    -f      Update /etc/mtab, but don't mount" \
    2617     ) \
    2618     IF_NOT_FEATURE_MTAB_SUPPORT( \
    2619      "\n    -f      Dry run" \
    2620     ) \
    2621     ) \
    2622     IF_FEATURE_MOUNT_HELPERS( \
    2623      "\n    -i      Don't run mount helper" \
    2624     ) \
    2625     IF_FEATURE_MTAB_SUPPORT( \
    2626      "\n    -n      Don't update /etc/mtab" \
    2627     ) \
    2628      "\n    -r      Read-only mount" \
    2629      "\n    -w      Read-write mount (default)" \
    2630      "\n    -t FSTYPE   Filesystem type" \
    2631      "\n    -O OPT      Mount only filesystems with option OPT (-a only)" \
    2632      "\n-o OPT:" \
    2633     IF_FEATURE_MOUNT_LOOP( \
    2634      "\n    loop        Ignored (loop devices are autodetected)" \
    2635     ) \
    2636     IF_FEATURE_MOUNT_FLAGS( \
    2637      "\n    [a]sync     Writes are [a]synchronous" \
    2638      "\n    [no]atime   Disable/enable updates to inode access times" \
    2639      "\n    [no]diratime    Disable/enable atime updates to directories" \
    2640      "\n    [no]relatime    Disable/enable atime updates relative to modification time" \
    2641      "\n    [no]dev     (Dis)allow use of special device files" \
    2642      "\n    [no]exec    (Dis)allow use of executable files" \
    2643      "\n    [no]suid    (Dis)allow set-user-id-root programs" \
    2644      "\n    [r]shared   Convert [recursively] to a shared subtree" \
    2645      "\n    [r]slave    Convert [recursively] to a slave subtree" \
    2646      "\n    [r]private  Convert [recursively] to a private subtree" \
    2647      "\n    [un]bindable    Make mount point [un]able to be bind mounted" \
    2648      "\n    bind        Bind a file or directory to another location" \
    2649      "\n    move        Relocate an existing mount point" \
    2650     ) \
    2651      "\n    remount     Remount a mounted filesystem, changing flags" \
    2652      "\n    ro/rw       Same as -r/-w" \
    2653      "\n" \
    2654      "\nThere are filesystem-specific -o flags." \
    2655 
    2656 #define mount_example_usage \
    2657        "$ mount\n" \
    2658        "/dev/hda3 on / type minix (rw)\n" \
    2659        "proc on /proc type proc (rw)\n" \
    2660        "devpts on /dev/pts type devpts (rw)\n" \
    2661        "$ mount /dev/fd0 /mnt -t msdos -o ro\n" \
    2662        "$ mount /tmp/diskimage /opt -t ext2 -o loop\n" \
    2663        "$ mount cd_image.iso mydir\n"
    2664 #define mount_notes_usage \
    2665        "Returns 0 for success, number of failed mounts for -a, or errno for one mount."
    2666 
    2667 #define mountpoint_trivial_usage \
    2668        "[-q] <[-dn] DIR | -x DEVICE>"
    2669 #define mountpoint_full_usage "\n\n" \
    2670        "Check if the directory is a mountpoint\n" \
    2671      "\nOptions:" \
    2672      "\n    -q  Quiet" \
    2673      "\n    -d  Print major/minor device number of the filesystem" \
    2674      "\n    -n  Print device name of the filesystem" \
    2675      "\n    -x  Print major/minor device number of the blockdevice" \
    2676 
    2677 #define mountpoint_example_usage \
    2678        "$ mountpoint /proc\n" \
    2679        "/proc is not a mountpoint\n" \
    2680        "$ mountpoint /sys\n" \
    2681        "/sys is a mountpoint\n"
    2682 
    2683 #define mt_trivial_usage \
    2684        "[-f device] opcode value"
    2685 #define mt_full_usage "\n\n" \
    2686        "Control magnetic tape drive operation\n" \
    2687        "\n" \
    2688        "Available Opcodes:\n" \
    2689        "\n" \
    2690        "bsf bsfm bsr bss datacompression drvbuffer eof eom erase\n" \
    2691        "fsf fsfm fsr fss load lock mkpart nop offline ras1 ras2\n" \
    2692        "ras3 reset retension rewind rewoffline seek setblk setdensity\n" \
    2693        "setpart tell unload unlock weof wset" \
    2694 
    2695 #define nameif_trivial_usage \
    2696        "[-s] [-c FILE] [{IFNAME MACADDR}]"
    2697 #define nameif_full_usage "\n\n" \
    2698        "Rename network interface while it in the down state\n" \
    2699      "\nOptions:" \
    2700      "\n    -c FILE     Use configuration file (default: /etc/mactab)" \
    2701      "\n    -s      Use syslog (LOCAL0 facility)" \
    2702      "\n    IFNAME MACADDR  new_interface_name interface_mac_address" \
    2703 
    2704 #define nameif_example_usage \
    2705        "$ nameif -s dmz0 00:A0:C9:8C:F6:3F\n" \
    2706        " or\n" \
    2707        "$ nameif -c /etc/my_mactab_file\n" \
    2708 
    2709 #define nmeter_trivial_usage \
    2710        "format_string"
    2711 #define nmeter_full_usage "\n\n" \
    2712        "Monitor system in real time\n\n" \
    2713        "Format specifiers:\n" \
    2714        " %Nc or %[cN]   Monitor CPU. N - bar size, default 10\n" \
    2715        "        (displays: S:system U:user N:niced D:iowait I:irq i:softirq)\n" \
    2716        " %[niface]  Monitor network interface 'iface'\n" \
    2717        " %m     Monitor allocated memory\n" \
    2718        " %[mf]      Monitor free memory\n" \
    2719        " %[mt]      Monitor total memory\n" \
    2720        " %s     Monitor allocated swap\n" \
    2721        " %f     Monitor number of used file descriptors\n" \
    2722        " %Ni        Monitor total/specific IRQ rate\n" \
    2723        " %x     Monitor context switch rate\n" \
    2724        " %p     Monitor forks\n" \
    2725        " %[pn]      Monitor # of processes\n" \
    2726        " %b     Monitor block io\n" \
    2727        " %Nt        Show time (with N decimal points)\n" \
    2728        " %Nd        Milliseconds between updates (default:1000)\n" \
    2729        " %r     Print <cr> instead of <lf> at EOL" \
    2730 
    2731 #define nmeter_example_usage \
    2732        "nmeter '%250d%t %20c int %i bio %b mem %m forks%p'"
    2733 
    2734 #define nohup_trivial_usage \
    2735        "PROG ARGS"
    2736 #define nohup_full_usage "\n\n" \
    2737        "Run PROG immune to hangups, with output to a non-tty"
    2738 #define nohup_example_usage \
    2739        "$ nohup make &"
    2740 
    2741 #define nslookup_trivial_usage \
    2742        "[HOST] [SERVER]"
    2743 #define nslookup_full_usage "\n\n" \
    2744        "Query the nameserver for the IP address of the given HOST\n" \
    2745        "optionally using a specified DNS server"
    2746 #define nslookup_example_usage \
    2747        "$ nslookup localhost\n" \
    2748        "Server:     default\n" \
    2749        "Address:    default\n" \
    2750        "\n" \
    2751        "Name:       debian\n" \
    2752        "Address:    127.0.0.1\n"
    2753 
    2754 #define ntpd_trivial_usage \
    2755     "[-dnqNw"IF_FEATURE_NTPD_SERVER("l")"] [-S PROG] [-p PEER]..."
    2756 #define ntpd_full_usage "\n\n" \
    2757        "NTP client/server\n" \
    2758      "\nOptions:" \
    2759      "\n    -d  Verbose" \
    2760      "\n    -n  Do not daemonize" \
    2761      "\n    -q  Quit after clock is set" \
    2762      "\n    -N  Run at high priority" \
    2763      "\n    -w  Do not set time (only query peers), implies -n" \
    2764     IF_FEATURE_NTPD_SERVER( \
    2765      "\n    -l  Run as server on port 123" \
    2766     ) \
    2767      "\n    -S PROG Run PROG after stepping time, stratum change, and every 11 mins" \
    2768      "\n    -p PEER Obtain time from PEER (may be repeated)" \
    2769 
    2770 #define od_trivial_usage \
    2771        "[-aBbcDdeFfHhIiLlOovXx] " IF_DESKTOP("[-t TYPE] ") "[FILE]"
    2772 #define od_full_usage "\n\n" \
    2773        "Write an unambiguous representation, octal bytes by default, of FILE\n" \
    2774        "(or stdin) to stdout"
    2775 
    2776 #define openvt_trivial_usage \
    2777        "[-c N] [-sw] [PROG ARGS]"
    2778 #define openvt_full_usage "\n\n" \
    2779        "Start PROG on a new virtual terminal\n" \
    2780      "\nOptions:" \
    2781      "\n    -c N    Use specified VT" \
    2782      "\n    -s  Switch to the VT" \
    2783 /*   "\n    -l  Run PROG as login shell (by prepending '-')" */ \
    2784      "\n    -w  Wait for PROG to exit" \
    2785 
    2786 #define openvt_example_usage \
    2787        "openvt 2 /bin/ash\n"
    2788 
    2789 /*
    2790 #define parse_trivial_usage \
    2791        "[-n MAXTOKENS] [-m MINTOKENS] [-d DELIMS] [-f FLAGS] FILE..."
    2792 #define parse_full_usage ""
    2793 */
    2794 
    2795 #define passwd_trivial_usage \
    2796        "[OPTIONS] [USER]"
    2797 #define passwd_full_usage "\n\n" \
    2798        "Change USER's password. If no USER is specified,\n" \
    2799        "changes the password for the current user.\n" \
    2800      "\nOptions:" \
    2801      "\n    -a ALG  Algorithm to use for password (des, md5)" /* ", sha1)" */ \
    2802      "\n    -d  Delete password for the account" \
    2803      "\n    -l  Lock (disable) account" \
    2804      "\n    -u  Unlock (re-enable) account" \
    2805 
    2806 #define chpasswd_trivial_usage \
    2807     IF_LONG_OPTS("[--md5|--encrypted]") IF_NOT_LONG_OPTS("[-m|-e]")
    2808 #define chpasswd_full_usage "\n\n" \
    2809        "Read user:password from stdin and update /etc/passwd\n" \
    2810      "\nOptions:" \
    2811     IF_LONG_OPTS( \
    2812      "\n    -e,--encrypted  Supplied passwords are in encrypted form" \
    2813      "\n    -m,--md5    Use MD5 encryption instead of DES" \
    2814     ) \
    2815     IF_NOT_LONG_OPTS( \
    2816      "\n    -e  Supplied passwords are in encrypted form" \
    2817      "\n    -m  Use MD5 encryption instead of DES" \
    2818     )
    2819 
    2820 #define pgrep_trivial_usage \
    2821        "[-flnovx] [-s SID|-P PPID|PATTERN]"
    2822 #define pgrep_full_usage "\n\n" \
    2823        "Display process(es) selected by regex PATTERN\n" \
    2824      "\nOptions:" \
    2825      "\n    -l  Show command name too" \
    2826      "\n    -f  Match against entire command line" \
    2827      "\n    -n  Show the newest process only" \
    2828      "\n    -o  Show the oldest process only" \
    2829      "\n    -v  Negate the match" \
    2830      "\n    -x  Match whole name (not substring)" \
    2831      "\n    -s  Match session ID (0 for current)" \
    2832      "\n    -P  Match parent process ID" \
    2833 
    2834 #if (ENABLE_FEATURE_PIDOF_SINGLE || ENABLE_FEATURE_PIDOF_OMIT)
    2835 #define pidof_trivial_usage \
    2836        "[OPTIONS] [NAME]..."
    2837 #define USAGE_PIDOF "\n\nOptions:"
    2838 #else
    2839 #define pidof_trivial_usage \
    2840        "[NAME]..."
    2841 #define USAGE_PIDOF /* none */
    2842 #endif
    2843 #define pidof_full_usage "\n\n" \
    2844        "List PIDs of all processes with names that match NAMEs" \
    2845     USAGE_PIDOF \
    2846     IF_FEATURE_PIDOF_SINGLE( \
    2847      "\n    -s  Show only one PID" \
    2848     ) \
    2849     IF_FEATURE_PIDOF_OMIT( \
    2850      "\n    -o PID  Omit given pid" \
    2851      "\n        Use %PPID to omit pid of pidof's parent" \
    2852     ) \
    2853 
    2854 #define pidof_example_usage \
    2855        "$ pidof init\n" \
    2856        "1\n" \
    2857     IF_FEATURE_PIDOF_OMIT( \
    2858        "$ pidof /bin/sh\n20351 5973 5950\n") \
    2859     IF_FEATURE_PIDOF_OMIT( \
    2860        "$ pidof /bin/sh -o %PPID\n20351 5950")
    2861 
    2862 #if !ENABLE_FEATURE_FANCY_PING
    2863 #define ping_trivial_usage \
    2864        "host"
    2865 #define ping_full_usage "\n\n" \
    2866        "Send ICMP ECHO_REQUEST packets to network hosts"
    2867 #define ping6_trivial_usage \
    2868        "host"
    2869 #define ping6_full_usage "\n\n" \
    2870        "Send ICMP ECHO_REQUEST packets to network hosts"
    2871 #else
    2872 #define ping_trivial_usage \
    2873        "[OPTIONS] HOST"
    2874 #define ping_full_usage "\n\n" \
    2875        "Send ICMP ECHO_REQUEST packets to network hosts\n" \
    2876      "\nOptions:" \
    2877      "\n    -4,-6       Force IP or IPv6 name resolution" \
    2878      "\n    -c CNT      Send only CNT pings" \
    2879      "\n    -s SIZE     Send SIZE data bytes in packets (default:56)" \
    2880      "\n    -I IFACE/IP Use interface or IP address as source" \
    2881      "\n    -W SEC      Seconds to wait for the first response (default:10)" \
    2882      "\n            (after all -c CNT packets are sent)" \
    2883      "\n    -w SEC      Seconds until ping exits (default:infinite)" \
    2884      "\n            (can exit earlier with -c CNT)" \
    2885      "\n    -q      Quiet, only displays output at start" \
    2886      "\n            and when finished" \
    2887 
    2888 #define ping6_trivial_usage \
    2889        "[OPTIONS] HOST"
    2890 #define ping6_full_usage "\n\n" \
    2891        "Send ICMP ECHO_REQUEST packets to network hosts\n" \
    2892      "\nOptions:" \
    2893      "\n    -c CNT      Send only CNT pings" \
    2894      "\n    -s SIZE     Send SIZE data bytes in packets (default:56)" \
    2895      "\n    -I IFACE/IP Use interface or IP address as source" \
    2896      "\n    -q      Quiet, only displays output at start" \
    2897      "\n            and when finished" \
    2898 
    2899 #endif
    2900 #define ping_example_usage \
    2901        "$ ping localhost\n" \
    2902        "PING slag (127.0.0.1): 56 data bytes\n" \
    2903        "64 bytes from 127.0.0.1: icmp_seq=0 ttl=255 time=20.1 ms\n" \
    2904        "\n" \
    2905        "--- debian ping statistics ---\n" \
    2906        "1 packets transmitted, 1 packets received, 0% packet loss\n" \
    2907        "round-trip min/avg/max = 20.1/20.1/20.1 ms\n"
    2908 #define ping6_example_usage \
    2909        "$ ping6 ip6-localhost\n" \
    2910        "PING ip6-localhost (::1): 56 data bytes\n" \
    2911        "64 bytes from ::1: icmp6_seq=0 ttl=64 time=20.1 ms\n" \
    2912        "\n" \
    2913        "--- ip6-localhost ping statistics ---\n" \
    2914        "1 packets transmitted, 1 packets received, 0% packet loss\n" \
    2915        "round-trip min/avg/max = 20.1/20.1/20.1 ms\n"
    2916 
    2917 #define pipe_progress_trivial_usage NOUSAGE_STR
    2918 #define pipe_progress_full_usage ""
    2919 
    2920 #define pivot_root_trivial_usage \
    2921        "NEW_ROOT PUT_OLD"
    2922 #define pivot_root_full_usage "\n\n" \
    2923        "Move the current root file system to PUT_OLD and make NEW_ROOT\n" \
    2924        "the new root file system"
    2925 
    2926 #define pkill_trivial_usage \
    2927        "[-l|-SIGNAL] [-fnovx] [-s SID|-P PPID|PATTERN]"
    2928 #define pkill_full_usage "\n\n" \
    2929        "Send a signal to process(es) selected by regex PATTERN\n" \
    2930      "\nOptions:" \
    2931      "\n    -l  List all signals" \
    2932      "\n    -f  Match against entire command line" \
    2933      "\n    -n  Signal the newest process only" \
    2934      "\n    -o  Signal the oldest process only" \
    2935      "\n    -v  Negate the match" \
    2936      "\n    -x  Match whole name (not substring)" \
    2937      "\n    -s  Match session ID (0 for current)" \
    2938      "\n    -P  Match parent process ID" \
    2939 
    2940 #define popmaildir_trivial_usage \
    2941        "[OPTIONS] MAILDIR [CONN_HELPER ARGS]"
    2942 #define popmaildir_full_usage "\n\n" \
    2943        "Fetch content of remote mailbox to local maildir\n" \
    2944      "\nOptions:" \
    2945 /*   "\n    -b      Binary mode. Ignored" */ \
    2946 /*   "\n    -d      Debug. Ignored" */ \
    2947 /*   "\n    -m      Show used memory. Ignored" */ \
    2948 /*   "\n    -V      Show version. Ignored" */ \
    2949 /*   "\n    -c      Use tcpclient. Ignored" */ \
    2950 /*   "\n    -a      Use APOP protocol. Implied. If server supports APOP -> use it" */ \
    2951      "\n    -s      Skip authorization" \
    2952      "\n    -T      Get messages with TOP instead of RETR" \
    2953      "\n    -k      Keep retrieved messages on the server" \
    2954      "\n    -t SEC      Network timeout" \
    2955     IF_FEATURE_POPMAILDIR_DELIVERY( \
    2956      "\n    -F \"PROG ARGS\"    Filter program (may be repeated)" \
    2957      "\n    -M \"PROG ARGS\"    Delivery program" \
    2958     ) \
    2959      "\n" \
    2960      "\nFetch from plain POP3 server:" \
    2961      "\npopmaildir -k DIR nc pop3.server.com 110 <user_and_pass.txt" \
    2962      "\nFetch from SSLed POP3 server and delete fetched emails:" \
    2963      "\npopmaildir DIR -- openssl s_client -quiet -connect pop3.server.com:995 <user_and_pass.txt"
    2964 /*   "\n    -R BYTES    Remove old messages on the server >= BYTES. Ignored" */
    2965 /*   "\n    -Z N1-N2    Remove messages from N1 to N2 (dangerous). Ignored" */
    2966 /*   "\n    -L BYTES    Don't retrieve new messages >= BYTES. Ignored" */
    2967 /*   "\n    -H LINES    Type first LINES of a message. Ignored" */
    2968 #define popmaildir_example_usage \
    2969        "$ popmaildir -k ~/Maildir -- nc pop.drvv.ru 110 [<password_file]\n" \
    2970        "$ popmaildir ~/Maildir -- openssl s_client -quiet -connect pop.gmail.com:995 [<password_file]\n"
    2971 
    2972 #define printenv_trivial_usage \
    2973        "[VARIABLE]..."
    2974 #define printenv_full_usage "\n\n" \
    2975        "Print environment VARIABLEs.\n" \
    2976        "If no VARIABLE specified, print all."
    2977 
    2978 #define printf_trivial_usage \
    2979        "FORMAT [ARGUMENT]..."
    2980 #define printf_full_usage "\n\n" \
    2981        "Format and print ARGUMENT(s) according to FORMAT,\n" \
    2982        "where FORMAT controls the output exactly as in C printf"
    2983 #define printf_example_usage \
    2984        "$ printf \"Val=%d\\n\" 5\n" \
    2985        "Val=5\n"
    2986 
    2987 
    2988 #if ENABLE_DESKTOP
    2989 
    2990 #define ps_trivial_usage \
    2991        "[-o COL1,COL2=HEADER]" IF_FEATURE_SHOW_THREADS(" [-T]")
    2992 #define ps_full_usage "\n\n" \
    2993        "Show list of processes\n" \
    2994      "\nOptions:" \
    2995      "\n    -o COL1,COL2=HEADER Select columns for display" \
    2996     IF_FEATURE_SHOW_THREADS( \
    2997      "\n    -T          Show threads" \
    2998     )
    2999 
    3000 #else /* !ENABLE_DESKTOP */
    3001 
    3002 #if !ENABLE_SELINUX && !ENABLE_FEATURE_PS_WIDE
    3003 #define USAGE_PS "\nThis version of ps accepts no options"
    3004 #else
    3005 #define USAGE_PS "\nOptions:"
    3006 #endif
    3007 
    3008 #define ps_trivial_usage \
    3009        ""
    3010 #define ps_full_usage "\n\n" \
    3011        "Show list of processes\n" \
    3012     USAGE_PS \
    3013     IF_SELINUX( \
    3014      "\n    -Z  Show selinux context" \
    3015     ) \
    3016     IF_FEATURE_PS_WIDE( \
    3017      "\n    w   Wide output" \
    3018     )
    3019 
    3020 #endif /* ENABLE_DESKTOP */
    3021 
    3022 #define ps_example_usage \
    3023        "$ ps\n" \
    3024        "  PID  Uid      Gid State Command\n" \
    3025        "    1 root     root     S init\n" \
    3026        "    2 root     root     S [kflushd]\n" \
    3027        "    3 root     root     S [kupdate]\n" \
    3028        "    4 root     root     S [kpiod]\n" \
    3029        "    5 root     root     S [kswapd]\n" \
    3030        "  742 andersen andersen S [bash]\n" \
    3031        "  743 andersen andersen S -bash\n" \
    3032        "  745 root     root     S [getty]\n" \
    3033        " 2990 andersen andersen R ps\n" \
    3034 
    3035 #define pscan_trivial_usage \
    3036        "[-cb] [-p MIN_PORT] [-P MAX_PORT] [-t TIMEOUT] [-T MIN_RTT] HOST"
    3037 #define pscan_full_usage "\n\n" \
    3038        "Scan a host, print all open ports\n" \
    3039      "\nOptions:" \
    3040      "\n    -c  Show closed ports too" \
    3041      "\n    -b  Show blocked ports too" \
    3042      "\n    -p  Scan from this port (default 1)" \
    3043      "\n    -P  Scan up to this port (default 1024)" \
    3044      "\n    -t  Timeout (default 5000 ms)" \
    3045      "\n    -T  Minimum rtt (default 5 ms, increase for congested hosts)" \
    3046 
    3047 #define pwd_trivial_usage \
    3048        ""
    3049 #define pwd_full_usage "\n\n" \
    3050        "Print the full filename of the current working directory"
    3051 #define pwd_example_usage \
    3052        "$ pwd\n" \
    3053        "/root\n"
    3054 
    3055 #define raidautorun_trivial_usage \
    3056        "DEVICE"
    3057 #define raidautorun_full_usage "\n\n" \
    3058        "Tell the kernel to automatically search and start RAID arrays"
    3059 #define raidautorun_example_usage \
    3060        "$ raidautorun /dev/md0"
    3061 
    3062 #define rdate_trivial_usage \
    3063        "[-sp] HOST"
    3064 #define rdate_full_usage "\n\n" \
    3065        "Get and possibly set the system date and time from a remote HOST\n" \
    3066      "\nOptions:" \
    3067      "\n    -s  Set the system date and time (default)" \
    3068      "\n    -p  Print the date and time" \
    3069 
    3070 #define rdev_trivial_usage \
    3071        ""
    3072 #define rdev_full_usage "\n\n" \
    3073        "Print the device node associated with the filesystem mounted at '/'"
    3074 #define rdev_example_usage \
    3075        "$ rdev\n" \
    3076        "/dev/mtdblock9 /\n"
    3077 
    3078 #define readahead_trivial_usage \
    3079        "[FILE]..."
    3080 #define readahead_full_usage "\n\n" \
    3081        "Preload FILEs to RAM"
    3082 
    3083 #define readlink_trivial_usage \
    3084     IF_FEATURE_READLINK_FOLLOW("[-fnv] ") "FILE"
    3085 #define readlink_full_usage "\n\n" \
    3086        "Display the value of a symlink" \
    3087     IF_FEATURE_READLINK_FOLLOW( "\n" \
    3088      "\nOptions:" \
    3089      "\n    -f  Canonicalize by following all symlinks" \
    3090      "\n    -n  Don't add newline" \
    3091      "\n    -v  Verbose" \
    3092     ) \
    3093 
    3094 #define readprofile_trivial_usage \
    3095        "[OPTIONS]"
    3096 #define readprofile_full_usage "\n\n" \
    3097        "Options:" \
    3098      "\n    -m mapfile  (Default: /boot/System.map)" \
    3099      "\n    -p profile  (Default: /proc/profile)" \
    3100      "\n    -M NUM      Set the profiling multiplier to NUM" \
    3101      "\n    -i      Print only info about the sampling step" \
    3102      "\n    -v      Verbose" \
    3103      "\n    -a      Print all symbols, even if count is 0" \
    3104      "\n    -b      Print individual histogram-bin counts" \
    3105      "\n    -s      Print individual counters within functions" \
    3106      "\n    -r      Reset all the counters (root only)" \
    3107      "\n    -n      Disable byte order auto-detection" \
    3108 
    3109 #define realpath_trivial_usage \
    3110        "FILE..."
    3111 #define realpath_full_usage "\n\n" \
    3112        "Return the absolute pathnames of given FILE"
    3113 
    3114 #define reformime_trivial_usage \
    3115        "[OPTIONS] [FILE]..."
    3116 #define reformime_full_usage "\n\n" \
    3117        "Parse MIME-encoded message\n" \
    3118      "\nOptions:" \
    3119      "\n    -x PREFIX   Extract content of MIME sections to files" \
    3120      "\n    -X PROG ARGS    Filter content of MIME sections through PROG" \
    3121      "\n            Must be the last option" \
    3122      "\n" \
    3123      "\nOther options are silently ignored" \
    3124 
    3125 #define scriptreplay_trivial_usage \
    3126        "timingfile [typescript [divisor]]"
    3127 #define scriptreplay_full_usage "\n\n" \
    3128        "Play back typescripts, using timing information"
    3129 
    3130 #define reset_trivial_usage \
    3131        ""
    3132 #define reset_full_usage "\n\n" \
    3133        "Reset the screen"
    3134 
    3135 #define resize_trivial_usage \
    3136        ""
    3137 #define resize_full_usage "\n\n" \
    3138        "Resize the screen"
    3139 
    3140 #define restorecon_trivial_usage \
    3141        "[-iFnRv] [-e EXCLUDEDIR]... [-o FILE] [-f FILE]"
    3142 #define restorecon_full_usage "\n\n" \
    3143        "Reset security contexts of files in pathname\n" \
    3144      "\n    -i  Ignore files that don't exist" \
    3145      "\n    -f FILE File with list of files to process" \
    3146      "\n    -e DIR  Directory to exclude" \
    3147      "\n    -R,-r   Recurse" \
    3148      "\n    -n  Don't change any file labels" \
    3149      "\n    -o FILE Save list of files with incorrect context" \
    3150      "\n    -v  Verbose" \
    3151      "\n    -vv Show changed labels" \
    3152      "\n    -F  Force reset of context to match file_context" \
    3153      "\n        for customizable files, or the user section," \
    3154      "\n        if it has changed" \
    3155 
    3156 #define rfkill_trivial_usage \
    3157        "COMMAND [INDEX|TYPE]"
    3158 #define rfkill_full_usage "\n\n" \
    3159        "Enable/disable wireless devices\n" \
    3160        "\nCommands:" \
    3161      "\n    list [INDEX|TYPE]   List current state" \
    3162      "\n    block INDEX|TYPE    Disable device" \
    3163      "\n    unblock INDEX|TYPE  Enable device" \
    3164      "\n" \
    3165      "\n    TYPE: all, wlan(wifi), bluetooth, uwb(ultrawideband)," \
    3166      "\n        wimax, wwan, gps, fm" \
    3167 
    3168 #define rm_trivial_usage \
    3169        "[-irf] FILE..."
    3170 #define rm_full_usage "\n\n" \
    3171        "Remove (unlink) FILEs\n" \
    3172      "\nOptions:" \
    3173      "\n    -i  Always prompt before removing" \
    3174      "\n    -f  Never prompt" \
    3175      "\n    -R,-r   Recurse" \
    3176 
    3177 #define rm_example_usage \
    3178        "$ rm -rf /tmp/foo\n"
    3179 
    3180 #define rmdir_trivial_usage \
    3181        "[OPTIONS] DIRECTORY..."
    3182 #define rmdir_full_usage "\n\n" \
    3183        "Remove DIRECTORY if it is empty\n" \
    3184      "\nOptions:" \
    3185     IF_FEATURE_RMDIR_LONG_OPTIONS( \
    3186      "\n    -p|--parents    Include parents" \
    3187      "\n    --ignore-fail-on-non-empty" \
    3188     ) \
    3189     IF_NOT_FEATURE_RMDIR_LONG_OPTIONS( \
    3190      "\n    -p  Include parents" \
    3191     )
    3192 
    3193 #define rmdir_example_usage \
    3194        "# rmdir /tmp/foo\n"
    3195 
    3196 #define route_trivial_usage \
    3197        "[{add|del|delete}]"
    3198 #define route_full_usage "\n\n" \
    3199        "Edit kernel routing tables\n" \
    3200      "\nOptions:" \
    3201      "\n    -n  Don't resolve names" \
    3202      "\n    -e  Display other/more information" \
    3203      "\n    -A inet" IF_FEATURE_IPV6("{6}") "   Select address family" \
    3204 
    3205 #define rpm_trivial_usage \
    3206        "-i PACKAGE.rpm; rpm -qp[ildc] PACKAGE.rpm"
    3207 #define rpm_full_usage "\n\n" \
    3208        "Manipulate RPM packages\n" \
    3209      "\nCommands:" \
    3210      "\n    -i  Install package" \
    3211      "\n    -qp Query package" \
    3212      "\nOptions:" \
    3213      "\n    -i  Show information" \
    3214      "\n    -l  List contents" \
    3215      "\n    -d  List documents" \
    3216      "\n    -c  List config files" \
    3217 
    3218 #define rpm2cpio_trivial_usage \
    3219        "package.rpm"
    3220 #define rpm2cpio_full_usage "\n\n" \
    3221        "Output a cpio archive of the rpm file"
    3222 
    3223 #define rtcwake_trivial_usage \
    3224        "[-a | -l | -u] [-d DEV] [-m MODE] [-s SEC | -t TIME]"
    3225 #define rtcwake_full_usage "\n\n" \
    3226        "Enter a system sleep state until specified wakeup time\n" \
    3227     IF_LONG_OPTS( \
    3228      "\n    -a,--auto   Read clock mode from adjtime" \
    3229      "\n    -l,--local  Clock is set to local time" \
    3230      "\n    -u,--utc    Clock is set to UTC time" \
    3231      "\n    -d,--device=DEV Specify the RTC device" \
    3232      "\n    -m,--mode=MODE  Set the sleep state (default: standby)" \
    3233      "\n    -s,--seconds=SEC Set the timeout in SEC seconds from now" \
    3234      "\n    -t,--time=TIME  Set the timeout to TIME seconds from epoch" \
    3235     ) \
    3236     IF_NOT_LONG_OPTS( \
    3237      "\n    -a  Read clock mode from adjtime" \
    3238      "\n    -l  Clock is set to local time" \
    3239      "\n    -u  Clock is set to UTC time" \
    3240      "\n    -d DEV  Specify the RTC device" \
    3241      "\n    -m MODE Set the sleep state (default: standby)" \
    3242      "\n    -s SEC  Set the timeout in SEC seconds from now" \
    3243      "\n    -t TIME Set the timeout to TIME seconds from epoch" \
    3244     )
    3245 
    3246 #define runcon_trivial_usage \
    3247        "[-c] [-u USER] [-r ROLE] [-t TYPE] [-l RANGE] PROG ARGS\n" \
    3248        "runcon CONTEXT PROG ARGS"
    3249 #define runcon_full_usage "\n\n" \
    3250        "Run PROG in a different security context\n" \
    3251      "\n    CONTEXT     Complete security context\n" \
    3252     IF_FEATURE_RUNCON_LONG_OPTIONS( \
    3253      "\n    -c,--compute    Compute process transition context before modifying" \
    3254      "\n    -t,--type=TYPE  Type (for same role as parent)" \
    3255      "\n    -u,--user=USER  User identity" \
    3256      "\n    -r,--role=ROLE  Role" \
    3257      "\n    -l,--range=RNG  Levelrange" \
    3258     ) \
    3259     IF_NOT_FEATURE_RUNCON_LONG_OPTIONS( \
    3260      "\n    -c  Compute process transition context before modifying" \
    3261      "\n    -t TYPE Type (for same role as parent)" \
    3262      "\n    -u USER User identity" \
    3263      "\n    -r ROLE Role" \
    3264      "\n    -l RNG  Levelrange" \
    3265     )
    3266 
    3267 #define run_parts_trivial_usage \
    3268        "[-t] "IF_FEATURE_RUN_PARTS_FANCY("[-l] ")"[-a ARG] [-u MASK] DIRECTORY"
    3269 #define run_parts_full_usage "\n\n" \
    3270        "Run a bunch of scripts in DIRECTORY\n" \
    3271      "\nOptions:" \
    3272      "\n    -t  Print what would be run, but don't actually run anything" \
    3273      "\n    -a ARG  Pass ARG as argument for every program" \
    3274      "\n    -u MASK Set the umask to MASK before running every program" \
    3275     IF_FEATURE_RUN_PARTS_FANCY( \
    3276      "\n    -l  Print names of all matching files even if they are not executable" \
    3277     )
    3278 
    3279 #define run_parts_example_usage \
    3280        "$ run-parts -a start /etc/init.d\n" \
    3281        "$ run-parts -a stop=now /etc/init.d\n\n" \
    3282        "Let's assume you have a script foo/dosomething:\n" \
    3283        "#!/bin/sh\n" \
    3284        "for i in $*; do eval $i; done; unset i\n" \
    3285        "case \"$1\" in\n" \
    3286        "start*) echo starting something;;\n" \
    3287        "stop*) set -x; shutdown -h $stop;;\n" \
    3288        "esac\n\n" \
    3289        "Running this yields:\n" \
    3290        "$run-parts -a stop=+4m foo/\n" \
    3291        "+ shutdown -h +4m"
    3292 
    3293 #define runlevel_trivial_usage \
    3294        "[FILE]"
    3295 #define runlevel_full_usage "\n\n" \
    3296        "Find the current and previous system runlevel\n" \
    3297        "\n" \
    3298        "If no utmp FILE exists or if no runlevel record can be found,\n" \
    3299        "print \"unknown\""
    3300 #define runlevel_example_usage \
    3301        "$ runlevel /var/run/utmp\n" \
    3302        "N 2"
    3303 
    3304 #define runsv_trivial_usage \
    3305        "DIR"
    3306 #define runsv_full_usage "\n\n" \
    3307        "Start and monitor a service and optionally an appendant log service"
    3308 
    3309 #define runsvdir_trivial_usage \
    3310        "[-P] [-s SCRIPT] DIR"
    3311 #define runsvdir_full_usage "\n\n" \
    3312        "Start a runsv process for each subdirectory. If it exits, restart it.\n" \
    3313      "\n    -P      Put each runsv in a new session" \
    3314      "\n    -s SCRIPT   Run SCRIPT <signo> after signal is processed" \
    3315 
    3316 #define rx_trivial_usage \
    3317        "FILE"
    3318 #define rx_full_usage "\n\n" \
    3319        "Receive a file using the xmodem protocol"
    3320 #define rx_example_usage \
    3321        "$ rx /tmp/foo\n"
    3322 
    3323 #define script_trivial_usage \
    3324        "[-afq" IF_SCRIPTREPLAY("t") "] [-c PROG] [OUTFILE]"
    3325 #define script_full_usage "\n\n" \
    3326        "Options:" \
    3327      "\n    -a  Append output" \
    3328      "\n    -c PROG Run PROG, not shell" \
    3329      "\n    -f  Flush output after each write" \
    3330      "\n    -q  Quiet" \
    3331     IF_SCRIPTREPLAY( \
    3332      "\n    -t  Send timing to stderr" \
    3333     )
    3334 
    3335 #define sed_trivial_usage \
    3336        "[-efinr] SED_CMD [FILE]..."
    3337 #define sed_full_usage "\n\n" \
    3338        "Options:" \
    3339      "\n    -e CMD  Add CMD to sed commands to be executed" \
    3340      "\n    -f FILE Add FILE contents to sed commands to be executed" \
    3341      "\n    -i  Edit files in-place (else sends result to stdout)" \
    3342      "\n    -n  Suppress automatic printing of pattern space" \
    3343      "\n    -r  Use extended regex syntax" \
    3344      "\n" \
    3345      "\nIf no -e or -f, the first non-option argument is the sed command string." \
    3346      "\nRemaining arguments are input files (stdin if none)."
    3347 
    3348 #define sed_example_usage \
    3349        "$ echo \"foo\" | sed -e 's/f[a-zA-Z]o/bar/g'\n" \
    3350        "bar\n"
    3351 
    3352 #define selinuxenabled_trivial_usage NOUSAGE_STR
    3353 #define selinuxenabled_full_usage ""
    3354 
    3355 #define sendmail_trivial_usage \
    3356        "[OPTIONS] [RECIPIENT_EMAIL]..."
    3357 #define sendmail_full_usage "\n\n" \
    3358        "Read email from stdin and send it\n" \
    3359      "\nStandard options:" \
    3360      "\n    -t      Read additional recipients from message body" \
    3361      "\n    -f sender   Sender (required)" \
    3362      "\n    -o options  Various options. -oi implied, others are ignored" \
    3363      "\n    -i      -oi synonym. implied and ignored" \
    3364      "\n" \
    3365      "\nBusybox specific options:" \
    3366      "\n    -w seconds  Network timeout" \
    3367      "\n    -H 'PROG ARGS'  Run connection helper" \
    3368      "\n            Examples:" \
    3369      "\n            -H 'exec openssl s_client -quiet -tls1 -starttls smtp" \
    3370      "\n                -connect smtp.gmail.com:25' <email.txt" \
    3371      "\n                [4<username_and_passwd.txt | -au<username> -ap<password>]" \
    3372      "\n            -H 'exec openssl s_client -quiet -tls1" \
    3373      "\n                -connect smtp.gmail.com:465' <email.txt" \
    3374      "\n                [4<username_and_passwd.txt | -au<username> -ap<password>]" \
    3375      "\n    -S server[:port] Server" \
    3376      "\n    -au<username>   Username for AUTH LOGIN" \
    3377      "\n    -ap<password>   Password for AUTH LOGIN" \
    3378      "\n    -am<method> Authentication method. Ignored. LOGIN is implied" \
    3379      "\n" \
    3380      "\nOther options are silently ignored; -oi -t is implied" \
    3381     IF_MAKEMIME( \
    3382      "\nUse makemime applet to create message with attachments" \
    3383     )
    3384 
    3385 #define seq_trivial_usage \
    3386        "[-w] [-s SEP] [FIRST [INC]] LAST"
    3387 #define seq_full_usage "\n\n" \
    3388        "Print numbers from FIRST to LAST, in steps of INC.\n" \
    3389        "FIRST, INC default to 1.\n" \
    3390      "\nOptions:" \
    3391      "\n    -w  Pad to last with leading zeros" \
    3392      "\n    -s SEP  String separator" \
    3393 
    3394 #define sestatus_trivial_usage \
    3395        "[-vb]"
    3396 #define sestatus_full_usage "\n\n" \
    3397        "    -v  Verbose" \
    3398      "\n    -b  Display current state of booleans" \
    3399 
    3400 #define setconsole_trivial_usage \
    3401        "[-r" IF_FEATURE_SETCONSOLE_LONG_OPTIONS("|--reset") "] [DEVICE]"
    3402 #define setconsole_full_usage "\n\n" \
    3403        "Redirect system console output to DEVICE (default: /dev/tty)\n" \
    3404      "\nOptions:" \
    3405      "\n    -r  Reset output to /dev/console" \
    3406 
    3407 #define setenforce_trivial_usage \
    3408        "[Enforcing | Permissive | 1 | 0]"
    3409 #define setenforce_full_usage ""
    3410 
    3411 #define setfiles_trivial_usage \
    3412        "[-dnpqsvW] [-e DIR]... [-o FILE] [-r alt_root_path]" \
    3413     IF_FEATURE_SETFILES_CHECK_OPTION( \
    3414        " [-c policyfile] spec_file" \
    3415     ) \
    3416        " pathname"
    3417 #define setfiles_full_usage "\n\n" \
    3418        "Reset file contexts under pathname according to spec_file\n" \
    3419     IF_FEATURE_SETFILES_CHECK_OPTION( \
    3420      "\n    -c FILE Check the validity of the contexts against the specified binary policy" \
    3421     ) \
    3422      "\n    -d  Show which specification matched each file" \
    3423      "\n    -l  Log changes in file labels to syslog" \
    3424      "\n    -n  Don't change any file labels" \
    3425      "\n    -q  Suppress warnings" \
    3426      "\n    -r DIR  Use an alternate root path" \
    3427      "\n    -e DIR  Exclude DIR" \
    3428      "\n    -F  Force reset of context to match file_context for customizable files" \
    3429      "\n    -o FILE Save list of files with incorrect context" \
    3430      "\n    -s  Take a list of files from stdin (instead of command line)" \
    3431      "\n    -v  Show changes in file labels, if type or role are changing" \
    3432      "\n    -vv Show changes in file labels, if type, role, or user are changing" \
    3433      "\n    -W  Display warnings about entries that had no matching files" \
    3434 
    3435 #define setfont_trivial_usage \
    3436        "FONT [-m MAPFILE] [-C TTY]"
    3437 #define setfont_full_usage "\n\n" \
    3438        "Load a console font\n" \
    3439      "\nOptions:" \
    3440      "\n    -m MAPFILE  Load console screen map" \
    3441      "\n    -C TTY      Affect TTY instead of /dev/tty" \
    3442 
    3443 #define setfont_example_usage \
    3444        "$ setfont -m koi8-r /etc/i18n/fontname\n"
    3445 
    3446 #define setkeycodes_trivial_usage \
    3447        "SCANCODE KEYCODE..."
    3448 #define setkeycodes_full_usage "\n\n" \
    3449        "Set entries into the kernel's scancode-to-keycode map,\n" \
    3450        "allowing unusual keyboards to generate usable keycodes.\n\n" \
    3451        "SCANCODE may be either xx or e0xx (hexadecimal),\n" \
    3452        "and KEYCODE is given in decimal." \
    3453 
    3454 #define setkeycodes_example_usage \
    3455        "$ setkeycodes e030 127\n"
    3456 
    3457 #define setlogcons_trivial_usage \
    3458        "N"
    3459 #define setlogcons_full_usage "\n\n" \
    3460        "Redirect the kernel output to console N (0 for current)"
    3461 
    3462 #define setsebool_trivial_usage \
    3463        "boolean value"
    3464 
    3465 #define setsebool_full_usage "\n\n" \
    3466        "Change boolean setting"
    3467 
    3468 #define setsid_trivial_usage \
    3469        "PROG ARGS"
    3470 #define setsid_full_usage "\n\n" \
    3471        "Run PROG in a new session. PROG will have no controlling terminal\n" \
    3472        "and will not be affected by keyboard signals (Ctrl-C etc).\n" \
    3473        "See setsid(2) for details." \
    3474 
    3475 #define last_trivial_usage \
    3476        ""IF_FEATURE_LAST_FANCY("[-HW] [-f FILE]")
    3477 #define last_full_usage "\n\n" \
    3478        "Show listing of the last users that logged into the system" \
    3479     IF_FEATURE_LAST_FANCY( "\n" \
    3480      "\nOptions:" \
    3481 /*   "\n    -H  Show header line" */ \
    3482      "\n    -W  Display with no host column truncation" \
    3483      "\n    -f FILE Read from FILE instead of /var/log/wtmp" \
    3484     )
    3485 
    3486 #define showkey_trivial_usage \
    3487        "[-a | -k | -s]"
    3488 #define showkey_full_usage "\n\n" \
    3489        "Show keys pressed\n" \
    3490      "\nOptions:" \
    3491      "\n    -a  Display decimal/octal/hex values of the keys" \
    3492      "\n    -k  Display interpreted keycodes (default)" \
    3493      "\n    -s  Display raw scan-codes" \
    3494 
    3495 #define slattach_trivial_usage \
    3496        "[-cehmLF] [-s SPEED] [-p PROTOCOL] DEVICE"
    3497 #define slattach_full_usage "\n\n" \
    3498        "Attach network interface(s) to serial line(s)\n" \
    3499      "\nOptions:" \
    3500      "\n    -p PROT Set protocol (slip, cslip, slip6, clisp6 or adaptive)" \
    3501      "\n    -s SPD  Set line speed" \
    3502      "\n    -e  Exit after initializing device" \
    3503      "\n    -h  Exit when the carrier is lost" \
    3504      "\n    -c PROG Run PROG when the line is hung up" \
    3505      "\n    -m  Do NOT initialize the line in raw 8 bits mode" \
    3506      "\n    -L  Enable 3-wire operation" \
    3507      "\n    -F  Disable RTS/CTS flow control" \
    3508 
    3509 #define sleep_trivial_usage \
    3510     IF_FEATURE_FANCY_SLEEP("[") "N" IF_FEATURE_FANCY_SLEEP("]...")
    3511 #define sleep_full_usage "\n\n" \
    3512     IF_NOT_FEATURE_FANCY_SLEEP("Pause for N seconds") \
    3513     IF_FEATURE_FANCY_SLEEP( \
    3514        "Pause for a time equal to the total of the args given, where each arg can\n" \
    3515        "have an optional suffix of (s)econds, (m)inutes, (h)ours, or (d)ays")
    3516 #define sleep_example_usage \
    3517        "$ sleep 2\n" \
    3518        "[2 second delay results]\n" \
    3519     IF_FEATURE_FANCY_SLEEP( \
    3520        "$ sleep 1d 3h 22m 8s\n" \
    3521        "[98528 second delay results]\n")
    3522 
    3523 #define sort_trivial_usage \
    3524        "[-nru" \
    3525     IF_FEATURE_SORT_BIG("gMcszbdfimSTokt] [-o FILE] [-k start[.offset][opts][,end[.offset][opts]] [-t CHAR") \
    3526        "] [FILE]..."
    3527 #define sort_full_usage "\n\n" \
    3528        "Sort lines of text\n" \
    3529      "\nOptions:" \
    3530     IF_FEATURE_SORT_BIG( \
    3531      "\n    -b  Ignore leading blanks" \
    3532      "\n    -c  Check whether input is sorted" \
    3533      "\n    -d  Dictionary order (blank or alphanumeric only)" \
    3534      "\n    -f  Ignore case" \
    3535      "\n    -g  General numerical sort" \
    3536      "\n    -i  Ignore unprintable characters" \
    3537      "\n    -k  Sort key" \
    3538      "\n    -M  Sort month" \
    3539     ) \
    3540      "\n    -n  Sort numbers" \
    3541     IF_FEATURE_SORT_BIG( \
    3542      "\n    -o  Output to file" \
    3543      "\n    -k  Sort by key" \
    3544      "\n    -t CHAR Key separator" \
    3545     ) \
    3546      "\n    -r  Reverse sort order" \
    3547     IF_FEATURE_SORT_BIG( \
    3548      "\n    -s  Stable (don't sort ties alphabetically)" \
    3549     ) \
    3550      "\n    -u  Suppress duplicate lines" \
    3551     IF_FEATURE_SORT_BIG( \
    3552      "\n    -z  Lines are terminated by NUL, not newline" \
    3553      "\n    -mST    Ignored for GNU compatibility") \
    3554 
    3555 #define sort_example_usage \
    3556        "$ echo -e \"e\\nf\\nb\\nd\\nc\\na\" | sort\n" \
    3557        "a\n" \
    3558        "b\n" \
    3559        "c\n" \
    3560        "d\n" \
    3561        "e\n" \
    3562        "f\n" \
    3563     IF_FEATURE_SORT_BIG( \
    3564         "$ echo -e \"c 3\\nb 2\\nd 2\" | $SORT -k 2,2n -k 1,1r\n" \
    3565         "d 2\n" \
    3566         "b 2\n" \
    3567         "c 3\n" \
    3568     ) \
    3569        ""
    3570 
    3571 #define split_trivial_usage \
    3572        "[OPTIONS] [INPUT [PREFIX]]"
    3573 #define split_full_usage "\n\n" \
    3574        "Options:" \
    3575      "\n    -b N[k|m]   Split by N (kilo|mega)bytes" \
    3576      "\n    -l N        Split by N lines" \
    3577      "\n    -a N        Use N letters as suffix" \
    3578 
    3579 #define split_example_usage \
    3580        "$ split TODO foo\n" \
    3581        "$ cat TODO | split -a 2 -l 2 TODO_\n"
    3582 
    3583 #define start_stop_daemon_trivial_usage \
    3584        "[OPTIONS] [-S|-K] ... [-- ARGS...]"
    3585 #define start_stop_daemon_full_usage "\n\n" \
    3586        "Search for matching processes, and then\n" \
    3587        "-K: stop all matching processes.\n" \
    3588        "-S: start a process unless a matching process is found.\n" \
    3589     IF_FEATURE_START_STOP_DAEMON_LONG_OPTIONS( \
    3590      "\nProcess matching:" \
    3591      "\n    -u,--user USERNAME|UID  Match only this user's processes" \
    3592      "\n    -n,--name NAME      Match processes with NAME" \
    3593      "\n                in comm field in /proc/PID/stat" \
    3594      "\n    -x,--exec EXECUTABLE    Match processes with this command" \
    3595      "\n                in /proc/PID/cmdline" \
    3596      "\n    -p,--pidfile FILE   Match a process with PID from the file" \
    3597      "\n    All specified conditions must match" \
    3598      "\n-S only:" \
    3599      "\n    -x,--exec EXECUTABLE    Program to run" \
    3600      "\n    -a,--startas NAME   Zeroth argument" \
    3601      "\n    -b,--background     Background" \
    3602     IF_FEATURE_START_STOP_DAEMON_FANCY( \
    3603      "\n    -N,--nicelevel N    Change nice level" \
    3604     ) \
    3605      "\n    -c,--chuid USER[:[GRP]] Change to user/group" \
    3606      "\n    -m,--make-pidfile   Write PID to the pidfile specified by -p" \
    3607      "\n-K only:" \
    3608      "\n    -s,--signal SIG     Signal to send" \
    3609      "\n    -t,--test       Match only, exit with 0 if a process is found" \
    3610      "\nOther:" \
    3611     IF_FEATURE_START_STOP_DAEMON_FANCY( \
    3612      "\n    -o,--oknodo     Exit with status 0 if nothing is done" \
    3613      "\n    -v,--verbose        Verbose" \
    3614     ) \
    3615      "\n    -q,--quiet      Quiet" \
    3616     ) \
    3617     IF_NOT_FEATURE_START_STOP_DAEMON_LONG_OPTIONS( \
    3618      "\nProcess matching:" \
    3619      "\n    -u USERNAME|UID Match only this user's processes" \
    3620      "\n    -n NAME     Match processes with NAME" \
    3621      "\n            in comm field in /proc/PID/stat" \
    3622      "\n    -x EXECUTABLE   Match processes with this command" \
    3623      "\n            command in /proc/PID/cmdline" \
    3624      "\n    -p FILE     Match a process with PID from the file" \
    3625      "\n    All specified conditions must match" \
    3626      "\n-S only:" \
    3627      "\n    -x EXECUTABLE   Program to run" \
    3628      "\n    -a NAME     Zeroth argument" \
    3629      "\n    -b      Background" \
    3630     IF_FEATURE_START_STOP_DAEMON_FANCY( \
    3631      "\n    -N N        Change nice level" \
    3632     ) \
    3633      "\n    -c USER[:[GRP]] Change to user/group" \
    3634      "\n    -m      Write PID to the pidfile specified by -p" \
    3635      "\n-K only:" \
    3636      "\n    -s SIG      Signal to send" \
    3637      "\n    -t      Match only, exit with 0 if a process is found" \
    3638      "\nOther:" \
    3639     IF_FEATURE_START_STOP_DAEMON_FANCY( \
    3640      "\n    -o      Exit with status 0 if nothing is done" \
    3641      "\n    -v      Verbose" \
    3642     ) \
    3643      "\n    -q      Quiet" \
    3644     ) \
    3645 
    3646 #define stat_trivial_usage \
    3647        "[OPTIONS] FILE..."
    3648 #define stat_full_usage "\n\n" \
    3649        "Display file (default) or filesystem status\n" \
    3650      "\nOptions:" \
    3651     IF_FEATURE_STAT_FORMAT( \
    3652      "\n    -c fmt  Use the specified format" \
    3653     ) \
    3654      "\n    -f  Display filesystem status" \
    3655      "\n    -L  Follow links" \
    3656      "\n    -t  Display info in terse form" \
    3657     IF_SELINUX( \
    3658      "\n    -Z  Print security context" \
    3659     ) \
    3660     IF_FEATURE_STAT_FORMAT( \
    3661        "\n\nValid format sequences for files:\n" \
    3662        " %a Access rights in octal\n" \
    3663        " %A Access rights in human readable form\n" \
    3664        " %b Number of blocks allocated (see %B)\n" \
    3665        " %B The size in bytes of each block reported by %b\n" \
    3666        " %d Device number in decimal\n" \
    3667        " %D Device number in hex\n" \
    3668        " %f Raw mode in hex\n" \
    3669        " %F File type\n" \
    3670        " %g Group ID of owner\n" \
    3671        " %G Group name of owner\n" \
    3672        " %h Number of hard links\n" \
    3673        " %i Inode number\n" \
    3674        " %n File name\n" \
    3675        " %N File name, with -> TARGET if symlink\n" \
    3676        " %o I/O block size\n" \
    3677        " %s Total size, in bytes\n" \
    3678        " %t Major device type in hex\n" \
    3679        " %T Minor device type in hex\n" \
    3680        " %u User ID of owner\n" \
    3681        " %U User name of owner\n" \
    3682        " %x Time of last access\n" \
    3683        " %X Time of last access as seconds since Epoch\n" \
    3684        " %y Time of last modification\n" \
    3685        " %Y Time of last modification as seconds since Epoch\n" \
    3686        " %z Time of last change\n" \
    3687        " %Z Time of last change as seconds since Epoch\n" \
    3688        "\nValid format sequences for file systems:\n" \
    3689        " %a Free blocks available to non-superuser\n" \
    3690        " %b Total data blocks in file system\n" \
    3691        " %c Total file nodes in file system\n" \
    3692        " %d Free file nodes in file system\n" \
    3693        " %f Free blocks in file system\n" \
    3694     IF_SELINUX( \
    3695        " %C Security context in selinux\n" \
    3696     ) \
    3697        " %i File System ID in hex\n" \
    3698        " %l Maximum length of filenames\n" \
    3699        " %n File name\n" \
    3700        " %s Block size (for faster transfer)\n" \
    3701        " %S Fundamental block size (for block counts)\n" \
    3702        " %t Type in hex\n" \
    3703        " %T Type in human readable form" \
    3704     ) \
    3705 
    3706 #define strings_trivial_usage \
    3707        "[-afo] [-n LEN] [FILE]..."
    3708 #define strings_full_usage "\n\n" \
    3709        "Display printable strings in a binary file\n" \
    3710      "\nOptions:" \
    3711      "\n    -a  Scan whole file (default)" \
    3712      "\n    -f  Precede strings with filenames" \
    3713      "\n    -n LEN  At least LEN characters form a string (default 4)" \
    3714      "\n    -o  Precede strings with decimal offsets" \
    3715 
    3716 #define stty_trivial_usage \
    3717        "[-a|g] [-F DEVICE] [SETTING]..."
    3718 #define stty_full_usage "\n\n" \
    3719        "Without arguments, prints baud rate, line discipline,\n" \
    3720        "and deviations from stty sane\n" \
    3721      "\nOptions:" \
    3722      "\n    -F DEVICE   Open device instead of stdin" \
    3723      "\n    -a      Print all current settings in human-readable form" \
    3724      "\n    -g      Print in stty-readable form" \
    3725      "\n    [SETTING]   See manpage" \
    3726 
    3727 #define su_trivial_usage \
    3728        "[OPTIONS] [-] [USERNAME]"
    3729 #define su_full_usage "\n\n" \
    3730        "Change user id or become root\n" \
    3731      "\nOptions:" \
    3732      "\n    -p,-m   Preserve environment" \
    3733      "\n    -c CMD  Command to pass to 'sh -c'" \
    3734      "\n    -s SH   Shell to use instead of default shell" \
    3735 
    3736 #define sulogin_trivial_usage \
    3737        "[-t N] [TTY]"
    3738 #define sulogin_full_usage "\n\n" \
    3739        "Single user login\n" \
    3740      "\nOptions:" \
    3741      "\n    -t N    Timeout" \
    3742 
    3743 #define sum_trivial_usage \
    3744        "[-rs] [FILE]..."
    3745 #define sum_full_usage "\n\n" \
    3746        "Checksum and count the blocks in a file\n" \
    3747      "\nOptions:" \
    3748      "\n    -r  Use BSD sum algorithm (1K blocks)" \
    3749      "\n    -s  Use System V sum algorithm (512byte blocks)" \
    3750 
    3751 #define sv_trivial_usage \
    3752        "[-v] [-w SEC] CMD SERVICE_DIR..."
    3753 #define sv_full_usage "\n\n" \
    3754        "Control services monitored by runsv supervisor.\n" \
    3755        "Commands (only first character is enough):\n" \
    3756        "\n" \
    3757        "status: query service status\n" \
    3758        "up: if service isn't running, start it. If service stops, restart it\n" \
    3759        "once: like 'up', but if service stops, don't restart it\n" \
    3760        "down: send TERM and CONT signals. If ./run exits, start ./finish\n" \
    3761        "    if it exists. After it stops, don't restart service\n" \
    3762        "exit: send TERM and CONT signals to service and log service. If they exit,\n" \
    3763        "    runsv exits too\n" \
    3764        "pause, cont, hup, alarm, interrupt, quit, 1, 2, term, kill: send\n" \
    3765        "STOP, CONT, HUP, ALRM, INT, QUIT, USR1, USR2, TERM, KILL signal to service" \
    3766 
    3767 #define svlogd_trivial_usage \
    3768        "[-ttv] [-r C] [-R CHARS] [-l MATCHLEN] [-b BUFLEN] DIR..."
    3769 #define svlogd_full_usage "\n\n" \
    3770        "Continuously read log data from stdin, optionally\n" \
    3771        "filter log messages, and write the data to one or more automatically\n" \
    3772        "rotated logs" \
    3773 
    3774 #define swapoff_trivial_usage \
    3775        "[-a] [DEVICE]"
    3776 #define swapoff_full_usage "\n\n" \
    3777        "Stop swapping on DEVICE\n" \
    3778      "\nOptions:" \
    3779      "\n    -a  Stop swapping on all swap devices" \
    3780 
    3781 #define swapon_trivial_usage \
    3782        "[-a]" IF_FEATURE_SWAPON_PRI(" [-p PRI]") " [DEVICE]"
    3783 #define swapon_full_usage "\n\n" \
    3784        "Start swapping on DEVICE\n" \
    3785      "\nOptions:" \
    3786      "\n    -a  Start swapping on all swap devices" \
    3787     IF_FEATURE_SWAPON_PRI( \
    3788      "\n    -p PRI  Set swap device priority" \
    3789     ) \
    3790 
    3791 #define switch_root_trivial_usage \
    3792        "[-c /dev/console] NEW_ROOT NEW_INIT [ARGS]"
    3793 #define switch_root_full_usage "\n\n" \
    3794        "Free initramfs and switch to another root fs:\n" \
    3795        "chroot to NEW_ROOT, delete all in /, move NEW_ROOT to /,\n" \
    3796        "execute NEW_INIT. PID must be 1. NEW_ROOT must be a mountpoint.\n" \
    3797      "\nOptions:" \
    3798      "\n    -c DEV  Reopen stdio to DEV after switch" \
    3799 
    3800 #define sync_trivial_usage \
    3801        ""
    3802 #define sync_full_usage "\n\n" \
    3803        "Write all buffered blocks to disk"
    3804 
    3805 #define fsync_trivial_usage \
    3806        "[-d] FILE..."
    3807 #define fsync_full_usage "\n\n" \
    3808        "Write files' buffered blocks to disk\n" \
    3809      "\nOptions:" \
    3810      "\n    -d  Avoid syncing metadata"
    3811 
    3812 #define sysctl_trivial_usage \
    3813        "[OPTIONS] [VALUE]..."
    3814 #define sysctl_full_usage "\n\n" \
    3815        "Configure kernel parameters at runtime\n" \
    3816      "\nOptions:" \
    3817      "\n    -n  Don't print key names" \
    3818      "\n    -e  Don't warn about unknown keys" \
    3819      "\n    -w  Change sysctl setting" \
    3820      "\n    -p FILE Load sysctl settings from FILE (default /etc/sysctl.conf)" \
    3821      "\n    -a  Display all values" \
    3822      "\n    -A  Display all values in table form" \
    3823 
    3824 #define sysctl_example_usage \
    3825        "sysctl [-n] [-e] variable...\n" \
    3826        "sysctl [-n] [-e] -w variable=value...\n" \
    3827        "sysctl [-n] [-e] -a\n" \
    3828        "sysctl [-n] [-e] -p file    (default /etc/sysctl.conf)\n" \
    3829        "sysctl [-n] [-e] -A\n"
    3830 
    3831 #define syslogd_trivial_usage \
    3832        "[OPTIONS]"
    3833 #define syslogd_full_usage "\n\n" \
    3834        "System logging utility.\n" \
    3835        "This version of syslogd ignores /etc/syslog.conf\n" \
    3836      "\nOptions:" \
    3837      "\n    -n      Run in foreground" \
    3838      "\n    -O FILE     Log to given file (default:/var/log/messages)" \
    3839      "\n    -l N        Set local log level" \
    3840      "\n    -S      Smaller logging output" \
    3841     IF_FEATURE_ROTATE_LOGFILE( \
    3842      "\n    -s SIZE     Max size (KB) before rotate (default:200KB, 0=off)" \
    3843      "\n    -b N        N rotated logs to keep (default:1, max=99, 0=purge)") \
    3844     IF_FEATURE_REMOTE_LOG( \
    3845      "\n    -R HOST[:PORT]  Log to IP or hostname on PORT (default PORT=514/UDP)" \
    3846      "\n    -L      Log locally and via network (default is network only if -R)") \
    3847     IF_FEATURE_SYSLOGD_DUP( \
    3848      "\n    -D      Drop duplicates") \
    3849     IF_FEATURE_IPC_SYSLOG( \
    3850      "\n    -C[size(KiB)]   Log to shared mem buffer (read it using logread)") \
    3851     /* NB: -Csize shouldn't have space (because size is optional) */
    3852 /*   "\n    -m MIN      Minutes between MARK lines (default:20, 0=off)" */
    3853 
    3854 #define syslogd_example_usage \
    3855        "$ syslogd -R masterlog:514\n" \
    3856        "$ syslogd -R 192.168.1.1:601\n"
    3857 
    3858 #define tac_trivial_usage \
    3859     "[FILE]..."
    3860 #define tac_full_usage "\n\n" \
    3861     "Concatenate FILEs and print them in reverse"
    3862 
    3863 #define taskset_trivial_usage \
    3864        "[-p] [MASK] [PID | PROG ARGS]"
    3865 #define taskset_full_usage "\n\n" \
    3866        "Set or get CPU affinity\n" \
    3867      "\nOptions:" \
    3868      "\n    -p  Operate on an existing PID" \
    3869 
    3870 #define taskset_example_usage \
    3871        "$ taskset 0x7 ./dgemm_test&\n" \
    3872        "$ taskset -p 0x1 $!\n" \
    3873        "pid 4790's current affinity mask: 7\n" \
    3874        "pid 4790's new affinity mask: 1\n" \
    3875        "$ taskset 0x7 /bin/sh -c './taskset -p 0x1 $$'\n" \
    3876        "pid 6671's current affinity mask: 1\n" \
    3877        "pid 6671's new affinity mask: 1\n" \
    3878        "$ taskset -p 1\n" \
    3879        "pid 1's current affinity mask: 3\n"
    3880 
    3881 #define tee_trivial_usage \
    3882        "[-ai] [FILE]..."
    3883 #define tee_full_usage "\n\n" \
    3884        "Copy stdin to each FILE, and also to stdout\n" \
    3885      "\nOptions:" \
    3886      "\n    -a  Append to the given FILEs, don't overwrite" \
    3887      "\n    -i  Ignore interrupt signals (SIGINT)" \
    3888 
    3889 #define tee_example_usage \
    3890        "$ echo \"Hello\" | tee /tmp/foo\n" \
    3891        "$ cat /tmp/foo\n" \
    3892        "Hello\n"
    3893 
    3894 #if ENABLE_FEATURE_TELNET_AUTOLOGIN
    3895 #define telnet_trivial_usage \
    3896        "[-a] [-l USER] HOST [PORT]"
    3897 #define telnet_full_usage "\n\n" \
    3898        "Connect to telnet server\n" \
    3899      "\nOptions:" \
    3900      "\n    -a  Automatic login with $USER variable" \
    3901      "\n    -l USER Automatic login as USER" \
    3902 
    3903 #else
    3904 #define telnet_trivial_usage \
    3905        "HOST [PORT]"
    3906 #define telnet_full_usage "\n\n" \
    3907        "Connect to telnet server"
    3908 #endif
    3909 
    3910 #define telnetd_trivial_usage \
    3911        "[OPTIONS]"
    3912 #define telnetd_full_usage "\n\n" \
    3913        "Handle incoming telnet connections" \
    3914     IF_NOT_FEATURE_TELNETD_STANDALONE(" via inetd") "\n" \
    3915      "\nOptions:" \
    3916      "\n    -l LOGIN    Exec LOGIN on connect" \
    3917      "\n    -f ISSUE_FILE   Display ISSUE_FILE instead of /etc/issue" \
    3918      "\n    -K      Close connection as soon as login exits" \
    3919      "\n            (normally wait until all programs close slave pty)" \
    3920     IF_FEATURE_TELNETD_STANDALONE( \
    3921      "\n    -p PORT     Port to listen on" \
    3922      "\n    -b ADDR[:PORT]  Address to bind to" \
    3923      "\n    -F      Run in foreground" \
    3924      "\n    -i      Inetd mode" \
    3925     IF_FEATURE_TELNETD_INETD_WAIT( \
    3926      "\n    -w SEC      Inetd 'wait' mode, linger time SEC" \
    3927      "\n    -S      Log to syslog (implied by -i or without -F and -w)" \
    3928     ) \
    3929     )
    3930 
    3931 /* "test --help" does not print help (POSIX compat), only "[ --help" does.
    3932  * We display "<applet> EXPRESSION ]" here (not "<applet> EXPRESSION")
    3933  * Unfortunately, it screws up generated BusyBox.html. TODO. */
    3934 #define test_trivial_usage \
    3935        "EXPRESSION ]"
    3936 #define test_full_usage "\n\n" \
    3937        "Check file types, compare values etc. Return a 0/1 exit code\n" \
    3938        "depending on logical value of EXPRESSION"
    3939 #define test_example_usage \
    3940        "$ test 1 -eq 2\n" \
    3941        "$ echo $?\n" \
    3942        "1\n" \
    3943        "$ test 1 -eq 1\n" \
    3944        "$ echo $?\n" \
    3945        "0\n" \
    3946        "$ [ -d /etc ]\n" \
    3947        "$ echo $?\n" \
    3948        "0\n" \
    3949        "$ [ -d /junk ]\n" \
    3950        "$ echo $?\n" \
    3951        "1\n"
    3952 
    3953 #define tc_trivial_usage \
    3954     /*"[OPTIONS] "*/"OBJECT CMD [dev STRING]"
    3955 #define tc_full_usage "\n\n" \
    3956     "OBJECT: {qdisc|class|filter}\n" \
    3957     "CMD: {add|del|change|replace|show}\n" \
    3958     "\n" \
    3959     "qdisc [ handle QHANDLE ] [ root |"IF_FEATURE_TC_INGRESS(" ingress |")" parent CLASSID ]\n" \
    3960     /* "[ estimator INTERVAL TIME_CONSTANT ]\n" */ \
    3961     "   [ [ QDISC_KIND ] [ help | OPTIONS ] ]\n" \
    3962     "   QDISC_KIND := { [p|b]fifo | tbf | prio | cbq | red | etc. }\n" \
    3963     "qdisc show [ dev STRING ]"IF_FEATURE_TC_INGRESS(" [ingress]")"\n" \
    3964     "class [ classid CLASSID ] [ root | parent CLASSID ]\n" \
    3965     "   [ [ QDISC_KIND ] [ help | OPTIONS ] ]\n" \
    3966     "class show [ dev STRING ] [ root | parent CLASSID ]\n" \
    3967     "filter [ pref PRIO ] [ protocol PROTO ]\n" \
    3968     /* "\t[ estimator INTERVAL TIME_CONSTANT ]\n" */ \
    3969     "   [ root | classid CLASSID ] [ handle FILTERID ]\n" \
    3970     "   [ [ FILTER_TYPE ] [ help | OPTIONS ] ]\n" \
    3971     "filter show [ dev STRING ] [ root | parent CLASSID ]"
    3972 
    3973 #define tcpsvd_trivial_usage \
    3974        "[-hEv] [-c N] [-C N[:MSG]] [-b N] [-u USER] [-l NAME] IP PORT PROG"
    3975 /* with not-implemented options: */
    3976 /*     "[-hpEvv] [-c N] [-C N[:MSG]] [-b N] [-u USER] [-l NAME] [-i DIR|-x CDB] [-t SEC] IP PORT PROG" */
    3977 #define tcpsvd_full_usage "\n\n" \
    3978        "Create TCP socket, bind to IP:PORT and listen\n" \
    3979        "for incoming connection. Run PROG for each connection.\n" \
    3980      "\n    IP      IP to listen on. '0' = all" \
    3981      "\n    PORT        Port to listen on" \
    3982      "\n    PROG ARGS   Program to run" \
    3983      "\n    -l NAME     Local hostname (else looks up local hostname in DNS)" \
    3984      "\n    -u USER[:GRP]   Change to user/group after bind" \
    3985      "\n    -c N        Handle up to N connections simultaneously" \
    3986      "\n    -b N        Allow a backlog of approximately N TCP SYNs" \
    3987      "\n    -C N[:MSG]  Allow only up to N connections from the same IP." \
    3988      "\n            New connections from this IP address are closed" \
    3989      "\n            immediately. MSG is written to the peer before close" \
    3990      "\n    -h      Look up peer's hostname" \
    3991      "\n    -E      Don't set up environment variables" \
    3992      "\n    -v      Verbose" \
    3993 
    3994 #define udpsvd_trivial_usage \
    3995        "[-hEv] [-c N] [-u USER] [-l NAME] IP PORT PROG"
    3996 #define udpsvd_full_usage "\n\n" \
    3997        "Create UDP socket, bind to IP:PORT and wait\n" \
    3998        "for incoming packets. Run PROG for each packet,\n" \
    3999        "redirecting all further packets with same peer ip:port to it.\n" \
    4000      "\n    IP      IP to listen on. '0' = all" \
    4001      "\n    PORT        Port to listen on" \
    4002      "\n    PROG ARGS   Program to run" \
    4003      "\n    -l NAME     Local hostname (else looks up local hostname in DNS)" \
    4004      "\n    -u USER[:GRP]   Change to user/group after bind" \
    4005      "\n    -c N        Handle up to N connections simultaneously" \
    4006      "\n    -h      Look up peer's hostname" \
    4007      "\n    -E      Don't set up environment variables" \
    4008      "\n    -v      Verbose" \
    4009 
    4010 #define tftp_trivial_usage \
    4011        "[OPTIONS] HOST [PORT]"
    4012 #define tftp_full_usage "\n\n" \
    4013        "Transfer a file from/to tftp server\n" \
    4014      "\nOptions:" \
    4015      "\n    -l FILE Local FILE" \
    4016      "\n    -r FILE Remote FILE" \
    4017     IF_FEATURE_TFTP_GET( \
    4018      "\n    -g  Get file" \
    4019     ) \
    4020     IF_FEATURE_TFTP_PUT( \
    4021      "\n    -p  Put file" \
    4022     ) \
    4023     IF_FEATURE_TFTP_BLOCKSIZE( \
    4024      "\n    -b SIZE Transfer blocks of SIZE octets" \
    4025     )
    4026 
    4027 #define tftpd_trivial_usage \
    4028        "[-cr] [-u USER] [DIR]"
    4029 #define tftpd_full_usage "\n\n" \
    4030        "Transfer a file on tftp client's request\n" \
    4031        "\n" \
    4032        "tftpd should be used as an inetd service.\n" \
    4033        "tftpd's line for inetd.conf:\n" \
    4034        "    69 dgram udp nowait root tftpd tftpd /files/to/serve\n" \
    4035        "It also can be ran from udpsvd:\n" \
    4036        "    udpsvd -vE 0.0.0.0 69 tftpd /files/to/serve\n" \
    4037      "\nOptions:" \
    4038      "\n    -r  Prohibit upload" \
    4039      "\n    -c  Allow file creation via upload" \
    4040      "\n    -u  Access files as USER" \
    4041 
    4042 #define time_trivial_usage \
    4043        "[-v] PROG ARGS"
    4044 #define time_full_usage "\n\n" \
    4045        "Run PROG, display resource usage when it exits\n" \
    4046      "\nOptions:" \
    4047      "\n    -v  Verbose" \
    4048 
    4049 #define timeout_trivial_usage \
    4050        "[-t SECS] [-s SIG] PROG ARGS"
    4051 #define timeout_full_usage "\n\n" \
    4052        "Runs PROG. Sends SIG to it if it is not gone in SECS seconds.\n" \
    4053        "Defaults: SECS: 10, SIG: TERM." \
    4054 
    4055 #define top_trivial_usage \
    4056        "[-b] [-nCOUNT] [-dSECONDS]" IF_FEATURE_TOPMEM(" [-m]")
    4057 #define top_full_usage "\n\n" \
    4058        "Provide a view of process activity in real time.\n" \
    4059        "Read the status of all processes from /proc each SECONDS\n" \
    4060        "and display a screenful of them." \
    4061 //TODO: add options and keyboard commands
    4062 
    4063 #define touch_trivial_usage \
    4064        "[-c] [-d DATE] [-r FILE] FILE [FILE]..."
    4065 #define touch_full_usage "\n\n" \
    4066        "Update the last-modified date on the given FILE[s]\n" \
    4067      "\nOptions:" \
    4068      "\n    -c  Don't create files" \
    4069      "\n    -d DT   Date/time to use" \
    4070      "\n    -r FILE Use FILE's date/time" \
    4071 
    4072 #define touch_example_usage \
    4073        "$ ls -l /tmp/foo\n" \
    4074        "/bin/ls: /tmp/foo: No such file or directory\n" \
    4075        "$ touch /tmp/foo\n" \
    4076        "$ ls -l /tmp/foo\n" \
    4077        "-rw-rw-r--    1 andersen andersen        0 Apr 15 01:11 /tmp/foo\n"
    4078 
    4079 #define tr_trivial_usage \
    4080        "[-cds] STRING1 [STRING2]"
    4081 #define tr_full_usage "\n\n" \
    4082        "Translate, squeeze, or delete characters from stdin, writing to stdout\n" \
    4083      "\nOptions:" \
    4084      "\n    -c  Take complement of STRING1" \
    4085      "\n    -d  Delete input characters coded STRING1" \
    4086      "\n    -s  Squeeze multiple output characters of STRING2 into one character" \
    4087 
    4088 #define tr_example_usage \
    4089        "$ echo \"gdkkn vnqkc\" | tr [a-y] [b-z]\n" \
    4090        "hello world\n"
    4091 
    4092 #define traceroute_trivial_usage \
    4093        "[-"IF_TRACEROUTE6("46")"FIldnrv] [-f 1ST_TTL] [-m MAXTTL] [-p PORT] [-q PROBES]\n" \
    4094        "    [-s SRC_IP] [-t TOS] [-w WAIT_SEC] [-g GATEWAY] [-i IFACE]\n" \
    4095        "    [-z PAUSE_MSEC] HOST [BYTES]"
    4096 #define traceroute_full_usage "\n\n" \
    4097        "Trace the route to HOST\n" \
    4098      "\nOptions:" \
    4099     IF_TRACEROUTE6( \
    4100      "\n    -4,-6   Force IP or IPv6 name resolution" \
    4101     ) \
    4102      "\n    -F  Set the don't fragment bit" \
    4103      "\n    -I  Use ICMP ECHO instead of UDP datagrams" \
    4104      "\n    -l  Display the TTL value of the returned packet" \
    4105      "\n    -d  Set SO_DEBUG options to socket" \
    4106      "\n    -n  Print numeric addresses" \
    4107      "\n    -r  Bypass routing tables, send directly to HOST" \
    4108      "\n    -v  Verbose" \
    4109      "\n    -m  Max time-to-live (max number of hops)" \
    4110      "\n    -p  Base UDP port number used in probes" \
    4111      "\n        (default 33434)" \
    4112      "\n    -q  Number of probes per TTL (default 3)" \
    4113      "\n    -s  IP address to use as the source address" \
    4114      "\n    -t  Type-of-service in probe packets (default 0)" \
    4115      "\n    -w  Time in seconds to wait for a response (default 3)" \
    4116      "\n    -g  Loose source route gateway (8 max)" \
    4117 
    4118 #define traceroute6_trivial_usage \
    4119        "[-dnrv] [-m MAXTTL] [-p PORT] [-q PROBES]\n" \
    4120        "    [-s SRC_IP] [-t TOS] [-w WAIT_SEC] [-i IFACE]\n" \
    4121        "    HOST [BYTES]"
    4122 #define traceroute6_full_usage "\n\n" \
    4123        "Trace the route to HOST\n" \
    4124      "\nOptions:" \
    4125      "\n    -d  Set SO_DEBUG options to socket" \
    4126      "\n    -n  Print numeric addresses" \
    4127      "\n    -r  Bypass routing tables, send directly to HOST" \
    4128      "\n    -v  Verbose" \
    4129      "\n    -m  Max time-to-live (max number of hops)" \
    4130      "\n    -p  Base UDP port number used in probes" \
    4131      "\n        (default is 33434)" \
    4132      "\n    -q  Number of probes per TTL (default 3)" \
    4133      "\n    -s  IP address to use as the source address" \
    4134      "\n    -t  Type-of-service in probe packets (default 0)" \
    4135      "\n    -w  Time in seconds to wait for a response (default 3)" \
    4136 
    4137 #define true_trivial_usage \
    4138        ""
    4139 #define true_full_usage "\n\n" \
    4140        "Return an exit code of TRUE (0)"
    4141 #define true_example_usage \
    4142        "$ true\n" \
    4143        "$ echo $?\n" \
    4144        "0\n"
    4145 
    4146 #define tty_trivial_usage \
    4147        ""
    4148 #define tty_full_usage "\n\n" \
    4149        "Print file name of stdin's terminal" \
    4150     IF_INCLUDE_SUSv2( "\n" \
    4151      "\nOptions:" \
    4152      "\n    -s  Print nothing, only return exit status" \
    4153     )
    4154 #define tty_example_usage \
    4155        "$ tty\n" \
    4156        "/dev/tty2\n"
    4157 
    4158 #define ttysize_trivial_usage \
    4159        "[w] [h]"
    4160 #define ttysize_full_usage "\n\n" \
    4161        "Print dimension(s) of stdin's terminal, on error return 80x25"
    4162 
    4163 #define tunctl_trivial_usage \
    4164        "[-f device] ([-t name] | -d name)" IF_FEATURE_TUNCTL_UG(" [-u owner] [-g group] [-b]")
    4165 #define tunctl_full_usage "\n\n" \
    4166        "Create or delete tun interfaces\n" \
    4167      "\nOptions:" \
    4168      "\n    -f name     tun device (/dev/net/tun)" \
    4169      "\n    -t name     Create iface 'name'" \
    4170      "\n    -d name     Delete iface 'name'" \
    4171     IF_FEATURE_TUNCTL_UG( \
    4172      "\n    -u owner    Set iface owner" \
    4173      "\n    -g group    Set iface group" \
    4174      "\n    -b      Brief output" \
    4175     )
    4176 #define tunctl_example_usage \
    4177        "# tunctl\n" \
    4178        "# tunctl -d tun0\n"
    4179 
    4180 #define udhcpd_trivial_usage \
    4181        "[-fS]" IF_FEATURE_UDHCP_PORT(" [-P N]") " [CONFFILE]" \
    4182 
    4183 #define udhcpd_full_usage "\n\n" \
    4184        "DHCP server\n" \
    4185      "\n    -f  Run in foreground" \
    4186      "\n    -S  Log to syslog too" \
    4187     IF_FEATURE_UDHCP_PORT( \
    4188      "\n    -P N    Use port N (default 67)" \
    4189     )
    4190 
    4191 #define umount_trivial_usage \
    4192        "[OPTIONS] FILESYSTEM|DIRECTORY"
    4193 #define umount_full_usage "\n\n" \
    4194        "Unmount file systems\n" \
    4195      "\nOptions:" \
    4196     IF_FEATURE_UMOUNT_ALL( \
    4197      "\n    -a  Unmount all file systems" IF_FEATURE_MTAB_SUPPORT(" in /etc/mtab") \
    4198     ) \
    4199     IF_FEATURE_MTAB_SUPPORT( \
    4200      "\n    -n  Don't erase /etc/mtab entries" \
    4201     ) \
    4202      "\n    -r  Try to remount devices as read-only if mount is busy" \
    4203      "\n    -l  Lazy umount (detach filesystem)" \
    4204      "\n    -f  Force umount (i.e., unreachable NFS server)" \
    4205     IF_FEATURE_MOUNT_LOOP( \
    4206      "\n    -d  Free loop device if it has been used" \
    4207     )
    4208 
    4209 #define umount_example_usage \
    4210        "$ umount /dev/hdc1\n"
    4211 
    4212 #define uname_trivial_usage \
    4213        "[-amnrspv]"
    4214 #define uname_full_usage "\n\n" \
    4215        "Print system information\n" \
    4216      "\nOptions:" \
    4217      "\n    -a  Print all" \
    4218      "\n    -m  The machine (hardware) type" \
    4219      "\n    -n  Hostname" \
    4220      "\n    -r  OS release" \
    4221      "\n    -s  OS name (default)" \
    4222      "\n    -p  Processor type" \
    4223      "\n    -v  OS version" \
    4224 
    4225 #define uname_example_usage \
    4226        "$ uname -a\n" \
    4227        "Linux debian 2.4.23 #2 Tue Dec 23 17:09:10 MST 2003 i686 GNU/Linux\n"
    4228 
    4229 #define uncompress_trivial_usage \
    4230        "[-cf] [FILE]..."
    4231 #define uncompress_full_usage "\n\n" \
    4232        "Decompress .Z file[s]\n" \
    4233      "\nOptions:" \
    4234      "\n    -c  Write to stdout" \
    4235      "\n    -f  Overwrite" \
    4236 
    4237 #define unexpand_trivial_usage \
    4238        "[-fa][-t N] [FILE]..."
    4239 #define unexpand_full_usage "\n\n" \
    4240        "Convert spaces to tabs, writing to stdout\n" \
    4241      "\nOptions:" \
    4242     IF_FEATURE_UNEXPAND_LONG_OPTIONS( \
    4243      "\n    -a,--all    Convert all blanks" \
    4244      "\n    -f,--first-only Convert only leading blanks" \
    4245      "\n    -t,--tabs=N Tabstops every N chars" \
    4246     ) \
    4247     IF_NOT_FEATURE_UNEXPAND_LONG_OPTIONS( \
    4248      "\n    -a  Convert all blanks" \
    4249      "\n    -f  Convert only leading blanks" \
    4250      "\n    -t N    Tabstops every N chars" \
    4251     )
    4252 
    4253 #define uniq_trivial_usage \
    4254        "[-cdu][-f,s,w N] [INPUT [OUTPUT]]"
    4255 #define uniq_full_usage "\n\n" \
    4256        "Discard duplicate lines\n" \
    4257      "\nOptions:" \
    4258      "\n    -c  Prefix lines by the number of occurrences" \
    4259      "\n    -d  Only print duplicate lines" \
    4260      "\n    -u  Only print unique lines" \
    4261      "\n    -f N    Skip first N fields" \
    4262      "\n    -s N    Skip first N chars (after any skipped fields)" \
    4263      "\n    -w N    Compare N characters in line" \
    4264 
    4265 #define uniq_example_usage \
    4266        "$ echo -e \"a\\na\\nb\\nc\\nc\\na\" | sort | uniq\n" \
    4267        "a\n" \
    4268        "b\n" \
    4269        "c\n"
    4270 
    4271 #define unzip_trivial_usage \
    4272        "[-opts[modifiers]] FILE[.zip] [LIST] [-x XLIST] [-d DIR]"
    4273 #define unzip_full_usage "\n\n" \
    4274        "Extract files from ZIP archives\n" \
    4275      "\nOptions:" \
    4276      "\n    -l  List archive contents (with -q for short form)" \
    4277      "\n    -n  Never overwrite files (default)" \
    4278      "\n    -o  Overwrite" \
    4279      "\n    -p  Send output to stdout" \
    4280      "\n    -q  Quiet" \
    4281      "\n    -x XLST Exclude these files" \
    4282      "\n    -d DIR  Extract files into DIR" \
    4283 
    4284 #define uptime_trivial_usage \
    4285        ""
    4286 #define uptime_full_usage "\n\n" \
    4287        "Display the time since the last boot"
    4288 
    4289 #define uptime_example_usage \
    4290        "$ uptime\n" \
    4291        "  1:55pm  up  2:30, load average: 0.09, 0.04, 0.00\n"
    4292 
    4293 #define usleep_trivial_usage \
    4294        "N"
    4295 #define usleep_full_usage "\n\n" \
    4296        "Pause for N microseconds"
    4297 
    4298 #define usleep_example_usage \
    4299        "$ usleep 1000000\n" \
    4300        "[pauses for 1 second]\n"
    4301 
    4302 #define uudecode_trivial_usage \
    4303        "[-o OUTFILE] [INFILE]"
    4304 #define uudecode_full_usage "\n\n" \
    4305        "Uudecode a file\n" \
    4306        "Finds outfile name in uuencoded source unless -o is given"
    4307 
    4308 #define uudecode_example_usage \
    4309        "$ uudecode -o busybox busybox.uu\n" \
    4310        "$ ls -l busybox\n" \
    4311        "-rwxr-xr-x   1 ams      ams        245264 Jun  7 21:35 busybox\n"
    4312 
    4313 #define uuencode_trivial_usage \
    4314        "[-m] [INFILE] STORED_FILENAME"
    4315 #define uuencode_full_usage "\n\n" \
    4316        "Uuencode a file to stdout\n" \
    4317      "\nOptions:" \
    4318      "\n    -m  Use base64 encoding per RFC1521" \
    4319 
    4320 #define uuencode_example_usage \
    4321        "$ uuencode busybox busybox\n" \
    4322        "begin 755 busybox\n" \
    4323        "<encoded file snipped>\n" \
    4324        "$ uudecode busybox busybox > busybox.uu\n" \
    4325        "$\n"
    4326 
    4327 #define vconfig_trivial_usage \
    4328        "COMMAND [OPTIONS]"
    4329 #define vconfig_full_usage "\n\n" \
    4330        "Create and remove virtual ethernet devices\n" \
    4331      "\nOptions:" \
    4332      "\n    add     [interface-name] [vlan_id]" \
    4333      "\n    rem     [vlan-name]" \
    4334      "\n    set_flag    [interface-name] [flag-num] [0 | 1]" \
    4335      "\n    set_egress_map  [vlan-name] [skb_priority] [vlan_qos]" \
    4336      "\n    set_ingress_map [vlan-name] [skb_priority] [vlan_qos]" \
    4337      "\n    set_name_type   [name-type]" \
    4338 
    4339 #define vi_trivial_usage \
    4340        "[OPTIONS] [FILE]..."
    4341 #define vi_full_usage "\n\n" \
    4342        "Edit FILE\n" \
    4343      "\nOptions:" \
    4344     IF_FEATURE_VI_COLON( \
    4345      "\n    -c  Initial command to run ($EXINIT also available)" \
    4346     ) \
    4347     IF_FEATURE_VI_READONLY( \
    4348      "\n    -R  Read-only" \
    4349     ) \
    4350      "\n    -H  Short help regarding available features" \
    4351 
    4352 #define vlock_trivial_usage \
    4353        "[-a]"
    4354 #define vlock_full_usage "\n\n" \
    4355        "Lock a virtual terminal. A password is required to unlock.\n" \
    4356      "\nOptions:" \
    4357      "\n    -a  Lock all VTs" \
    4358 
    4359 #define volname_trivial_usage \
    4360        "[DEVICE]"
    4361 #define volname_full_usage "\n\n" \
    4362        "Show CD volume name of the DEVICE (default /dev/cdrom)"
    4363 
    4364 #define wall_trivial_usage \
    4365     "[FILE]"
    4366 #define wall_full_usage "\n\n" \
    4367     "Write content of FILE or stdin to all logged-in users"
    4368 #define wall_sample_usage \
    4369     "echo foo | wall\n" \
    4370     "wall ./mymessage"
    4371 
    4372 #define watch_trivial_usage \
    4373        "[-n SEC] [-t] PROG ARGS"
    4374 #define watch_full_usage "\n\n" \
    4375        "Run PROG periodically\n" \
    4376      "\nOptions:" \
    4377      "\n    -n  Loop period in seconds (default 2)" \
    4378      "\n    -t  Don't print header" \
    4379 
    4380 #define watch_example_usage \
    4381        "$ watch date\n" \
    4382        "Mon Dec 17 10:31:40 GMT 2000\n" \
    4383        "Mon Dec 17 10:31:42 GMT 2000\n" \
    4384        "Mon Dec 17 10:31:44 GMT 2000"
    4385 
    4386 #define watchdog_trivial_usage \
    4387        "[-t N[ms]] [-T N[ms]] [-F] DEV"
    4388 #define watchdog_full_usage "\n\n" \
    4389        "Periodically write to watchdog device DEV\n" \
    4390      "\nOptions:" \
    4391      "\n    -T N    Reboot after N seconds if not reset (default 60)" \
    4392      "\n    -t N    Reset every N seconds (default 30)" \
    4393      "\n    -F  Run in foreground" \
    4394      "\n" \
    4395      "\nUse 500ms to specify period in milliseconds" \
    4396 
    4397 #define wget_trivial_usage \
    4398     IF_FEATURE_WGET_LONG_OPTIONS( \
    4399        "[-c|--continue] [-s|--spider] [-q|--quiet] [-O|--output-document FILE]\n" \
    4400        "    [--header 'header: value'] [-Y|--proxy on/off] [-P DIR]\n" \
    4401        "    [--no-check-certificate] [-U|--user-agent AGENT]" \
    4402             IF_FEATURE_WGET_TIMEOUT("[-T SEC] ") " URL" \
    4403     ) \
    4404     IF_NOT_FEATURE_WGET_LONG_OPTIONS( \
    4405        "[-csq] [-O FILE] [-Y on/off] [-P DIR] [-U AGENT]" \
    4406             IF_FEATURE_WGET_TIMEOUT("[-T SEC] ") " URL" \
    4407     )
    4408 #define wget_full_usage "\n\n" \
    4409        "Retrieve files via HTTP or FTP\n" \
    4410      "\nOptions:" \
    4411      "\n    -s  Spider mode - only check file existence" \
    4412      "\n    -c  Continue retrieval of aborted transfer" \
    4413      "\n    -q  Quiet" \
    4414      "\n    -P DIR  Save to DIR (default .)" \
    4415     IF_FEATURE_WGET_TIMEOUT( \
    4416      "\n    -T SEC  Network read timeout is SEC seconds" \
    4417     ) \
    4418      "\n    -O FILE Save to FILE ('-' for stdout)" \
    4419      "\n    -U STR  Use STR for User-Agent header" \
    4420      "\n    -Y  Use proxy ('on' or 'off')" \
    4421 
    4422 #define which_trivial_usage \
    4423        "[COMMAND]..."
    4424 #define which_full_usage "\n\n" \
    4425        "Locate a COMMAND"
    4426 #define which_example_usage \
    4427        "$ which login\n" \
    4428        "/bin/login\n"
    4429 
    4430 #define who_trivial_usage \
    4431        "[-a]"
    4432 #define who_full_usage "\n\n" \
    4433        "Show who is logged on\n" \
    4434      "\nOptions:" \
    4435      "\n    -a  Show all" \
    4436 
    4437 #define whoami_trivial_usage \
    4438        ""
    4439 #define whoami_full_usage "\n\n" \
    4440        "Print the user name associated with the current effective user id"
    4441 
    4442 #define zcat_trivial_usage \
    4443        "FILE"
    4444 #define zcat_full_usage "\n\n" \
    4445        "Decompress to stdout"
    4446 
    4447 #define zcip_trivial_usage \
    4448        "[OPTIONS] IFACE SCRIPT"
    4449 #define zcip_full_usage "\n\n" \
    4450        "Manage a ZeroConf IPv4 link-local address\n" \
    4451      "\nOptions:" \
    4452      "\n    -f      Run in foreground" \
    4453      "\n    -q      Quit after obtaining address" \
    4454      "\n    -r 169.254.x.x  Request this address first" \
    4455      "\n    -v      Verbose" \
    4456      "\n" \
    4457      "\nWith no -q, runs continuously monitoring for ARP conflicts," \
    4458      "\nexits only on I/O errors (link down etc)" \
    4459 
    4460 
    4461 #endif
  • branches/3.2/mindi-busybox/include/volume_id.h

    r2725 r3232  
    2121char *get_devname_from_label(const char *spec);
    2222char *get_devname_from_uuid(const char *spec);
    23 void display_uuid_cache(void);
     23void display_uuid_cache(int scan_devices);
    2424
    2525/* Returns:
     
    2929 */
    3030int resolve_mount_spec(char **fsname);
     31int add_to_uuid_cache(const char *device);
  • branches/3.2/mindi-busybox/include/xatonum.h

    r2725 r3232  
    169169    return BUG_bb_strtou32_unimplemented();
    170170}
     171static ALWAYS_INLINE
     172int32_t bb_strtoi32(const char *arg, char **endp, int base)
     173{
     174    if (sizeof(int32_t) == sizeof(int))
     175        return bb_strtoi(arg, endp, base);
     176    if (sizeof(int32_t) == sizeof(long))
     177        return bb_strtol(arg, endp, base);
     178    return BUG_bb_strtou32_unimplemented();
     179}
    171180
    172181/* Floating point */
Note: See TracChangeset for help on using the changeset viewer.