commit ee458af46a0fb927f024f576dd8f1a5fbd71a8a2
parent 04efcd4c81307ce9c4b8e322663f847686ca5e63
Author: Jan Pobříslo <ccx@te2000.cz>
Date: Fri, 8 Jan 2021 19:37:13 +0000
Include relevant pregenerated parts of toybox to compile standalone login executable.
Diffstat:
A | .bzrignore | | | 2 | ++ |
A | login/build.sh | | | 44 | ++++++++++++++++++++++++++++++++++++++++++++ |
A | login/config.h | | | 646 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | login/flags.h | | | 6196 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | login/globals.h | | | 1473 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | login/help.h | | | 618 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | login/lib/args.c | | | 497 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | login/lib/deflate.c | | | 485 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | login/lib/help.c | | | 35 | +++++++++++++++++++++++++++++++++++ |
A | login/lib/lib.c | | | 1414 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | login/lib/lib.h | | | 375 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | login/lib/llist.c | | | 130 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | login/lib/lsm.h | | | 118 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | login/lib/password.c | | | 199 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | login/lib/pending.h | | | 14 | ++++++++++++++ |
A | login/lib/portability.c | | | 107 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | login/lib/portability.h | | | 301 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | login/lib/toyflags.h | | | 38 | ++++++++++++++++++++++++++++++++++++++ |
A | login/lib/tty.c | | | 277 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | login/lib/xwrap.c | | | 872 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | login/main.c | | | 258 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | login/newtoys.h | | | 295 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | login/tags | | | 3124 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | login/tags.h | | | 192 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | login/toys.h | | | 127 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
25 files changed, 17837 insertions(+), 0 deletions(-)
diff --git a/.bzrignore b/.bzrignore
@@ -0,0 +1,2 @@
+login/unstripped
+login/login
diff --git a/login/build.sh b/login/build.sh
@@ -0,0 +1,44 @@
+#!/bin/sh
+
+#PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
+
+BUILD='cc -ggdb -Wall -Wundef -Wno-char-subscripts -Werror=implicit-function-declaration -funsigned-char -I . -Os -ffunction-sections -fdata-sections -fno-asynchronous-unwind-tables -fno-strict-aliasing -DTOYBOX_VERSION="0.7.8-20-g2f4a15b97fb6"'
+
+LINK='-Wl,--gc-sections -o unstripped/login -Wl,--as-needed -lutil -lcrypt -lm -lresolv -lrt -lcrypto -lz'
+
+FILES='lib/args.c
+lib/commas.c
+lib/deflate.c
+lib/dirtree.c
+lib/getmountlist.c
+lib/lib.c
+lib/linestack.c
+lib/llist.c
+lib/net.c
+lib/password.c
+lib/portability.c
+lib/tty.c
+lib/xwrap.c lib/help.c main.c login.c'
+
+FILES=''
+FILES=$FILES' lib/args.c'
+#FILES=$FILES' lib/commas.c'
+#FILES=$FILES' lib/dirtree.c'
+#FILES=$FILES' lib/getmountlist.c'
+FILES=$FILES' lib/lib.c'
+#FILES=$FILES' lib/linestack.c'
+FILES=$FILES' lib/llist.c'
+#FILES=$FILES' lib/net.c'
+FILES=$FILES' lib/password.c'
+#FILES=$FILES' lib/portability.c'
+FILES=$FILES' lib/tty.c'
+FILES=$FILES' lib/xwrap.c'
+FILES=$FILES' lib/help.c'
+FILES=$FILES' main.c login.c'
+
+
+mkdir -p unstripped || exit $?
+
+$BUILD $FILES $LINK || exit $?
+
+strip -o login unstripped/login
diff --git a/login/config.h b/login/config.h
@@ -0,0 +1,646 @@
+#define CFG_BASENAME 0
+#define USE_BASENAME(...)
+#define CFG_CAL 0
+#define USE_CAL(...)
+#define CFG_CAT 0
+#define USE_CAT(...)
+#define CFG_CAT_V 0
+#define USE_CAT_V(...)
+#define CFG_CATV 0
+#define USE_CATV(...)
+#define CFG_CHGRP 0
+#define USE_CHGRP(...)
+#define CFG_CHOWN 0
+#define USE_CHOWN(...)
+#define CFG_CHMOD 0
+#define USE_CHMOD(...)
+#define CFG_CKSUM 0
+#define USE_CKSUM(...)
+#define CFG_CRC32 0
+#define USE_CRC32(...)
+#define CFG_CMP 0
+#define USE_CMP(...)
+#define CFG_COMM 0
+#define USE_COMM(...)
+#define CFG_CP 0
+#define USE_CP(...)
+#define CFG_CP_PRESERVE 0
+#define USE_CP_PRESERVE(...)
+#define CFG_MV 0
+#define USE_MV(...)
+#define CFG_INSTALL 0
+#define USE_INSTALL(...)
+#define CFG_CPIO 0
+#define USE_CPIO(...)
+#define CFG_CUT 0
+#define USE_CUT(...)
+#define CFG_DATE 0
+#define USE_DATE(...)
+#define CFG_DF 0
+#define USE_DF(...)
+#define CFG_DIRNAME 0
+#define USE_DIRNAME(...)
+#define CFG_DU 0
+#define USE_DU(...)
+#define CFG_ECHO 0
+#define USE_ECHO(...)
+#define CFG_ENV 0
+#define USE_ENV(...)
+#define CFG_EXPAND 0
+#define USE_EXPAND(...)
+#define CFG_FALSE 0
+#define USE_FALSE(...)
+#define CFG_FILE 0
+#define USE_FILE(...)
+#define CFG_FIND 0
+#define USE_FIND(...)
+#define CFG_GETCONF 0
+#define USE_GETCONF(...)
+#define CFG_GREP 0
+#define USE_GREP(...)
+#define CFG_EGREP 0
+#define USE_EGREP(...)
+#define CFG_FGREP 0
+#define USE_FGREP(...)
+#define CFG_HEAD 0
+#define USE_HEAD(...)
+#define CFG_ICONV 0
+#define USE_ICONV(...)
+#define CFG_ID 0
+#define USE_ID(...)
+#define CFG_ID_Z 0
+#define USE_ID_Z(...)
+#define CFG_GROUPS 0
+#define USE_GROUPS(...)
+#define CFG_LOGNAME 0
+#define USE_LOGNAME(...)
+#define CFG_WHOAMI 0
+#define USE_WHOAMI(...)
+#define CFG_KILL 0
+#define USE_KILL(...)
+#define CFG_KILLALL5 0
+#define USE_KILLALL5(...)
+#define CFG_LINK 0
+#define USE_LINK(...)
+#define CFG_LN 0
+#define USE_LN(...)
+#define CFG_LOGGER 0
+#define USE_LOGGER(...)
+#define CFG_LS 0
+#define USE_LS(...)
+#define CFG_MKDIR 0
+#define USE_MKDIR(...)
+#define CFG_MKDIR_Z 0
+#define USE_MKDIR_Z(...)
+#define CFG_MKFIFO 0
+#define USE_MKFIFO(...)
+#define CFG_MKFIFO_Z 0
+#define USE_MKFIFO_Z(...)
+#define CFG_NICE 0
+#define USE_NICE(...)
+#define CFG_NL 0
+#define USE_NL(...)
+#define CFG_NOHUP 0
+#define USE_NOHUP(...)
+#define CFG_OD 0
+#define USE_OD(...)
+#define CFG_PASTE 0
+#define USE_PASTE(...)
+#define CFG_PATCH 0
+#define USE_PATCH(...)
+#define CFG_PRINTF 0
+#define USE_PRINTF(...)
+#define CFG_PS 0
+#define USE_PS(...)
+#define CFG_TOP 0
+#define USE_TOP(...)
+#define CFG_IOTOP 0
+#define USE_IOTOP(...)
+#define CFG_PGREP 0
+#define USE_PGREP(...)
+#define CFG_PKILL 0
+#define USE_PKILL(...)
+#define CFG_PWD 0
+#define USE_PWD(...)
+#define CFG_RENICE 0
+#define USE_RENICE(...)
+#define CFG_RM 0
+#define USE_RM(...)
+#define CFG_RMDIR 0
+#define USE_RMDIR(...)
+#define CFG_SED 0
+#define USE_SED(...)
+#define CFG_SLEEP 0
+#define USE_SLEEP(...)
+#define CFG_SLEEP_FLOAT 0
+#define USE_SLEEP_FLOAT(...)
+#define CFG_SORT 0
+#define USE_SORT(...)
+#define CFG_SORT_BIG 0
+#define USE_SORT_BIG(...)
+#define CFG_SORT_FLOAT 0
+#define USE_SORT_FLOAT(...)
+#define CFG_SPLIT 0
+#define USE_SPLIT(...)
+#define CFG_STRINGS 0
+#define USE_STRINGS(...)
+#define CFG_TAIL 0
+#define USE_TAIL(...)
+#define CFG_TAIL_SEEK 0
+#define USE_TAIL_SEEK(...)
+#define CFG_TEE 0
+#define USE_TEE(...)
+#define CFG_TIME 0
+#define USE_TIME(...)
+#define CFG_TOUCH 0
+#define USE_TOUCH(...)
+#define CFG_TRUE 0
+#define USE_TRUE(...)
+#define CFG_TTY 0
+#define USE_TTY(...)
+#define CFG_ULIMIT 0
+#define USE_ULIMIT(...)
+#define CFG_UNAME 0
+#define USE_UNAME(...)
+#define CFG_UNIQ 0
+#define USE_UNIQ(...)
+#define CFG_UNLINK 0
+#define USE_UNLINK(...)
+#define CFG_UUDECODE 0
+#define USE_UUDECODE(...)
+#define CFG_UUENCODE 0
+#define USE_UUENCODE(...)
+#define CFG_WC 0
+#define USE_WC(...)
+#define CFG_WHO 0
+#define USE_WHO(...)
+#define CFG_XARGS 0
+#define USE_XARGS(...)
+#define CFG_XARGS_PEDANTIC 0
+#define USE_XARGS_PEDANTIC(...)
+#define CFG_ARP 0
+#define USE_ARP(...)
+#define CFG_ARPING 0
+#define USE_ARPING(...)
+#define CFG_BC 0
+#define USE_BC(...)
+#define CFG_BOOTCHARTD 0
+#define USE_BOOTCHARTD(...)
+#define CFG_BRCTL 0
+#define USE_BRCTL(...)
+#define CFG_CROND 0
+#define USE_CROND(...)
+#define CFG_CRONTAB 0
+#define USE_CRONTAB(...)
+#define CFG_DD 0
+#define USE_DD(...)
+#define CFG_DHCP 0
+#define USE_DHCP(...)
+#define CFG_DHCP6 0
+#define USE_DHCP6(...)
+#define CFG_DHCPD 0
+#define USE_DHCPD(...)
+#define CFG_DEBUG_DHCP 0
+#define USE_DEBUG_DHCP(...)
+#define CFG_DIFF 0
+#define USE_DIFF(...)
+#define CFG_DUMPLEASES 0
+#define USE_DUMPLEASES(...)
+#define CFG_EXPR 0
+#define USE_EXPR(...)
+#define CFG_FDISK 0
+#define USE_FDISK(...)
+#define CFG_FOLD 0
+#define USE_FOLD(...)
+#define CFG_FSCK 0
+#define USE_FSCK(...)
+#define CFG_GETFATTR 0
+#define USE_GETFATTR(...)
+#define CFG_GETTY 0
+#define USE_GETTY(...)
+#define CFG_GROUPADD 0
+#define USE_GROUPADD(...)
+#define CFG_GROUPDEL 0
+#define USE_GROUPDEL(...)
+#define CFG_GZIP 0
+#define USE_GZIP(...)
+#define CFG_GUNZIP 0
+#define USE_GUNZIP(...)
+#define CFG_ZCAT 0
+#define USE_ZCAT(...)
+#define CFG_HOST 0
+#define USE_HOST(...)
+#define CFG_INIT 0
+#define USE_INIT(...)
+#define CFG_IP 0
+#define USE_IP(...)
+#define CFG_IPCRM 0
+#define USE_IPCRM(...)
+#define CFG_IPCS 0
+#define USE_IPCS(...)
+#define CFG_KLOGD 0
+#define USE_KLOGD(...)
+#define CFG_KLOGD_SOURCE_RING_BUFFER 0
+#define USE_KLOGD_SOURCE_RING_BUFFER(...)
+#define CFG_LAST 0
+#define USE_LAST(...)
+#define CFG_LSOF 0
+#define USE_LSOF(...)
+#define CFG_MDEV 0
+#define USE_MDEV(...)
+#define CFG_MDEV_CONF 0
+#define USE_MDEV_CONF(...)
+#define CFG_MKE2FS 0
+#define USE_MKE2FS(...)
+#define CFG_MKE2FS_JOURNAL 0
+#define USE_MKE2FS_JOURNAL(...)
+#define CFG_MKE2FS_GEN 0
+#define USE_MKE2FS_GEN(...)
+#define CFG_MKE2FS_LABEL 0
+#define USE_MKE2FS_LABEL(...)
+#define CFG_MKE2FS_EXTENDED 0
+#define USE_MKE2FS_EXTENDED(...)
+#define CFG_MODPROBE 0
+#define USE_MODPROBE(...)
+#define CFG_MORE 0
+#define USE_MORE(...)
+#define CFG_OPENVT 0
+#define USE_OPENVT(...)
+#define CFG_DEALLOCVT 0
+#define USE_DEALLOCVT(...)
+#define CFG_ROUTE 0
+#define USE_ROUTE(...)
+#define CFG_SH 0
+#define USE_SH(...)
+#define CFG_CD 0
+#define USE_CD(...)
+#define CFG_EXIT 0
+#define USE_EXIT(...)
+#define CFG_STTY 0
+#define USE_STTY(...)
+#define CFG_SULOGIN 0
+#define USE_SULOGIN(...)
+#define CFG_SYSLOGD 0
+#define USE_SYSLOGD(...)
+#define CFG_TAR 0
+#define USE_TAR(...)
+#define CFG_TCPSVD 0
+#define USE_TCPSVD(...)
+#define CFG_TELNET 0
+#define USE_TELNET(...)
+#define CFG_TELNETD 0
+#define USE_TELNETD(...)
+#define CFG_TEST 0
+#define USE_TEST(...)
+#define CFG_TFTP 0
+#define USE_TFTP(...)
+#define CFG_TFTPD 0
+#define USE_TFTPD(...)
+#define CFG_TR 0
+#define USE_TR(...)
+#define CFG_TRACEROUTE 0
+#define USE_TRACEROUTE(...)
+#define CFG_USERADD 0
+#define USE_USERADD(...)
+#define CFG_USERDEL 0
+#define USE_USERDEL(...)
+#define CFG_VI 0
+#define USE_VI(...)
+#define CFG_WGET 0
+#define USE_WGET(...)
+#define CFG_XZCAT 0
+#define USE_XZCAT(...)
+#define CFG_ACPI 0
+#define USE_ACPI(...)
+#define CFG_ASCII 0
+#define USE_ASCII(...)
+#define CFG_BASE64 0
+#define USE_BASE64(...)
+#define CFG_BLKID 0
+#define USE_BLKID(...)
+#define CFG_FSTYPE 0
+#define USE_FSTYPE(...)
+#define CFG_BLOCKDEV 0
+#define USE_BLOCKDEV(...)
+#define CFG_BUNZIP2 0
+#define USE_BUNZIP2(...)
+#define CFG_BZCAT 0
+#define USE_BZCAT(...)
+#define CFG_CHCON 0
+#define USE_CHCON(...)
+#define CFG_CHROOT 0
+#define USE_CHROOT(...)
+#define CFG_CHRT 0
+#define USE_CHRT(...)
+#define CFG_CHVT 0
+#define USE_CHVT(...)
+#define CFG_CLEAR 0
+#define USE_CLEAR(...)
+#define CFG_COUNT 0
+#define USE_COUNT(...)
+#define CFG_DOS2UNIX 0
+#define USE_DOS2UNIX(...)
+#define CFG_UNIX2DOS 0
+#define USE_UNIX2DOS(...)
+#define CFG_EJECT 0
+#define USE_EJECT(...)
+#define CFG_FACTOR 0
+#define USE_FACTOR(...)
+#define CFG_FALLOCATE 0
+#define USE_FALLOCATE(...)
+#define CFG_FLOCK 0
+#define USE_FLOCK(...)
+#define CFG_FMT 0
+#define USE_FMT(...)
+#define CFG_FREE 0
+#define USE_FREE(...)
+#define CFG_FREERAMDISK 0
+#define USE_FREERAMDISK(...)
+#define CFG_FSFREEZE 0
+#define USE_FSFREEZE(...)
+#define CFG_FSYNC 0
+#define USE_FSYNC(...)
+#define CFG_HELP 0
+#define USE_HELP(...)
+#define CFG_HELP_EXTRAS 0
+#define USE_HELP_EXTRAS(...)
+#define CFG_HEXEDIT 0
+#define USE_HEXEDIT(...)
+#define CFG_HWCLOCK 0
+#define USE_HWCLOCK(...)
+#define CFG_I2CDETECT 0
+#define USE_I2CDETECT(...)
+#define CFG_I2CDUMP 0
+#define USE_I2CDUMP(...)
+#define CFG_I2CGET 0
+#define USE_I2CGET(...)
+#define CFG_I2CSET 0
+#define USE_I2CSET(...)
+#define CFG_INOTIFYD 0
+#define USE_INOTIFYD(...)
+#define CFG_INSMOD 0
+#define USE_INSMOD(...)
+#define CFG_IONICE 0
+#define USE_IONICE(...)
+#define CFG_IORENICE 0
+#define USE_IORENICE(...)
+#define CFG_LOGIN 1
+#define USE_LOGIN(...) __VA_ARGS__
+#define CFG_LOSETUP 0
+#define USE_LOSETUP(...)
+#define CFG_LSATTR 0
+#define USE_LSATTR(...)
+#define CFG_CHATTR 0
+#define USE_CHATTR(...)
+#define CFG_LSMOD 0
+#define USE_LSMOD(...)
+#define CFG_LSPCI 0
+#define USE_LSPCI(...)
+#define CFG_LSPCI_TEXT 0
+#define USE_LSPCI_TEXT(...)
+#define CFG_LSUSB 0
+#define USE_LSUSB(...)
+#define CFG_MAKEDEVS 0
+#define USE_MAKEDEVS(...)
+#define CFG_MIX 0
+#define USE_MIX(...)
+#define CFG_MKPASSWD 0
+#define USE_MKPASSWD(...)
+#define CFG_MKSWAP 0
+#define USE_MKSWAP(...)
+#define CFG_MODINFO 0
+#define USE_MODINFO(...)
+#define CFG_MOUNTPOINT 0
+#define USE_MOUNTPOINT(...)
+#define CFG_NBD_CLIENT 0
+#define USE_NBD_CLIENT(...)
+#define CFG_UNSHARE 0
+#define USE_UNSHARE(...)
+#define CFG_NSENTER 0
+#define USE_NSENTER(...)
+#define CFG_ONEIT 0
+#define USE_ONEIT(...)
+#define CFG_PARTPROBE 0
+#define USE_PARTPROBE(...)
+#define CFG_PIVOT_ROOT 0
+#define USE_PIVOT_ROOT(...)
+#define CFG_PMAP 0
+#define USE_PMAP(...)
+#define CFG_PRINTENV 0
+#define USE_PRINTENV(...)
+#define CFG_PWDX 0
+#define USE_PWDX(...)
+#define CFG_READAHEAD 0
+#define USE_READAHEAD(...)
+#define CFG_READLINK 0
+#define USE_READLINK(...)
+#define CFG_REALPATH 0
+#define USE_REALPATH(...)
+#define CFG_REBOOT 0
+#define USE_REBOOT(...)
+#define CFG_RESET 0
+#define USE_RESET(...)
+#define CFG_REV 0
+#define USE_REV(...)
+#define CFG_RMMOD 0
+#define USE_RMMOD(...)
+#define CFG_SETFATTR 0
+#define USE_SETFATTR(...)
+#define CFG_SETSID 0
+#define USE_SETSID(...)
+#define CFG_SHRED 0
+#define USE_SHRED(...)
+#define CFG_STAT 0
+#define USE_STAT(...)
+#define CFG_SWAPOFF 0
+#define USE_SWAPOFF(...)
+#define CFG_SWAPON 0
+#define USE_SWAPON(...)
+#define CFG_SWITCH_ROOT 0
+#define USE_SWITCH_ROOT(...)
+#define CFG_SYSCTL 0
+#define USE_SYSCTL(...)
+#define CFG_TAC 0
+#define USE_TAC(...)
+#define CFG_NPROC 0
+#define USE_NPROC(...)
+#define CFG_TASKSET 0
+#define USE_TASKSET(...)
+#define CFG_TIMEOUT 0
+#define USE_TIMEOUT(...)
+#define CFG_TRUNCATE 0
+#define USE_TRUNCATE(...)
+#define CFG_UPTIME 0
+#define USE_UPTIME(...)
+#define CFG_USLEEP 0
+#define USE_USLEEP(...)
+#define CFG_UUIDGEN 0
+#define USE_UUIDGEN(...)
+#define CFG_VCONFIG 0
+#define USE_VCONFIG(...)
+#define CFG_VMSTAT 0
+#define USE_VMSTAT(...)
+#define CFG_W 0
+#define USE_W(...)
+#define CFG_WATCH 0
+#define USE_WATCH(...)
+#define CFG_WHICH 0
+#define USE_WHICH(...)
+#define CFG_XXD 0
+#define USE_XXD(...)
+#define CFG_YES 0
+#define USE_YES(...)
+#define CFG_FTPGET 0
+#define USE_FTPGET(...)
+#define CFG_FTPPUT 0
+#define USE_FTPPUT(...)
+#define CFG_IFCONFIG 0
+#define USE_IFCONFIG(...)
+#define CFG_MICROCOM 0
+#define USE_MICROCOM(...)
+#define CFG_NETCAT 0
+#define USE_NETCAT(...)
+#define CFG_NETCAT_LISTEN 0
+#define USE_NETCAT_LISTEN(...)
+#define CFG_NETSTAT 0
+#define USE_NETSTAT(...)
+#define CFG_PING 0
+#define USE_PING(...)
+#define CFG_RFKILL 0
+#define USE_RFKILL(...)
+#define CFG_TUNCTL 0
+#define USE_TUNCTL(...)
+#define CFG_DMESG 0
+#define USE_DMESG(...)
+#define CFG_HOSTNAME 0
+#define USE_HOSTNAME(...)
+#define CFG_KILLALL 0
+#define USE_KILLALL(...)
+#define CFG_MD5SUM 0
+#define USE_MD5SUM(...)
+#define CFG_SHA1SUM 0
+#define USE_SHA1SUM(...)
+#define CFG_SHA224SUM 0
+#define USE_SHA224SUM(...)
+#define CFG_SHA256SUM 0
+#define USE_SHA256SUM(...)
+#define CFG_SHA384SUM 0
+#define USE_SHA384SUM(...)
+#define CFG_SHA512SUM 0
+#define USE_SHA512SUM(...)
+#define CFG_MKNOD 0
+#define USE_MKNOD(...)
+#define CFG_MKNOD_Z 0
+#define USE_MKNOD_Z(...)
+#define CFG_MKTEMP 0
+#define USE_MKTEMP(...)
+#define CFG_MOUNT 0
+#define USE_MOUNT(...)
+#define CFG_PASSWD 0
+#define USE_PASSWD(...)
+#define CFG_PASSWD_SAD 0
+#define USE_PASSWD_SAD(...)
+#define CFG_PIDOF 0
+#define USE_PIDOF(...)
+#define CFG_SEQ 0
+#define USE_SEQ(...)
+#define CFG_SU 0
+#define USE_SU(...)
+#define CFG_SYNC 0
+#define USE_SYNC(...)
+#define CFG_UMOUNT 0
+#define USE_UMOUNT(...)
+#define CFG_DEMO_MANY_OPTIONS 0
+#define USE_DEMO_MANY_OPTIONS(...)
+#define CFG_DEMO_NUMBER 0
+#define USE_DEMO_NUMBER(...)
+#define CFG_DEMO_SCANKEY 0
+#define USE_DEMO_SCANKEY(...)
+#define CFG_DEMO_UTF8TOWC 0
+#define USE_DEMO_UTF8TOWC(...)
+#define CFG_HELLO 0
+#define USE_HELLO(...)
+#define CFG_HOSTID 0
+#define USE_HOSTID(...)
+#define CFG_SKELETON 0
+#define USE_SKELETON(...)
+#define CFG_SKELETON_ALIAS 0
+#define USE_SKELETON_ALIAS(...)
+#define CFG_GETENFORCE 0
+#define USE_GETENFORCE(...)
+#define CFG_GETPROP 0
+#define USE_GETPROP(...)
+#define CFG_LOAD_POLICY 0
+#define USE_LOAD_POLICY(...)
+#define CFG_LOG 0
+#define USE_LOG(...)
+#define CFG_RESTORECON 0
+#define USE_RESTORECON(...)
+#define CFG_RUNCON 0
+#define USE_RUNCON(...)
+#define CFG_SENDEVENT 0
+#define USE_SENDEVENT(...)
+#define CFG_SETENFORCE 0
+#define USE_SETENFORCE(...)
+#define CFG_SETPROP 0
+#define USE_SETPROP(...)
+#define CFG_START 0
+#define USE_START(...)
+#define CFG_STOP 0
+#define USE_STOP(...)
+#define CFG_TOYBOX 0
+#define USE_TOYBOX(...)
+#define CFG_TOYBOX_CONTAINER 0
+#define USE_TOYBOX_CONTAINER(...)
+#define CFG_TOYBOX_FIFREEZE 0
+#define USE_TOYBOX_FIFREEZE(...)
+#define CFG_TOYBOX_ICONV 1
+#define USE_TOYBOX_ICONV(...) __VA_ARGS__
+#define CFG_TOYBOX_FALLOCATE 1
+#define USE_TOYBOX_FALLOCATE(...) __VA_ARGS__
+#define CFG_TOYBOX_UTMPX 1
+#define USE_TOYBOX_UTMPX(...) __VA_ARGS__
+#define CFG_TOYBOX_SHADOW 1
+#define USE_TOYBOX_SHADOW(...) __VA_ARGS__
+#define CFG_TOYBOX_ON_ANDROID 0
+#define USE_TOYBOX_ON_ANDROID(...)
+#define CFG_TOYBOX_ANDROID_SCHEDPOLICY 0
+#define USE_TOYBOX_ANDROID_SCHEDPOLICY(...)
+#define CFG_TOYBOX_FORK 1
+#define USE_TOYBOX_FORK(...) __VA_ARGS__
+#define CFG_TOYBOX_PRLIMIT 1
+#define USE_TOYBOX_PRLIMIT(...) __VA_ARGS__
+#define CFG_TOYBOX_GETRANDOM 1
+#define USE_TOYBOX_GETRANDOM(...) __VA_ARGS__
+#define CFG_TOYBOX_SUID 1
+#define USE_TOYBOX_SUID(...) __VA_ARGS__
+#define CFG_TOYBOX_LSM_NONE 1
+#define USE_TOYBOX_LSM_NONE(...) __VA_ARGS__
+#define CFG_TOYBOX_SELINUX 0
+#define USE_TOYBOX_SELINUX(...)
+#define CFG_TOYBOX_SMACK 0
+#define USE_TOYBOX_SMACK(...)
+#define CFG_TOYBOX_LIBCRYPTO 0
+#define USE_TOYBOX_LIBCRYPTO(...)
+#define CFG_TOYBOX_LIBZ 0
+#define USE_TOYBOX_LIBZ(...)
+#define CFG_TOYBOX_FLOAT 1
+#define USE_TOYBOX_FLOAT(...) __VA_ARGS__
+#define CFG_TOYBOX_HELP 1
+#define USE_TOYBOX_HELP(...) __VA_ARGS__
+#define CFG_TOYBOX_HELP_DASHDASH 1
+#define USE_TOYBOX_HELP_DASHDASH(...) __VA_ARGS__
+#define CFG_TOYBOX_I18N 1
+#define USE_TOYBOX_I18N(...) __VA_ARGS__
+#define CFG_TOYBOX_FREE 0
+#define USE_TOYBOX_FREE(...)
+#define CFG_TOYBOX_NORECURSE 0
+#define USE_TOYBOX_NORECURSE(...)
+#define CFG_TOYBOX_DEBUG 0
+#define USE_TOYBOX_DEBUG(...)
+#define CFG_TOYBOX_PEDANTIC_ARGS 0
+#define USE_TOYBOX_PEDANTIC_ARGS(...)
+#define CFG_TOYBOX_UID_SYS 100
+#define CFG_TOYBOX_UID_USR 500
+#define CFG_TOYBOX_MUSL_NOMMU_IS_BROKEN 0
+#define USE_TOYBOX_MUSL_NOMMU_IS_BROKEN(...)
diff --git a/login/flags.h b/login/flags.h
@@ -0,0 +1,6196 @@
+#undef FORCED_FLAG
+#undef FORCED_FLAGLL
+#ifdef FORCE_FLAGS
+#define FORCED_FLAG 1
+#define FORCED_FLAGLL 1LL
+#else
+#define FORCED_FLAG 0
+#define FORCED_FLAGLL 0
+#endif
+
+// acpi abctV
+#undef OPTSTR_acpi
+#define OPTSTR_acpi "abctV"
+#ifdef CLEANUP_acpi
+#undef CLEANUP_acpi
+#undef FOR_acpi
+#undef FLAG_V
+#undef FLAG_t
+#undef FLAG_c
+#undef FLAG_b
+#undef FLAG_a
+#endif
+
+// arp vi:nDsdap:A:H:[+Ap][!sd]
+#undef OPTSTR_arp
+#define OPTSTR_arp "vi:nDsdap:A:H:[+Ap][!sd]"
+#ifdef CLEANUP_arp
+#undef CLEANUP_arp
+#undef FOR_arp
+#undef FLAG_H
+#undef FLAG_A
+#undef FLAG_p
+#undef FLAG_a
+#undef FLAG_d
+#undef FLAG_s
+#undef FLAG_D
+#undef FLAG_n
+#undef FLAG_i
+#undef FLAG_v
+#endif
+
+// arping <1>1s:I:w#<0c#<0AUDbqf[+AU][+Df]
+#undef OPTSTR_arping
+#define OPTSTR_arping "<1>1s:I:w#<0c#<0AUDbqf[+AU][+Df]"
+#ifdef CLEANUP_arping
+#undef CLEANUP_arping
+#undef FOR_arping
+#undef FLAG_f
+#undef FLAG_q
+#undef FLAG_b
+#undef FLAG_D
+#undef FLAG_U
+#undef FLAG_A
+#undef FLAG_c
+#undef FLAG_w
+#undef FLAG_I
+#undef FLAG_s
+#endif
+
+// ascii
+#undef OPTSTR_ascii
+#define OPTSTR_ascii 0
+#ifdef CLEANUP_ascii
+#undef CLEANUP_ascii
+#undef FOR_ascii
+#endif
+
+// base64 diw#<0=76[!dw]
+#undef OPTSTR_base64
+#define OPTSTR_base64 "diw#<0=76[!dw]"
+#ifdef CLEANUP_base64
+#undef CLEANUP_base64
+#undef FOR_base64
+#undef FLAG_w
+#undef FLAG_i
+#undef FLAG_d
+#endif
+
+// basename <1as:
+#undef OPTSTR_basename
+#define OPTSTR_basename "<1as:"
+#ifdef CLEANUP_basename
+#undef CLEANUP_basename
+#undef FOR_basename
+#undef FLAG_s
+#undef FLAG_a
+#endif
+
+// bc i(interactive)l(mathlib)q(quiet)s(standard)w(warn)
+#undef OPTSTR_bc
+#define OPTSTR_bc "i(interactive)l(mathlib)q(quiet)s(standard)w(warn)"
+#ifdef CLEANUP_bc
+#undef CLEANUP_bc
+#undef FOR_bc
+#undef FLAG_warn
+#undef FLAG_w
+#undef FLAG_standard
+#undef FLAG_s
+#undef FLAG_quiet
+#undef FLAG_q
+#undef FLAG_mathlib
+#undef FLAG_l
+#undef FLAG_interactive
+#undef FLAG_i
+#endif
+
+// blkid
+#undef OPTSTR_blkid
+#define OPTSTR_blkid 0
+#ifdef CLEANUP_blkid
+#undef CLEANUP_blkid
+#undef FOR_blkid
+#endif
+
+// blockdev <1>1(setro)(setrw)(getro)(getss)(getbsz)(setbsz)#<0(getsz)(getsize)(getsize64)(getra)(setra)#<0(flushbufs)(rereadpt)
+#undef OPTSTR_blockdev
+#define OPTSTR_blockdev "<1>1(setro)(setrw)(getro)(getss)(getbsz)(setbsz)#<0(getsz)(getsize)(getsize64)(getra)(setra)#<0(flushbufs)(rereadpt)"
+#ifdef CLEANUP_blockdev
+#undef CLEANUP_blockdev
+#undef FOR_blockdev
+#undef FLAG_rereadpt
+#undef FLAG_flushbufs
+#undef FLAG_setra
+#undef FLAG_getra
+#undef FLAG_getsize64
+#undef FLAG_getsize
+#undef FLAG_getsz
+#undef FLAG_setbsz
+#undef FLAG_getbsz
+#undef FLAG_getss
+#undef FLAG_getro
+#undef FLAG_setrw
+#undef FLAG_setro
+#endif
+
+// bootchartd
+#undef OPTSTR_bootchartd
+#define OPTSTR_bootchartd 0
+#ifdef CLEANUP_bootchartd
+#undef CLEANUP_bootchartd
+#undef FOR_bootchartd
+#endif
+
+// brctl <1
+#undef OPTSTR_brctl
+#define OPTSTR_brctl "<1"
+#ifdef CLEANUP_brctl
+#undef CLEANUP_brctl
+#undef FOR_brctl
+#endif
+
+// bunzip2 cftkv
+#undef OPTSTR_bunzip2
+#define OPTSTR_bunzip2 "cftkv"
+#ifdef CLEANUP_bunzip2
+#undef CLEANUP_bunzip2
+#undef FOR_bunzip2
+#undef FLAG_v
+#undef FLAG_k
+#undef FLAG_t
+#undef FLAG_f
+#undef FLAG_c
+#endif
+
+// bzcat
+#undef OPTSTR_bzcat
+#define OPTSTR_bzcat 0
+#ifdef CLEANUP_bzcat
+#undef CLEANUP_bzcat
+#undef FOR_bzcat
+#endif
+
+// cal >2
+#undef OPTSTR_cal
+#define OPTSTR_cal ">2"
+#ifdef CLEANUP_cal
+#undef CLEANUP_cal
+#undef FOR_cal
+#endif
+
+// cat uvte
+#undef OPTSTR_cat
+#define OPTSTR_cat "uvte"
+#ifdef CLEANUP_cat
+#undef CLEANUP_cat
+#undef FOR_cat
+#undef FLAG_e
+#undef FLAG_t
+#undef FLAG_v
+#undef FLAG_u
+#endif
+
+// catv vte
+#undef OPTSTR_catv
+#define OPTSTR_catv "vte"
+#ifdef CLEANUP_catv
+#undef CLEANUP_catv
+#undef FOR_catv
+#undef FLAG_e
+#undef FLAG_t
+#undef FLAG_v
+#endif
+
+// cd
+#undef OPTSTR_cd
+#define OPTSTR_cd 0
+#ifdef CLEANUP_cd
+#undef CLEANUP_cd
+#undef FOR_cd
+#endif
+
+// chattr
+#undef OPTSTR_chattr
+#define OPTSTR_chattr 0
+#ifdef CLEANUP_chattr
+#undef CLEANUP_chattr
+#undef FOR_chattr
+#endif
+
+// chcon <2hvR
+#undef OPTSTR_chcon
+#define OPTSTR_chcon "<2hvR"
+#ifdef CLEANUP_chcon
+#undef CLEANUP_chcon
+#undef FOR_chcon
+#undef FLAG_R
+#undef FLAG_v
+#undef FLAG_h
+#endif
+
+// chgrp <2hPLHRfv[-HLP]
+#undef OPTSTR_chgrp
+#define OPTSTR_chgrp "<2hPLHRfv[-HLP]"
+#ifdef CLEANUP_chgrp
+#undef CLEANUP_chgrp
+#undef FOR_chgrp
+#undef FLAG_v
+#undef FLAG_f
+#undef FLAG_R
+#undef FLAG_H
+#undef FLAG_L
+#undef FLAG_P
+#undef FLAG_h
+#endif
+
+// chmod <2?vRf[-vf]
+#undef OPTSTR_chmod
+#define OPTSTR_chmod "<2?vRf[-vf]"
+#ifdef CLEANUP_chmod
+#undef CLEANUP_chmod
+#undef FOR_chmod
+#undef FLAG_f
+#undef FLAG_R
+#undef FLAG_v
+#endif
+
+// chroot ^<1
+#undef OPTSTR_chroot
+#define OPTSTR_chroot "^<1"
+#ifdef CLEANUP_chroot
+#undef CLEANUP_chroot
+#undef FOR_chroot
+#endif
+
+// chrt ^mp#<0iRbrfo[!ibrfo]
+#undef OPTSTR_chrt
+#define OPTSTR_chrt "^mp#<0iRbrfo[!ibrfo]"
+#ifdef CLEANUP_chrt
+#undef CLEANUP_chrt
+#undef FOR_chrt
+#undef FLAG_o
+#undef FLAG_f
+#undef FLAG_r
+#undef FLAG_b
+#undef FLAG_R
+#undef FLAG_i
+#undef FLAG_p
+#undef FLAG_m
+#endif
+
+// chvt <1
+#undef OPTSTR_chvt
+#define OPTSTR_chvt "<1"
+#ifdef CLEANUP_chvt
+#undef CLEANUP_chvt
+#undef FOR_chvt
+#endif
+
+// cksum HIPLN
+#undef OPTSTR_cksum
+#define OPTSTR_cksum "HIPLN"
+#ifdef CLEANUP_cksum
+#undef CLEANUP_cksum
+#undef FOR_cksum
+#undef FLAG_N
+#undef FLAG_L
+#undef FLAG_P
+#undef FLAG_I
+#undef FLAG_H
+#endif
+
+// clear
+#undef OPTSTR_clear
+#define OPTSTR_clear 0
+#ifdef CLEANUP_clear
+#undef CLEANUP_clear
+#undef FOR_clear
+#endif
+
+// cmp <2>2ls(silent)(quiet)[!ls]
+#undef OPTSTR_cmp
+#define OPTSTR_cmp "<2>2ls(silent)(quiet)[!ls]"
+#ifdef CLEANUP_cmp
+#undef CLEANUP_cmp
+#undef FOR_cmp
+#undef FLAG_quiet
+#undef FLAG_silent
+#undef FLAG_s
+#undef FLAG_l
+#endif
+
+// comm <2>2321
+#undef OPTSTR_comm
+#define OPTSTR_comm "<2>2321"
+#ifdef CLEANUP_comm
+#undef CLEANUP_comm
+#undef FOR_comm
+#undef FLAG_1
+#undef FLAG_2
+#undef FLAG_3
+#endif
+
+// count
+#undef OPTSTR_count
+#define OPTSTR_count 0
+#ifdef CLEANUP_count
+#undef CLEANUP_count
+#undef FOR_count
+#endif
+
+// cp <2(preserve):;D(parents)RHLPprdaslvnF(remove-destination)fi[-HLPd][-ni]
+#undef OPTSTR_cp
+#define OPTSTR_cp "<2(preserve):;D(parents)RHLPprdaslvnF(remove-destination)fi[-HLPd][-ni]"
+#ifdef CLEANUP_cp
+#undef CLEANUP_cp
+#undef FOR_cp
+#undef FLAG_i
+#undef FLAG_f
+#undef FLAG_remove_destination
+#undef FLAG_F
+#undef FLAG_n
+#undef FLAG_v
+#undef FLAG_l
+#undef FLAG_s
+#undef FLAG_a
+#undef FLAG_d
+#undef FLAG_r
+#undef FLAG_p
+#undef FLAG_P
+#undef FLAG_L
+#undef FLAG_H
+#undef FLAG_R
+#undef FLAG_parents
+#undef FLAG_D
+#undef FLAG_preserve
+#endif
+
+// cpio (no-preserve-owner)(trailer)mduH:p:|i|t|F:v(verbose)o|[!pio][!pot][!pF]
+#undef OPTSTR_cpio
+#define OPTSTR_cpio "(no-preserve-owner)(trailer)mduH:p:|i|t|F:v(verbose)o|[!pio][!pot][!pF]"
+#ifdef CLEANUP_cpio
+#undef CLEANUP_cpio
+#undef FOR_cpio
+#undef FLAG_o
+#undef FLAG_verbose
+#undef FLAG_v
+#undef FLAG_F
+#undef FLAG_t
+#undef FLAG_i
+#undef FLAG_p
+#undef FLAG_H
+#undef FLAG_u
+#undef FLAG_d
+#undef FLAG_m
+#undef FLAG_trailer
+#undef FLAG_no_preserve_owner
+#endif
+
+// crc32
+#undef OPTSTR_crc32
+#define OPTSTR_crc32 0
+#ifdef CLEANUP_crc32
+#undef CLEANUP_crc32
+#undef FOR_crc32
+#endif
+
+// crond fbSl#<0=8d#<0L:c:[-bf][-LS][-ld]
+#undef OPTSTR_crond
+#define OPTSTR_crond "fbSl#<0=8d#<0L:c:[-bf][-LS][-ld]"
+#ifdef CLEANUP_crond
+#undef CLEANUP_crond
+#undef FOR_crond
+#undef FLAG_c
+#undef FLAG_L
+#undef FLAG_d
+#undef FLAG_l
+#undef FLAG_S
+#undef FLAG_b
+#undef FLAG_f
+#endif
+
+// crontab c:u:elr[!elr]
+#undef OPTSTR_crontab
+#define OPTSTR_crontab "c:u:elr[!elr]"
+#ifdef CLEANUP_crontab
+#undef CLEANUP_crontab
+#undef FOR_crontab
+#undef FLAG_r
+#undef FLAG_l
+#undef FLAG_e
+#undef FLAG_u
+#undef FLAG_c
+#endif
+
+// cut b*|c*|f*|F*|C*|O(output-delimiter):d:sDn[!cbf]
+#undef OPTSTR_cut
+#define OPTSTR_cut "b*|c*|f*|F*|C*|O(output-delimiter):d:sDn[!cbf]"
+#ifdef CLEANUP_cut
+#undef CLEANUP_cut
+#undef FOR_cut
+#undef FLAG_n
+#undef FLAG_D
+#undef FLAG_s
+#undef FLAG_d
+#undef FLAG_output_delimiter
+#undef FLAG_O
+#undef FLAG_C
+#undef FLAG_F
+#undef FLAG_f
+#undef FLAG_c
+#undef FLAG_b
+#endif
+
+// date d:D:r:u[!dr]
+#undef OPTSTR_date
+#define OPTSTR_date "d:D:r:u[!dr]"
+#ifdef CLEANUP_date
+#undef CLEANUP_date
+#undef FOR_date
+#undef FLAG_u
+#undef FLAG_r
+#undef FLAG_D
+#undef FLAG_d
+#endif
+
+// dd
+#undef OPTSTR_dd
+#define OPTSTR_dd 0
+#ifdef CLEANUP_dd
+#undef CLEANUP_dd
+#undef FOR_dd
+#endif
+
+// deallocvt >1
+#undef OPTSTR_deallocvt
+#define OPTSTR_deallocvt ">1"
+#ifdef CLEANUP_deallocvt
+#undef CLEANUP_deallocvt
+#undef FOR_deallocvt
+#endif
+
+// demo_many_options ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba
+#undef OPTSTR_demo_many_options
+#define OPTSTR_demo_many_options "ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba"
+#ifdef CLEANUP_demo_many_options
+#undef CLEANUP_demo_many_options
+#undef FOR_demo_many_options
+#undef FLAG_a
+#undef FLAG_b
+#undef FLAG_c
+#undef FLAG_d
+#undef FLAG_e
+#undef FLAG_f
+#undef FLAG_g
+#undef FLAG_h
+#undef FLAG_i
+#undef FLAG_j
+#undef FLAG_k
+#undef FLAG_l
+#undef FLAG_m
+#undef FLAG_n
+#undef FLAG_o
+#undef FLAG_p
+#undef FLAG_q
+#undef FLAG_r
+#undef FLAG_s
+#undef FLAG_t
+#undef FLAG_u
+#undef FLAG_v
+#undef FLAG_w
+#undef FLAG_x
+#undef FLAG_y
+#undef FLAG_z
+#undef FLAG_A
+#undef FLAG_B
+#undef FLAG_C
+#undef FLAG_D
+#undef FLAG_E
+#undef FLAG_F
+#undef FLAG_G
+#undef FLAG_H
+#undef FLAG_I
+#undef FLAG_J
+#undef FLAG_K
+#undef FLAG_L
+#undef FLAG_M
+#undef FLAG_N
+#undef FLAG_O
+#undef FLAG_P
+#undef FLAG_Q
+#undef FLAG_R
+#undef FLAG_S
+#undef FLAG_T
+#undef FLAG_U
+#undef FLAG_V
+#undef FLAG_W
+#undef FLAG_X
+#undef FLAG_Y
+#undef FLAG_Z
+#endif
+
+// demo_number hdbs
+#undef OPTSTR_demo_number
+#define OPTSTR_demo_number "hdbs"
+#ifdef CLEANUP_demo_number
+#undef CLEANUP_demo_number
+#undef FOR_demo_number
+#undef FLAG_s
+#undef FLAG_b
+#undef FLAG_d
+#undef FLAG_h
+#endif
+
+// demo_scankey
+#undef OPTSTR_demo_scankey
+#define OPTSTR_demo_scankey 0
+#ifdef CLEANUP_demo_scankey
+#undef CLEANUP_demo_scankey
+#undef FOR_demo_scankey
+#endif
+
+// demo_utf8towc
+#undef OPTSTR_demo_utf8towc
+#define OPTSTR_demo_utf8towc 0
+#ifdef CLEANUP_demo_utf8towc
+#undef CLEANUP_demo_utf8towc
+#undef FOR_demo_utf8towc
+#endif
+
+// df HPkhit*a[-HPkh]
+#undef OPTSTR_df
+#define OPTSTR_df "HPkhit*a[-HPkh]"
+#ifdef CLEANUP_df
+#undef CLEANUP_df
+#undef FOR_df
+#undef FLAG_a
+#undef FLAG_t
+#undef FLAG_i
+#undef FLAG_h
+#undef FLAG_k
+#undef FLAG_P
+#undef FLAG_H
+#endif
+
+// dhcp V:H:F:x*r:O*A#<0=20T#<0=3t#<0=3s:p:i:SBRCaovqnbf
+#undef OPTSTR_dhcp
+#define OPTSTR_dhcp "V:H:F:x*r:O*A#<0=20T#<0=3t#<0=3s:p:i:SBRCaovqnbf"
+#ifdef CLEANUP_dhcp
+#undef CLEANUP_dhcp
+#undef FOR_dhcp
+#undef FLAG_f
+#undef FLAG_b
+#undef FLAG_n
+#undef FLAG_q
+#undef FLAG_v
+#undef FLAG_o
+#undef FLAG_a
+#undef FLAG_C
+#undef FLAG_R
+#undef FLAG_B
+#undef FLAG_S
+#undef FLAG_i
+#undef FLAG_p
+#undef FLAG_s
+#undef FLAG_t
+#undef FLAG_T
+#undef FLAG_A
+#undef FLAG_O
+#undef FLAG_r
+#undef FLAG_x
+#undef FLAG_F
+#undef FLAG_H
+#undef FLAG_V
+#endif
+
+// dhcp6 r:A#<0T#<0t#<0s:p:i:SRvqnbf
+#undef OPTSTR_dhcp6
+#define OPTSTR_dhcp6 "r:A#<0T#<0t#<0s:p:i:SRvqnbf"
+#ifdef CLEANUP_dhcp6
+#undef CLEANUP_dhcp6
+#undef FOR_dhcp6
+#undef FLAG_f
+#undef FLAG_b
+#undef FLAG_n
+#undef FLAG_q
+#undef FLAG_v
+#undef FLAG_R
+#undef FLAG_S
+#undef FLAG_i
+#undef FLAG_p
+#undef FLAG_s
+#undef FLAG_t
+#undef FLAG_T
+#undef FLAG_A
+#undef FLAG_r
+#endif
+
+// dhcpd >1P#<0>65535fi:S46[!46]
+#undef OPTSTR_dhcpd
+#define OPTSTR_dhcpd ">1P#<0>65535fi:S46[!46]"
+#ifdef CLEANUP_dhcpd
+#undef CLEANUP_dhcpd
+#undef FOR_dhcpd
+#undef FLAG_6
+#undef FLAG_4
+#undef FLAG_S
+#undef FLAG_i
+#undef FLAG_f
+#undef FLAG_P
+#endif
+
+// diff <2>2(color)B(ignore-blank-lines)d(minimal)b(ignore-space-change)ut(expand-tabs)w(ignore-all-space)i(ignore-case)T(initial-tab)s(report-identical-files)q(brief)a(text)L(label)*S(starting-file):N(new-file)r(recursive)U(unified)#<0=3
+#undef OPTSTR_diff
+#define OPTSTR_diff "<2>2(color)B(ignore-blank-lines)d(minimal)b(ignore-space-change)ut(expand-tabs)w(ignore-all-space)i(ignore-case)T(initial-tab)s(report-identical-files)q(brief)a(text)L(label)*S(starting-file):N(new-file)r(recursive)U(unified)#<0=3"
+#ifdef CLEANUP_diff
+#undef CLEANUP_diff
+#undef FOR_diff
+#undef FLAG_unified
+#undef FLAG_U
+#undef FLAG_recursive
+#undef FLAG_r
+#undef FLAG_new_file
+#undef FLAG_N
+#undef FLAG_starting_file
+#undef FLAG_S
+#undef FLAG_label
+#undef FLAG_L
+#undef FLAG_text
+#undef FLAG_a
+#undef FLAG_brief
+#undef FLAG_q
+#undef FLAG_report_identical_files
+#undef FLAG_s
+#undef FLAG_initial_tab
+#undef FLAG_T
+#undef FLAG_ignore_case
+#undef FLAG_i
+#undef FLAG_ignore_all_space
+#undef FLAG_w
+#undef FLAG_expand_tabs
+#undef FLAG_t
+#undef FLAG_u
+#undef FLAG_ignore_space_change
+#undef FLAG_b
+#undef FLAG_minimal
+#undef FLAG_d
+#undef FLAG_ignore_blank_lines
+#undef FLAG_B
+#undef FLAG_color
+#endif
+
+// dirname <1
+#undef OPTSTR_dirname
+#define OPTSTR_dirname "<1"
+#ifdef CLEANUP_dirname
+#undef CLEANUP_dirname
+#undef FOR_dirname
+#endif
+
+// dmesg w(follow)CSTtrs#<1n#c[!Ttr][!Cc][!Sw]
+#undef OPTSTR_dmesg
+#define OPTSTR_dmesg "w(follow)CSTtrs#<1n#c[!Ttr][!Cc][!Sw]"
+#ifdef CLEANUP_dmesg
+#undef CLEANUP_dmesg
+#undef FOR_dmesg
+#undef FLAG_c
+#undef FLAG_n
+#undef FLAG_s
+#undef FLAG_r
+#undef FLAG_t
+#undef FLAG_T
+#undef FLAG_S
+#undef FLAG_C
+#undef FLAG_follow
+#undef FLAG_w
+#endif
+
+// dos2unix
+#undef OPTSTR_dos2unix
+#define OPTSTR_dos2unix 0
+#ifdef CLEANUP_dos2unix
+#undef CLEANUP_dos2unix
+#undef FOR_dos2unix
+#endif
+
+// du d#<0=-1hmlcaHkKLsx[-HL][-kKmh]
+#undef OPTSTR_du
+#define OPTSTR_du "d#<0=-1hmlcaHkKLsx[-HL][-kKmh]"
+#ifdef CLEANUP_du
+#undef CLEANUP_du
+#undef FOR_du
+#undef FLAG_x
+#undef FLAG_s
+#undef FLAG_L
+#undef FLAG_K
+#undef FLAG_k
+#undef FLAG_H
+#undef FLAG_a
+#undef FLAG_c
+#undef FLAG_l
+#undef FLAG_m
+#undef FLAG_h
+#undef FLAG_d
+#endif
+
+// dumpleases >0arf:[!ar]
+#undef OPTSTR_dumpleases
+#define OPTSTR_dumpleases ">0arf:[!ar]"
+#ifdef CLEANUP_dumpleases
+#undef CLEANUP_dumpleases
+#undef FOR_dumpleases
+#undef FLAG_f
+#undef FLAG_r
+#undef FLAG_a
+#endif
+
+// echo ^?en
+#undef OPTSTR_echo
+#define OPTSTR_echo "^?en"
+#ifdef CLEANUP_echo
+#undef CLEANUP_echo
+#undef FOR_echo
+#undef FLAG_n
+#undef FLAG_e
+#endif
+
+// eject >1stT[!tT]
+#undef OPTSTR_eject
+#define OPTSTR_eject ">1stT[!tT]"
+#ifdef CLEANUP_eject
+#undef CLEANUP_eject
+#undef FOR_eject
+#undef FLAG_T
+#undef FLAG_t
+#undef FLAG_s
+#endif
+
+// env ^0iu*
+#undef OPTSTR_env
+#define OPTSTR_env "^0iu*"
+#ifdef CLEANUP_env
+#undef CLEANUP_env
+#undef FOR_env
+#undef FLAG_u
+#undef FLAG_i
+#undef FLAG_0
+#endif
+
+// exit
+#undef OPTSTR_exit
+#define OPTSTR_exit 0
+#ifdef CLEANUP_exit
+#undef CLEANUP_exit
+#undef FOR_exit
+#endif
+
+// expand t*
+#undef OPTSTR_expand
+#define OPTSTR_expand "t*"
+#ifdef CLEANUP_expand
+#undef CLEANUP_expand
+#undef FOR_expand
+#undef FLAG_t
+#endif
+
+// expr
+#undef OPTSTR_expr
+#define OPTSTR_expr 0
+#ifdef CLEANUP_expr
+#undef CLEANUP_expr
+#undef FOR_expr
+#endif
+
+// factor
+#undef OPTSTR_factor
+#define OPTSTR_factor 0
+#ifdef CLEANUP_factor
+#undef CLEANUP_factor
+#undef FOR_factor
+#endif
+
+// fallocate >1l#|o#
+#undef OPTSTR_fallocate
+#define OPTSTR_fallocate ">1l#|o#"
+#ifdef CLEANUP_fallocate
+#undef CLEANUP_fallocate
+#undef FOR_fallocate
+#undef FLAG_o
+#undef FLAG_l
+#endif
+
+// false
+#undef OPTSTR_false
+#define OPTSTR_false 0
+#ifdef CLEANUP_false
+#undef CLEANUP_false
+#undef FOR_false
+#endif
+
+// fdisk C#<0H#<0S#<0b#<512ul
+#undef OPTSTR_fdisk
+#define OPTSTR_fdisk "C#<0H#<0S#<0b#<512ul"
+#ifdef CLEANUP_fdisk
+#undef CLEANUP_fdisk
+#undef FOR_fdisk
+#undef FLAG_l
+#undef FLAG_u
+#undef FLAG_b
+#undef FLAG_S
+#undef FLAG_H
+#undef FLAG_C
+#endif
+
+// file <1hL[!hL]
+#undef OPTSTR_file
+#define OPTSTR_file "<1hL[!hL]"
+#ifdef CLEANUP_file
+#undef CLEANUP_file
+#undef FOR_file
+#undef FLAG_L
+#undef FLAG_h
+#endif
+
+// find ?^HL[-HL]
+#undef OPTSTR_find
+#define OPTSTR_find "?^HL[-HL]"
+#ifdef CLEANUP_find
+#undef CLEANUP_find
+#undef FOR_find
+#undef FLAG_L
+#undef FLAG_H
+#endif
+
+// flock <1>1nsux[-sux]
+#undef OPTSTR_flock
+#define OPTSTR_flock "<1>1nsux[-sux]"
+#ifdef CLEANUP_flock
+#undef CLEANUP_flock
+#undef FOR_flock
+#undef FLAG_x
+#undef FLAG_u
+#undef FLAG_s
+#undef FLAG_n
+#endif
+
+// fmt w#<0=75
+#undef OPTSTR_fmt
+#define OPTSTR_fmt "w#<0=75"
+#ifdef CLEANUP_fmt
+#undef CLEANUP_fmt
+#undef FOR_fmt
+#undef FLAG_w
+#endif
+
+// fold bsuw#<1
+#undef OPTSTR_fold
+#define OPTSTR_fold "bsuw#<1"
+#ifdef CLEANUP_fold
+#undef CLEANUP_fold
+#undef FOR_fold
+#undef FLAG_w
+#undef FLAG_u
+#undef FLAG_s
+#undef FLAG_b
+#endif
+
+// free htgmkb[!htgmkb]
+#undef OPTSTR_free
+#define OPTSTR_free "htgmkb[!htgmkb]"
+#ifdef CLEANUP_free
+#undef CLEANUP_free
+#undef FOR_free
+#undef FLAG_b
+#undef FLAG_k
+#undef FLAG_m
+#undef FLAG_g
+#undef FLAG_t
+#undef FLAG_h
+#endif
+
+// freeramdisk <1>1
+#undef OPTSTR_freeramdisk
+#define OPTSTR_freeramdisk "<1>1"
+#ifdef CLEANUP_freeramdisk
+#undef CLEANUP_freeramdisk
+#undef FOR_freeramdisk
+#endif
+
+// fsck ?t:ANPRTVsC#
+#undef OPTSTR_fsck
+#define OPTSTR_fsck "?t:ANPRTVsC#"
+#ifdef CLEANUP_fsck
+#undef CLEANUP_fsck
+#undef FOR_fsck
+#undef FLAG_C
+#undef FLAG_s
+#undef FLAG_V
+#undef FLAG_T
+#undef FLAG_R
+#undef FLAG_P
+#undef FLAG_N
+#undef FLAG_A
+#undef FLAG_t
+#endif
+
+// fsfreeze <1>1f|u|[!fu]
+#undef OPTSTR_fsfreeze
+#define OPTSTR_fsfreeze "<1>1f|u|[!fu]"
+#ifdef CLEANUP_fsfreeze
+#undef CLEANUP_fsfreeze
+#undef FOR_fsfreeze
+#undef FLAG_u
+#undef FLAG_f
+#endif
+
+// fstype <1
+#undef OPTSTR_fstype
+#define OPTSTR_fstype "<1"
+#ifdef CLEANUP_fstype
+#undef CLEANUP_fstype
+#undef FOR_fstype
+#endif
+
+// fsync <1d
+#undef OPTSTR_fsync
+#define OPTSTR_fsync "<1d"
+#ifdef CLEANUP_fsync
+#undef CLEANUP_fsync
+#undef FOR_fsync
+#undef FLAG_d
+#endif
+
+// ftpget <2>3P:cp:u:vgslLmMdD[-gs][!gslLmMdD][!clL]
+#undef OPTSTR_ftpget
+#define OPTSTR_ftpget "<2>3P:cp:u:vgslLmMdD[-gs][!gslLmMdD][!clL]"
+#ifdef CLEANUP_ftpget
+#undef CLEANUP_ftpget
+#undef FOR_ftpget
+#undef FLAG_D
+#undef FLAG_d
+#undef FLAG_M
+#undef FLAG_m
+#undef FLAG_L
+#undef FLAG_l
+#undef FLAG_s
+#undef FLAG_g
+#undef FLAG_v
+#undef FLAG_u
+#undef FLAG_p
+#undef FLAG_c
+#undef FLAG_P
+#endif
+
+// getconf >2al
+#undef OPTSTR_getconf
+#define OPTSTR_getconf ">2al"
+#ifdef CLEANUP_getconf
+#undef CLEANUP_getconf
+#undef FOR_getconf
+#undef FLAG_l
+#undef FLAG_a
+#endif
+
+// getenforce >0
+#undef OPTSTR_getenforce
+#define OPTSTR_getenforce ">0"
+#ifdef CLEANUP_getenforce
+#undef CLEANUP_getenforce
+#undef FOR_getenforce
+#endif
+
+// getfattr dhn:
+#undef OPTSTR_getfattr
+#define OPTSTR_getfattr "dhn:"
+#ifdef CLEANUP_getfattr
+#undef CLEANUP_getfattr
+#undef FOR_getfattr
+#undef FLAG_n
+#undef FLAG_h
+#undef FLAG_d
+#endif
+
+// getprop >2Z
+#undef OPTSTR_getprop
+#define OPTSTR_getprop ">2Z"
+#ifdef CLEANUP_getprop
+#undef CLEANUP_getprop
+#undef FOR_getprop
+#undef FLAG_Z
+#endif
+
+// getty <2t#<0H:I:l:f:iwnmLh
+#undef OPTSTR_getty
+#define OPTSTR_getty "<2t#<0H:I:l:f:iwnmLh"
+#ifdef CLEANUP_getty
+#undef CLEANUP_getty
+#undef FOR_getty
+#undef FLAG_h
+#undef FLAG_L
+#undef FLAG_m
+#undef FLAG_n
+#undef FLAG_w
+#undef FLAG_i
+#undef FLAG_f
+#undef FLAG_l
+#undef FLAG_I
+#undef FLAG_H
+#undef FLAG_t
+#endif
+
+// grep S(exclude)*M(include)*ZzEFHIabhinorsvwclqe*f*C#B#A#m#x[!wx][!EFw]
+#undef OPTSTR_grep
+#define OPTSTR_grep "S(exclude)*M(include)*ZzEFHIabhinorsvwclqe*f*C#B#A#m#x[!wx][!EFw]"
+#ifdef CLEANUP_grep
+#undef CLEANUP_grep
+#undef FOR_grep
+#undef FLAG_x
+#undef FLAG_m
+#undef FLAG_A
+#undef FLAG_B
+#undef FLAG_C
+#undef FLAG_f
+#undef FLAG_e
+#undef FLAG_q
+#undef FLAG_l
+#undef FLAG_c
+#undef FLAG_w
+#undef FLAG_v
+#undef FLAG_s
+#undef FLAG_r
+#undef FLAG_o
+#undef FLAG_n
+#undef FLAG_i
+#undef FLAG_h
+#undef FLAG_b
+#undef FLAG_a
+#undef FLAG_I
+#undef FLAG_H
+#undef FLAG_F
+#undef FLAG_E
+#undef FLAG_z
+#undef FLAG_Z
+#undef FLAG_include
+#undef FLAG_M
+#undef FLAG_exclude
+#undef FLAG_S
+#endif
+
+// groupadd <1>2g#<0S
+#undef OPTSTR_groupadd
+#define OPTSTR_groupadd "<1>2g#<0S"
+#ifdef CLEANUP_groupadd
+#undef CLEANUP_groupadd
+#undef FOR_groupadd
+#undef FLAG_S
+#undef FLAG_g
+#endif
+
+// groupdel <1>2
+#undef OPTSTR_groupdel
+#define OPTSTR_groupdel "<1>2"
+#ifdef CLEANUP_groupdel
+#undef CLEANUP_groupdel
+#undef FOR_groupdel
+#endif
+
+// groups
+#undef OPTSTR_groups
+#define OPTSTR_groups 0
+#ifdef CLEANUP_groups
+#undef CLEANUP_groups
+#undef FOR_groups
+#endif
+
+// gunzip cdfk123456789[-123456789]
+#undef OPTSTR_gunzip
+#define OPTSTR_gunzip "cdfk123456789[-123456789]"
+#ifdef CLEANUP_gunzip
+#undef CLEANUP_gunzip
+#undef FOR_gunzip
+#undef FLAG_9
+#undef FLAG_8
+#undef FLAG_7
+#undef FLAG_6
+#undef FLAG_5
+#undef FLAG_4
+#undef FLAG_3
+#undef FLAG_2
+#undef FLAG_1
+#undef FLAG_k
+#undef FLAG_f
+#undef FLAG_d
+#undef FLAG_c
+#endif
+
+// gzip cdfk123456789[-123456789]
+#undef OPTSTR_gzip
+#define OPTSTR_gzip "cdfk123456789[-123456789]"
+#ifdef CLEANUP_gzip
+#undef CLEANUP_gzip
+#undef FOR_gzip
+#undef FLAG_9
+#undef FLAG_8
+#undef FLAG_7
+#undef FLAG_6
+#undef FLAG_5
+#undef FLAG_4
+#undef FLAG_3
+#undef FLAG_2
+#undef FLAG_1
+#undef FLAG_k
+#undef FLAG_f
+#undef FLAG_d
+#undef FLAG_c
+#endif
+
+// head ?n#<0=10c#<0qv[-nc]
+#undef OPTSTR_head
+#define OPTSTR_head "?n#<0=10c#<0qv[-nc]"
+#ifdef CLEANUP_head
+#undef CLEANUP_head
+#undef FOR_head
+#undef FLAG_v
+#undef FLAG_q
+#undef FLAG_c
+#undef FLAG_n
+#endif
+
+// hello
+#undef OPTSTR_hello
+#define OPTSTR_hello 0
+#ifdef CLEANUP_hello
+#undef CLEANUP_hello
+#undef FOR_hello
+#endif
+
+// help ah
+#undef OPTSTR_help
+#define OPTSTR_help "ah"
+#ifdef CLEANUP_help
+#undef CLEANUP_help
+#undef FOR_help
+#undef FLAG_h
+#undef FLAG_a
+#endif
+
+// hexedit <1>1r
+#undef OPTSTR_hexedit
+#define OPTSTR_hexedit "<1>1r"
+#ifdef CLEANUP_hexedit
+#undef CLEANUP_hexedit
+#undef FOR_hexedit
+#undef FLAG_r
+#endif
+
+// host <1>2avt:
+#undef OPTSTR_host
+#define OPTSTR_host "<1>2avt:"
+#ifdef CLEANUP_host
+#undef CLEANUP_host
+#undef FOR_host
+#undef FLAG_t
+#undef FLAG_v
+#undef FLAG_a
+#endif
+
+// hostid >0
+#undef OPTSTR_hostid
+#define OPTSTR_hostid ">0"
+#ifdef CLEANUP_hostid
+#undef CLEANUP_hostid
+#undef FOR_hostid
+#endif
+
+// hostname >1bdsfF:[!bdsf]
+#undef OPTSTR_hostname
+#define OPTSTR_hostname ">1bdsfF:[!bdsf]"
+#ifdef CLEANUP_hostname
+#undef CLEANUP_hostname
+#undef FOR_hostname
+#undef FLAG_F
+#undef FLAG_f
+#undef FLAG_s
+#undef FLAG_d
+#undef FLAG_b
+#endif
+
+// hwclock >0(fast)f(rtc):u(utc)l(localtime)t(systz)s(hctosys)r(show)w(systohc)[-ul][!rtsw]
+#undef OPTSTR_hwclock
+#define OPTSTR_hwclock ">0(fast)f(rtc):u(utc)l(localtime)t(systz)s(hctosys)r(show)w(systohc)[-ul][!rtsw]"
+#ifdef CLEANUP_hwclock
+#undef CLEANUP_hwclock
+#undef FOR_hwclock
+#undef FLAG_systohc
+#undef FLAG_w
+#undef FLAG_show
+#undef FLAG_r
+#undef FLAG_hctosys
+#undef FLAG_s
+#undef FLAG_systz
+#undef FLAG_t
+#undef FLAG_localtime
+#undef FLAG_l
+#undef FLAG_utc
+#undef FLAG_u
+#undef FLAG_rtc
+#undef FLAG_f
+#undef FLAG_fast
+#endif
+
+// i2cdetect >3aFly
+#undef OPTSTR_i2cdetect
+#define OPTSTR_i2cdetect ">3aFly"
+#ifdef CLEANUP_i2cdetect
+#undef CLEANUP_i2cdetect
+#undef FOR_i2cdetect
+#undef FLAG_y
+#undef FLAG_l
+#undef FLAG_F
+#undef FLAG_a
+#endif
+
+// i2cdump <2>2fy
+#undef OPTSTR_i2cdump
+#define OPTSTR_i2cdump "<2>2fy"
+#ifdef CLEANUP_i2cdump
+#undef CLEANUP_i2cdump
+#undef FOR_i2cdump
+#undef FLAG_y
+#undef FLAG_f
+#endif
+
+// i2cget <3>3fy
+#undef OPTSTR_i2cget
+#define OPTSTR_i2cget "<3>3fy"
+#ifdef CLEANUP_i2cget
+#undef CLEANUP_i2cget
+#undef FOR_i2cget
+#undef FLAG_y
+#undef FLAG_f
+#endif
+
+// i2cset <4fy
+#undef OPTSTR_i2cset
+#define OPTSTR_i2cset "<4fy"
+#ifdef CLEANUP_i2cset
+#undef CLEANUP_i2cset
+#undef FOR_i2cset
+#undef FLAG_y
+#undef FLAG_f
+#endif
+
+// iconv cst:f:
+#undef OPTSTR_iconv
+#define OPTSTR_iconv "cst:f:"
+#ifdef CLEANUP_iconv
+#undef CLEANUP_iconv
+#undef FOR_iconv
+#undef FLAG_f
+#undef FLAG_t
+#undef FLAG_s
+#undef FLAG_c
+#endif
+
+// id >1ZnGgru[!ZGgu]
+#undef OPTSTR_id
+#define OPTSTR_id ">1ZnGgru[!ZGgu]"
+#ifdef CLEANUP_id
+#undef CLEANUP_id
+#undef FOR_id
+#undef FLAG_u
+#undef FLAG_r
+#undef FLAG_g
+#undef FLAG_G
+#undef FLAG_n
+#undef FLAG_Z
+#endif
+
+// ifconfig ^?aS
+#undef OPTSTR_ifconfig
+#define OPTSTR_ifconfig "^?aS"
+#ifdef CLEANUP_ifconfig
+#undef CLEANUP_ifconfig
+#undef FOR_ifconfig
+#undef FLAG_S
+#undef FLAG_a
+#endif
+
+// init
+#undef OPTSTR_init
+#define OPTSTR_init 0
+#ifdef CLEANUP_init
+#undef CLEANUP_init
+#undef FOR_init
+#endif
+
+// inotifyd <2
+#undef OPTSTR_inotifyd
+#define OPTSTR_inotifyd "<2"
+#ifdef CLEANUP_inotifyd
+#undef CLEANUP_inotifyd
+#undef FOR_inotifyd
+#endif
+
+// insmod <1
+#undef OPTSTR_insmod
+#define OPTSTR_insmod "<1"
+#ifdef CLEANUP_insmod
+#undef CLEANUP_insmod
+#undef FOR_insmod
+#endif
+
+// install <1cdDpsvm:o:g:
+#undef OPTSTR_install
+#define OPTSTR_install "<1cdDpsvm:o:g:"
+#ifdef CLEANUP_install
+#undef CLEANUP_install
+#undef FOR_install
+#undef FLAG_g
+#undef FLAG_o
+#undef FLAG_m
+#undef FLAG_v
+#undef FLAG_s
+#undef FLAG_p
+#undef FLAG_D
+#undef FLAG_d
+#undef FLAG_c
+#endif
+
+// ionice ^tc#<0>3=2n#<0>7=5p#
+#undef OPTSTR_ionice
+#define OPTSTR_ionice "^tc#<0>3=2n#<0>7=5p#"
+#ifdef CLEANUP_ionice
+#undef CLEANUP_ionice
+#undef FOR_ionice
+#undef FLAG_p
+#undef FLAG_n
+#undef FLAG_c
+#undef FLAG_t
+#endif
+
+// iorenice ?<1>3
+#undef OPTSTR_iorenice
+#define OPTSTR_iorenice "?<1>3"
+#ifdef CLEANUP_iorenice
+#undef CLEANUP_iorenice
+#undef FOR_iorenice
+#endif
+
+// iotop >0AaKOHk*o*p*u*s#<1=7d%<100=3000m#n#<1bq
+#undef OPTSTR_iotop
+#define OPTSTR_iotop ">0AaKOHk*o*p*u*s#<1=7d%<100=3000m#n#<1bq"
+#ifdef CLEANUP_iotop
+#undef CLEANUP_iotop
+#undef FOR_iotop
+#undef FLAG_q
+#undef FLAG_b
+#undef FLAG_n
+#undef FLAG_m
+#undef FLAG_d
+#undef FLAG_s
+#undef FLAG_u
+#undef FLAG_p
+#undef FLAG_o
+#undef FLAG_k
+#undef FLAG_H
+#undef FLAG_O
+#undef FLAG_K
+#undef FLAG_a
+#undef FLAG_A
+#endif
+
+// ip
+#undef OPTSTR_ip
+#define OPTSTR_ip 0
+#ifdef CLEANUP_ip
+#undef CLEANUP_ip
+#undef FOR_ip
+#endif
+
+// ipcrm m*M*s*S*q*Q*
+#undef OPTSTR_ipcrm
+#define OPTSTR_ipcrm "m*M*s*S*q*Q*"
+#ifdef CLEANUP_ipcrm
+#undef CLEANUP_ipcrm
+#undef FOR_ipcrm
+#undef FLAG_Q
+#undef FLAG_q
+#undef FLAG_S
+#undef FLAG_s
+#undef FLAG_M
+#undef FLAG_m
+#endif
+
+// ipcs acptulsqmi#
+#undef OPTSTR_ipcs
+#define OPTSTR_ipcs "acptulsqmi#"
+#ifdef CLEANUP_ipcs
+#undef CLEANUP_ipcs
+#undef FOR_ipcs
+#undef FLAG_i
+#undef FLAG_m
+#undef FLAG_q
+#undef FLAG_s
+#undef FLAG_l
+#undef FLAG_u
+#undef FLAG_t
+#undef FLAG_p
+#undef FLAG_c
+#undef FLAG_a
+#endif
+
+// kill ?ls:
+#undef OPTSTR_kill
+#define OPTSTR_kill "?ls: "
+#ifdef CLEANUP_kill
+#undef CLEANUP_kill
+#undef FOR_kill
+#undef FLAG_s
+#undef FLAG_l
+#endif
+
+// killall ?s:lqvi
+#undef OPTSTR_killall
+#define OPTSTR_killall "?s:lqvi"
+#ifdef CLEANUP_killall
+#undef CLEANUP_killall
+#undef FOR_killall
+#undef FLAG_i
+#undef FLAG_v
+#undef FLAG_q
+#undef FLAG_l
+#undef FLAG_s
+#endif
+
+// killall5 ?o*ls: [!lo][!ls]
+#undef OPTSTR_killall5
+#define OPTSTR_killall5 "?o*ls: [!lo][!ls]"
+#ifdef CLEANUP_killall5
+#undef CLEANUP_killall5
+#undef FOR_killall5
+#undef FLAG_s
+#undef FLAG_l
+#undef FLAG_o
+#endif
+
+// klogd c#<1>8n
+#undef OPTSTR_klogd
+#define OPTSTR_klogd "c#<1>8n"
+#ifdef CLEANUP_klogd
+#undef CLEANUP_klogd
+#undef FOR_klogd
+#undef FLAG_n
+#undef FLAG_c
+#endif
+
+// last f:W
+#undef OPTSTR_last
+#define OPTSTR_last "f:W"
+#ifdef CLEANUP_last
+#undef CLEANUP_last
+#undef FOR_last
+#undef FLAG_W
+#undef FLAG_f
+#endif
+
+// link <2>2
+#undef OPTSTR_link
+#define OPTSTR_link "<2>2"
+#ifdef CLEANUP_link
+#undef CLEANUP_link
+#undef FOR_link
+#endif
+
+// ln <1vnfs
+#undef OPTSTR_ln
+#define OPTSTR_ln "<1vnfs"
+#ifdef CLEANUP_ln
+#undef CLEANUP_ln
+#undef FOR_ln
+#undef FLAG_s
+#undef FLAG_f
+#undef FLAG_n
+#undef FLAG_v
+#endif
+
+// load_policy <1>1
+#undef OPTSTR_load_policy
+#define OPTSTR_load_policy "<1>1"
+#ifdef CLEANUP_load_policy
+#undef CLEANUP_load_policy
+#undef FOR_load_policy
+#endif
+
+// log <1p:t:
+#undef OPTSTR_log
+#define OPTSTR_log "<1p:t:"
+#ifdef CLEANUP_log
+#undef CLEANUP_log
+#undef FOR_log
+#undef FLAG_t
+#undef FLAG_p
+#endif
+
+// logger st:p:
+#undef OPTSTR_logger
+#define OPTSTR_logger "st:p:"
+#ifdef CLEANUP_logger
+#undef CLEANUP_logger
+#undef FOR_logger
+#undef FLAG_p
+#undef FLAG_t
+#undef FLAG_s
+#endif
+
+// login >1f:ph: >1f:ph:
+#undef OPTSTR_login
+#define OPTSTR_login ">1f:ph:"
+#ifdef CLEANUP_login
+#undef CLEANUP_login
+#undef FOR_login
+#undef FLAG_h
+#undef FLAG_p
+#undef FLAG_f
+#endif
+
+// logname >0
+#undef OPTSTR_logname
+#define OPTSTR_logname ">0"
+#ifdef CLEANUP_logname
+#undef CLEANUP_logname
+#undef FOR_logname
+#endif
+
+// losetup >2S(sizelimit)#s(show)ro#j:fdca[!afj]
+#undef OPTSTR_losetup
+#define OPTSTR_losetup ">2S(sizelimit)#s(show)ro#j:fdca[!afj]"
+#ifdef CLEANUP_losetup
+#undef CLEANUP_losetup
+#undef FOR_losetup
+#undef FLAG_a
+#undef FLAG_c
+#undef FLAG_d
+#undef FLAG_f
+#undef FLAG_j
+#undef FLAG_o
+#undef FLAG_r
+#undef FLAG_show
+#undef FLAG_s
+#undef FLAG_sizelimit
+#undef FLAG_S
+#endif
+
+// ls (color):;(full-time)(show-control-chars)ZgoACFHLRSabcdfhikl@mnpqrstux1[-Cxm1][-Cxml][-Cxmo][-Cxmg][-cu][-ftS][-HL][!qb]
+#undef OPTSTR_ls
+#define OPTSTR_ls "(color):;(full-time)(show-control-chars)ZgoACFHLRSabcdfhikl@mnpqrstux1[-Cxm1][-Cxml][-Cxmo][-Cxmg][-cu][-ftS][-HL][!qb]"
+#ifdef CLEANUP_ls
+#undef CLEANUP_ls
+#undef FOR_ls
+#undef FLAG_1
+#undef FLAG_x
+#undef FLAG_u
+#undef FLAG_t
+#undef FLAG_s
+#undef FLAG_r
+#undef FLAG_q
+#undef FLAG_p
+#undef FLAG_n
+#undef FLAG_m
+#undef FLAG_l
+#undef FLAG_k
+#undef FLAG_i
+#undef FLAG_h
+#undef FLAG_f
+#undef FLAG_d
+#undef FLAG_c
+#undef FLAG_b
+#undef FLAG_a
+#undef FLAG_S
+#undef FLAG_R
+#undef FLAG_L
+#undef FLAG_H
+#undef FLAG_F
+#undef FLAG_C
+#undef FLAG_A
+#undef FLAG_o
+#undef FLAG_g
+#undef FLAG_Z
+#undef FLAG_show_control_chars
+#undef FLAG_full_time
+#undef FLAG_color
+#endif
+
+// lsattr vldaR
+#undef OPTSTR_lsattr
+#define OPTSTR_lsattr "vldaR"
+#ifdef CLEANUP_lsattr
+#undef CLEANUP_lsattr
+#undef FOR_lsattr
+#undef FLAG_R
+#undef FLAG_a
+#undef FLAG_d
+#undef FLAG_l
+#undef FLAG_v
+#endif
+
+// lsmod
+#undef OPTSTR_lsmod
+#define OPTSTR_lsmod 0
+#ifdef CLEANUP_lsmod
+#undef CLEANUP_lsmod
+#undef FOR_lsmod
+#endif
+
+// lsof lp*t
+#undef OPTSTR_lsof
+#define OPTSTR_lsof "lp*t"
+#ifdef CLEANUP_lsof
+#undef CLEANUP_lsof
+#undef FOR_lsof
+#undef FLAG_t
+#undef FLAG_p
+#undef FLAG_l
+#endif
+
+// lspci emkn@i:
+#undef OPTSTR_lspci
+#define OPTSTR_lspci "emkn@i:"
+#ifdef CLEANUP_lspci
+#undef CLEANUP_lspci
+#undef FOR_lspci
+#undef FLAG_i
+#undef FLAG_n
+#undef FLAG_k
+#undef FLAG_m
+#undef FLAG_e
+#endif
+
+// lsusb
+#undef OPTSTR_lsusb
+#define OPTSTR_lsusb 0
+#ifdef CLEANUP_lsusb
+#undef CLEANUP_lsusb
+#undef FOR_lsusb
+#endif
+
+// makedevs <1>1d:
+#undef OPTSTR_makedevs
+#define OPTSTR_makedevs "<1>1d:"
+#ifdef CLEANUP_makedevs
+#undef CLEANUP_makedevs
+#undef FOR_makedevs
+#undef FLAG_d
+#endif
+
+// md5sum bc*[!bc]
+#undef OPTSTR_md5sum
+#define OPTSTR_md5sum "bc*[!bc]"
+#ifdef CLEANUP_md5sum
+#undef CLEANUP_md5sum
+#undef FOR_md5sum
+#undef FLAG_c
+#undef FLAG_b
+#endif
+
+// mdev s
+#undef OPTSTR_mdev
+#define OPTSTR_mdev "s"
+#ifdef CLEANUP_mdev
+#undef CLEANUP_mdev
+#undef FOR_mdev
+#undef FLAG_s
+#endif
+
+// microcom <1>1s:X
+#undef OPTSTR_microcom
+#define OPTSTR_microcom "<1>1s:X"
+#ifdef CLEANUP_microcom
+#undef CLEANUP_microcom
+#undef FOR_microcom
+#undef FLAG_X
+#undef FLAG_s
+#endif
+
+// mix c:d:l#r#
+#undef OPTSTR_mix
+#define OPTSTR_mix "c:d:l#r#"
+#ifdef CLEANUP_mix
+#undef CLEANUP_mix
+#undef FOR_mix
+#undef FLAG_r
+#undef FLAG_l
+#undef FLAG_d
+#undef FLAG_c
+#endif
+
+// mkdir <1Z:vp(parent)(parents)m:
+#undef OPTSTR_mkdir
+#define OPTSTR_mkdir "<1Z:vp(parent)(parents)m:"
+#ifdef CLEANUP_mkdir
+#undef CLEANUP_mkdir
+#undef FOR_mkdir
+#undef FLAG_m
+#undef FLAG_parents
+#undef FLAG_parent
+#undef FLAG_p
+#undef FLAG_v
+#undef FLAG_Z
+#endif
+
+// mke2fs <1>2g:Fnqm#N#i#b#
+#undef OPTSTR_mke2fs
+#define OPTSTR_mke2fs "<1>2g:Fnqm#N#i#b#"
+#ifdef CLEANUP_mke2fs
+#undef CLEANUP_mke2fs
+#undef FOR_mke2fs
+#undef FLAG_b
+#undef FLAG_i
+#undef FLAG_N
+#undef FLAG_m
+#undef FLAG_q
+#undef FLAG_n
+#undef FLAG_F
+#undef FLAG_g
+#endif
+
+// mkfifo <1Z:m:
+#undef OPTSTR_mkfifo
+#define OPTSTR_mkfifo "<1Z:m:"
+#ifdef CLEANUP_mkfifo
+#undef CLEANUP_mkfifo
+#undef FOR_mkfifo
+#undef FLAG_m
+#undef FLAG_Z
+#endif
+
+// mknod <2>4m(mode):Z:
+#undef OPTSTR_mknod
+#define OPTSTR_mknod "<2>4m(mode):Z:"
+#ifdef CLEANUP_mknod
+#undef CLEANUP_mknod
+#undef FOR_mknod
+#undef FLAG_Z
+#undef FLAG_mode
+#undef FLAG_m
+#endif
+
+// mkpasswd >2S:m:P#=0<0
+#undef OPTSTR_mkpasswd
+#define OPTSTR_mkpasswd ">2S:m:P#=0<0"
+#ifdef CLEANUP_mkpasswd
+#undef CLEANUP_mkpasswd
+#undef FOR_mkpasswd
+#undef FLAG_P
+#undef FLAG_m
+#undef FLAG_S
+#endif
+
+// mkswap <1>1L:
+#undef OPTSTR_mkswap
+#define OPTSTR_mkswap "<1>1L:"
+#ifdef CLEANUP_mkswap
+#undef CLEANUP_mkswap
+#undef FOR_mkswap
+#undef FLAG_L
+#endif
+
+// mktemp >1uqd(directory)p(tmpdir):
+#undef OPTSTR_mktemp
+#define OPTSTR_mktemp ">1uqd(directory)p(tmpdir):"
+#ifdef CLEANUP_mktemp
+#undef CLEANUP_mktemp
+#undef FOR_mktemp
+#undef FLAG_tmpdir
+#undef FLAG_p
+#undef FLAG_directory
+#undef FLAG_d
+#undef FLAG_q
+#undef FLAG_u
+#endif
+
+// modinfo <1b:k:F:0
+#undef OPTSTR_modinfo
+#define OPTSTR_modinfo "<1b:k:F:0"
+#ifdef CLEANUP_modinfo
+#undef CLEANUP_modinfo
+#undef FOR_modinfo
+#undef FLAG_0
+#undef FLAG_F
+#undef FLAG_k
+#undef FLAG_b
+#endif
+
+// modprobe alrqvsDbd*
+#undef OPTSTR_modprobe
+#define OPTSTR_modprobe "alrqvsDbd*"
+#ifdef CLEANUP_modprobe
+#undef CLEANUP_modprobe
+#undef FOR_modprobe
+#undef FLAG_d
+#undef FLAG_b
+#undef FLAG_D
+#undef FLAG_s
+#undef FLAG_v
+#undef FLAG_q
+#undef FLAG_r
+#undef FLAG_l
+#undef FLAG_a
+#endif
+
+// more
+#undef OPTSTR_more
+#define OPTSTR_more 0
+#ifdef CLEANUP_more
+#undef CLEANUP_more
+#undef FOR_more
+#endif
+
+// mount ?O:afnrvwt:o*[-rw]
+#undef OPTSTR_mount
+#define OPTSTR_mount "?O:afnrvwt:o*[-rw]"
+#ifdef CLEANUP_mount
+#undef CLEANUP_mount
+#undef FOR_mount
+#undef FLAG_o
+#undef FLAG_t
+#undef FLAG_w
+#undef FLAG_v
+#undef FLAG_r
+#undef FLAG_n
+#undef FLAG_f
+#undef FLAG_a
+#undef FLAG_O
+#endif
+
+// mountpoint <1qdx[-dx]
+#undef OPTSTR_mountpoint
+#define OPTSTR_mountpoint "<1qdx[-dx]"
+#ifdef CLEANUP_mountpoint
+#undef CLEANUP_mountpoint
+#undef FOR_mountpoint
+#undef FLAG_x
+#undef FLAG_d
+#undef FLAG_q
+#endif
+
+// mv <2vnF(remove-destination)fi[-ni]
+#undef OPTSTR_mv
+#define OPTSTR_mv "<2vnF(remove-destination)fi[-ni]"
+#ifdef CLEANUP_mv
+#undef CLEANUP_mv
+#undef FOR_mv
+#undef FLAG_i
+#undef FLAG_f
+#undef FLAG_remove_destination
+#undef FLAG_F
+#undef FLAG_n
+#undef FLAG_v
+#endif
+
+// nbd_client <3>3ns
+#undef OPTSTR_nbd_client
+#define OPTSTR_nbd_client "<3>3ns"
+#ifdef CLEANUP_nbd_client
+#undef CLEANUP_nbd_client
+#undef FOR_nbd_client
+#undef FLAG_s
+#undef FLAG_n
+#endif
+
+// netcat ^tlLw#<1W#<1p#<1>65535q#<1s:f:[!tlL][!Lw]
+#undef OPTSTR_netcat
+#define OPTSTR_netcat "^tlLw#<1W#<1p#<1>65535q#<1s:f:[!tlL][!Lw]"
+#ifdef CLEANUP_netcat
+#undef CLEANUP_netcat
+#undef FOR_netcat
+#undef FLAG_f
+#undef FLAG_s
+#undef FLAG_q
+#undef FLAG_p
+#undef FLAG_W
+#undef FLAG_w
+#undef FLAG_L
+#undef FLAG_l
+#undef FLAG_t
+#endif
+
+// netstat pWrxwutneal
+#undef OPTSTR_netstat
+#define OPTSTR_netstat "pWrxwutneal"
+#ifdef CLEANUP_netstat
+#undef CLEANUP_netstat
+#undef FOR_netstat
+#undef FLAG_l
+#undef FLAG_a
+#undef FLAG_e
+#undef FLAG_n
+#undef FLAG_t
+#undef FLAG_u
+#undef FLAG_w
+#undef FLAG_x
+#undef FLAG_r
+#undef FLAG_W
+#undef FLAG_p
+#endif
+
+// nice ^<1n#
+#undef OPTSTR_nice
+#define OPTSTR_nice "^<1n#"
+#ifdef CLEANUP_nice
+#undef CLEANUP_nice
+#undef FOR_nice
+#undef FLAG_n
+#endif
+
+// nl v#<1=1l#w#<0=6Eb:n:s:
+#undef OPTSTR_nl
+#define OPTSTR_nl "v#<1=1l#w#<0=6Eb:n:s:"
+#ifdef CLEANUP_nl
+#undef CLEANUP_nl
+#undef FOR_nl
+#undef FLAG_s
+#undef FLAG_n
+#undef FLAG_b
+#undef FLAG_E
+#undef FLAG_w
+#undef FLAG_l
+#undef FLAG_v
+#endif
+
+// nohup <1^
+#undef OPTSTR_nohup
+#define OPTSTR_nohup "<1^"
+#ifdef CLEANUP_nohup
+#undef CLEANUP_nohup
+#undef FOR_nohup
+#endif
+
+// nproc (all)
+#undef OPTSTR_nproc
+#define OPTSTR_nproc "(all)"
+#ifdef CLEANUP_nproc
+#undef CLEANUP_nproc
+#undef FOR_nproc
+#undef FLAG_all
+#endif
+
+// nsenter <1F(no-fork)t#<1(target)i:(ipc);m:(mount);n:(net);p:(pid);u:(uts);U:(user);
+#undef OPTSTR_nsenter
+#define OPTSTR_nsenter "<1F(no-fork)t#<1(target)i:(ipc);m:(mount);n:(net);p:(pid);u:(uts);U:(user);"
+#ifdef CLEANUP_nsenter
+#undef CLEANUP_nsenter
+#undef FOR_nsenter
+#undef FLAG_user
+#undef FLAG_U
+#undef FLAG_uts
+#undef FLAG_u
+#undef FLAG_pid
+#undef FLAG_p
+#undef FLAG_net
+#undef FLAG_n
+#undef FLAG_mount
+#undef FLAG_m
+#undef FLAG_ipc
+#undef FLAG_i
+#undef FLAG_target
+#undef FLAG_t
+#undef FLAG_no_fork
+#undef FLAG_F
+#endif
+
+// od j#vw#<1=16N#xsodcbA:t*
+#undef OPTSTR_od
+#define OPTSTR_od "j#vw#<1=16N#xsodcbA:t*"
+#ifdef CLEANUP_od
+#undef CLEANUP_od
+#undef FOR_od
+#undef FLAG_t
+#undef FLAG_A
+#undef FLAG_b
+#undef FLAG_c
+#undef FLAG_d
+#undef FLAG_o
+#undef FLAG_s
+#undef FLAG_x
+#undef FLAG_N
+#undef FLAG_w
+#undef FLAG_v
+#undef FLAG_j
+#endif
+
+// oneit ^<1nc:p3[!pn]
+#undef OPTSTR_oneit
+#define OPTSTR_oneit "^<1nc:p3[!pn]"
+#ifdef CLEANUP_oneit
+#undef CLEANUP_oneit
+#undef FOR_oneit
+#undef FLAG_3
+#undef FLAG_p
+#undef FLAG_c
+#undef FLAG_n
+#endif
+
+// openvt c#<1>63sw
+#undef OPTSTR_openvt
+#define OPTSTR_openvt "c#<1>63sw"
+#ifdef CLEANUP_openvt
+#undef CLEANUP_openvt
+#undef FOR_openvt
+#undef FLAG_w
+#undef FLAG_s
+#undef FLAG_c
+#endif
+
+// partprobe <1
+#undef OPTSTR_partprobe
+#define OPTSTR_partprobe "<1"
+#ifdef CLEANUP_partprobe
+#undef CLEANUP_partprobe
+#undef FOR_partprobe
+#endif
+
+// passwd >1a:dlu
+#undef OPTSTR_passwd
+#define OPTSTR_passwd ">1a:dlu"
+#ifdef CLEANUP_passwd
+#undef CLEANUP_passwd
+#undef FOR_passwd
+#undef FLAG_u
+#undef FLAG_l
+#undef FLAG_d
+#undef FLAG_a
+#endif
+
+// paste d:s
+#undef OPTSTR_paste
+#define OPTSTR_paste "d:s"
+#ifdef CLEANUP_paste
+#undef CLEANUP_paste
+#undef FOR_paste
+#undef FLAG_s
+#undef FLAG_d
+#endif
+
+// patch (dry-run)xulp#d:i:R
+#undef OPTSTR_patch
+#define OPTSTR_patch "(dry-run)xulp#d:i:R"
+#ifdef CLEANUP_patch
+#undef CLEANUP_patch
+#undef FOR_patch
+#undef FLAG_R
+#undef FLAG_i
+#undef FLAG_d
+#undef FLAG_p
+#undef FLAG_l
+#undef FLAG_u
+#undef FLAG_x
+#undef FLAG_dry_run
+#endif
+
+// pgrep ?cld:u*U*t*s*P*g*G*fnovxL:[-no]
+#undef OPTSTR_pgrep
+#define OPTSTR_pgrep "?cld:u*U*t*s*P*g*G*fnovxL:[-no]"
+#ifdef CLEANUP_pgrep
+#undef CLEANUP_pgrep
+#undef FOR_pgrep
+#undef FLAG_L
+#undef FLAG_x
+#undef FLAG_v
+#undef FLAG_o
+#undef FLAG_n
+#undef FLAG_f
+#undef FLAG_G
+#undef FLAG_g
+#undef FLAG_P
+#undef FLAG_s
+#undef FLAG_t
+#undef FLAG_U
+#undef FLAG_u
+#undef FLAG_d
+#undef FLAG_l
+#undef FLAG_c
+#endif
+
+// pidof <1so:
+#undef OPTSTR_pidof
+#define OPTSTR_pidof "<1so:"
+#ifdef CLEANUP_pidof
+#undef CLEANUP_pidof
+#undef FOR_pidof
+#undef FLAG_o
+#undef FLAG_s
+#endif
+
+// ping <1>1m#t#<0>255=64c#<0=3s#<0>4088=56i%W#<0=3w#<0qf46I:[-46]
+#undef OPTSTR_ping
+#define OPTSTR_ping "<1>1m#t#<0>255=64c#<0=3s#<0>4088=56i%W#<0=3w#<0qf46I:[-46]"
+#ifdef CLEANUP_ping
+#undef CLEANUP_ping
+#undef FOR_ping
+#undef FLAG_I
+#undef FLAG_6
+#undef FLAG_4
+#undef FLAG_f
+#undef FLAG_q
+#undef FLAG_w
+#undef FLAG_W
+#undef FLAG_i
+#undef FLAG_s
+#undef FLAG_c
+#undef FLAG_t
+#undef FLAG_m
+#endif
+
+// pivot_root <2>2
+#undef OPTSTR_pivot_root
+#define OPTSTR_pivot_root "<2>2"
+#ifdef CLEANUP_pivot_root
+#undef CLEANUP_pivot_root
+#undef FOR_pivot_root
+#endif
+
+// pkill ?Vu*U*t*s*P*g*G*fnovxl:[-no]
+#undef OPTSTR_pkill
+#define OPTSTR_pkill "?Vu*U*t*s*P*g*G*fnovxl:[-no]"
+#ifdef CLEANUP_pkill
+#undef CLEANUP_pkill
+#undef FOR_pkill
+#undef FLAG_l
+#undef FLAG_x
+#undef FLAG_v
+#undef FLAG_o
+#undef FLAG_n
+#undef FLAG_f
+#undef FLAG_G
+#undef FLAG_g
+#undef FLAG_P
+#undef FLAG_s
+#undef FLAG_t
+#undef FLAG_U
+#undef FLAG_u
+#undef FLAG_V
+#endif
+
+// pmap <1xq
+#undef OPTSTR_pmap
+#define OPTSTR_pmap "<1xq"
+#ifdef CLEANUP_pmap
+#undef CLEANUP_pmap
+#undef FOR_pmap
+#undef FLAG_q
+#undef FLAG_x
+#endif
+
+// printenv 0(null)
+#undef OPTSTR_printenv
+#define OPTSTR_printenv "0(null)"
+#ifdef CLEANUP_printenv
+#undef CLEANUP_printenv
+#undef FOR_printenv
+#undef FLAG_null
+#undef FLAG_0
+#endif
+
+// printf <1?^
+#undef OPTSTR_printf
+#define OPTSTR_printf "<1?^"
+#ifdef CLEANUP_printf
+#undef CLEANUP_printf
+#undef FOR_printf
+#endif
+
+// ps k(sort)*P(ppid)*aAdeflMno*O*p(pid)*s*t*Tu*U*g*G*wZ[!ol][+Ae][!oO]
+#undef OPTSTR_ps
+#define OPTSTR_ps "k(sort)*P(ppid)*aAdeflMno*O*p(pid)*s*t*Tu*U*g*G*wZ[!ol][+Ae][!oO]"
+#ifdef CLEANUP_ps
+#undef CLEANUP_ps
+#undef FOR_ps
+#undef FLAG_Z
+#undef FLAG_w
+#undef FLAG_G
+#undef FLAG_g
+#undef FLAG_U
+#undef FLAG_u
+#undef FLAG_T
+#undef FLAG_t
+#undef FLAG_s
+#undef FLAG_pid
+#undef FLAG_p
+#undef FLAG_O
+#undef FLAG_o
+#undef FLAG_n
+#undef FLAG_M
+#undef FLAG_l
+#undef FLAG_f
+#undef FLAG_e
+#undef FLAG_d
+#undef FLAG_A
+#undef FLAG_a
+#undef FLAG_ppid
+#undef FLAG_P
+#undef FLAG_sort
+#undef FLAG_k
+#endif
+
+// pwd >0LP[-LP]
+#undef OPTSTR_pwd
+#define OPTSTR_pwd ">0LP[-LP]"
+#ifdef CLEANUP_pwd
+#undef CLEANUP_pwd
+#undef FOR_pwd
+#undef FLAG_P
+#undef FLAG_L
+#endif
+
+// pwdx <1a
+#undef OPTSTR_pwdx
+#define OPTSTR_pwdx "<1a"
+#ifdef CLEANUP_pwdx
+#undef CLEANUP_pwdx
+#undef FOR_pwdx
+#undef FLAG_a
+#endif
+
+// readahead
+#undef OPTSTR_readahead
+#define OPTSTR_readahead 0
+#ifdef CLEANUP_readahead
+#undef CLEANUP_readahead
+#undef FOR_readahead
+#endif
+
+// readlink <1>1nqmef[-mef]
+#undef OPTSTR_readlink
+#define OPTSTR_readlink "<1>1nqmef[-mef]"
+#ifdef CLEANUP_readlink
+#undef CLEANUP_readlink
+#undef FOR_readlink
+#undef FLAG_f
+#undef FLAG_e
+#undef FLAG_m
+#undef FLAG_q
+#undef FLAG_n
+#endif
+
+// realpath <1
+#undef OPTSTR_realpath
+#define OPTSTR_realpath "<1"
+#ifdef CLEANUP_realpath
+#undef CLEANUP_realpath
+#undef FOR_realpath
+#endif
+
+// reboot fn
+#undef OPTSTR_reboot
+#define OPTSTR_reboot "fn"
+#ifdef CLEANUP_reboot
+#undef CLEANUP_reboot
+#undef FOR_reboot
+#undef FLAG_n
+#undef FLAG_f
+#endif
+
+// renice <1gpun#|
+#undef OPTSTR_renice
+#define OPTSTR_renice "<1gpun#|"
+#ifdef CLEANUP_renice
+#undef CLEANUP_renice
+#undef FOR_renice
+#undef FLAG_n
+#undef FLAG_u
+#undef FLAG_p
+#undef FLAG_g
+#endif
+
+// reset
+#undef OPTSTR_reset
+#define OPTSTR_reset 0
+#ifdef CLEANUP_reset
+#undef CLEANUP_reset
+#undef FOR_reset
+#endif
+
+// restorecon <1DFnRrv
+#undef OPTSTR_restorecon
+#define OPTSTR_restorecon "<1DFnRrv"
+#ifdef CLEANUP_restorecon
+#undef CLEANUP_restorecon
+#undef FOR_restorecon
+#undef FLAG_v
+#undef FLAG_r
+#undef FLAG_R
+#undef FLAG_n
+#undef FLAG_F
+#undef FLAG_D
+#endif
+
+// rev
+#undef OPTSTR_rev
+#define OPTSTR_rev 0
+#ifdef CLEANUP_rev
+#undef CLEANUP_rev
+#undef FOR_rev
+#endif
+
+// rfkill <1>2
+#undef OPTSTR_rfkill
+#define OPTSTR_rfkill "<1>2"
+#ifdef CLEANUP_rfkill
+#undef CLEANUP_rfkill
+#undef FOR_rfkill
+#endif
+
+// rm fiRr[-fi]
+#undef OPTSTR_rm
+#define OPTSTR_rm "fiRr[-fi]"
+#ifdef CLEANUP_rm
+#undef CLEANUP_rm
+#undef FOR_rm
+#undef FLAG_r
+#undef FLAG_R
+#undef FLAG_i
+#undef FLAG_f
+#endif
+
+// rmdir <1p
+#undef OPTSTR_rmdir
+#define OPTSTR_rmdir "<1p"
+#ifdef CLEANUP_rmdir
+#undef CLEANUP_rmdir
+#undef FOR_rmdir
+#undef FLAG_p
+#endif
+
+// rmmod <1wf
+#undef OPTSTR_rmmod
+#define OPTSTR_rmmod "<1wf"
+#ifdef CLEANUP_rmmod
+#undef CLEANUP_rmmod
+#undef FOR_rmmod
+#undef FLAG_f
+#undef FLAG_w
+#endif
+
+// route ?neA:
+#undef OPTSTR_route
+#define OPTSTR_route "?neA:"
+#ifdef CLEANUP_route
+#undef CLEANUP_route
+#undef FOR_route
+#undef FLAG_A
+#undef FLAG_e
+#undef FLAG_n
+#endif
+
+// runcon <2
+#undef OPTSTR_runcon
+#define OPTSTR_runcon "<2"
+#ifdef CLEANUP_runcon
+#undef CLEANUP_runcon
+#undef FOR_runcon
+#endif
+
+// sed (help)(version)e*f*inEr[+Er]
+#undef OPTSTR_sed
+#define OPTSTR_sed "(help)(version)e*f*inEr[+Er]"
+#ifdef CLEANUP_sed
+#undef CLEANUP_sed
+#undef FOR_sed
+#undef FLAG_r
+#undef FLAG_E
+#undef FLAG_n
+#undef FLAG_i
+#undef FLAG_f
+#undef FLAG_e
+#undef FLAG_version
+#undef FLAG_help
+#endif
+
+// sendevent <4>4
+#undef OPTSTR_sendevent
+#define OPTSTR_sendevent "<4>4"
+#ifdef CLEANUP_sendevent
+#undef CLEANUP_sendevent
+#undef FOR_sendevent
+#endif
+
+// seq <1>3?f:s:w[!fw]
+#undef OPTSTR_seq
+#define OPTSTR_seq "<1>3?f:s:w[!fw]"
+#ifdef CLEANUP_seq
+#undef CLEANUP_seq
+#undef FOR_seq
+#undef FLAG_w
+#undef FLAG_s
+#undef FLAG_f
+#endif
+
+// setenforce <1>1
+#undef OPTSTR_setenforce
+#define OPTSTR_setenforce "<1>1"
+#ifdef CLEANUP_setenforce
+#undef CLEANUP_setenforce
+#undef FOR_setenforce
+#endif
+
+// setfattr hn:|v:x:|[!xv]
+#undef OPTSTR_setfattr
+#define OPTSTR_setfattr "hn:|v:x:|[!xv]"
+#ifdef CLEANUP_setfattr
+#undef CLEANUP_setfattr
+#undef FOR_setfattr
+#undef FLAG_x
+#undef FLAG_v
+#undef FLAG_n
+#undef FLAG_h
+#endif
+
+// setprop <2>2
+#undef OPTSTR_setprop
+#define OPTSTR_setprop "<2>2"
+#ifdef CLEANUP_setprop
+#undef CLEANUP_setprop
+#undef FOR_setprop
+#endif
+
+// setsid ^<1t
+#undef OPTSTR_setsid
+#define OPTSTR_setsid "^<1t"
+#ifdef CLEANUP_setsid
+#undef CLEANUP_setsid
+#undef FOR_setsid
+#undef FLAG_t
+#endif
+
+// sh c:i
+#undef OPTSTR_sh
+#define OPTSTR_sh "c:i"
+#ifdef CLEANUP_sh
+#undef CLEANUP_sh
+#undef FOR_sh
+#undef FLAG_i
+#undef FLAG_c
+#endif
+
+// sha1sum bc*[!bc]
+#undef OPTSTR_sha1sum
+#define OPTSTR_sha1sum "bc*[!bc]"
+#ifdef CLEANUP_sha1sum
+#undef CLEANUP_sha1sum
+#undef FOR_sha1sum
+#undef FLAG_c
+#undef FLAG_b
+#endif
+
+// shred <1zxus#<1n#<1o#<0f
+#undef OPTSTR_shred
+#define OPTSTR_shred "<1zxus#<1n#<1o#<0f"
+#ifdef CLEANUP_shred
+#undef CLEANUP_shred
+#undef FOR_shred
+#undef FLAG_f
+#undef FLAG_o
+#undef FLAG_n
+#undef FLAG_s
+#undef FLAG_u
+#undef FLAG_x
+#undef FLAG_z
+#endif
+
+// skeleton (walrus)(blubber):;(also):e@d*c#b:a
+#undef OPTSTR_skeleton
+#define OPTSTR_skeleton "(walrus)(blubber):;(also):e@d*c#b:a"
+#ifdef CLEANUP_skeleton
+#undef CLEANUP_skeleton
+#undef FOR_skeleton
+#undef FLAG_a
+#undef FLAG_b
+#undef FLAG_c
+#undef FLAG_d
+#undef FLAG_e
+#undef FLAG_also
+#undef FLAG_blubber
+#undef FLAG_walrus
+#endif
+
+// skeleton_alias b#dq
+#undef OPTSTR_skeleton_alias
+#define OPTSTR_skeleton_alias "b#dq"
+#ifdef CLEANUP_skeleton_alias
+#undef CLEANUP_skeleton_alias
+#undef FOR_skeleton_alias
+#undef FLAG_q
+#undef FLAG_d
+#undef FLAG_b
+#endif
+
+// sleep <1
+#undef OPTSTR_sleep
+#define OPTSTR_sleep "<1"
+#ifdef CLEANUP_sleep
+#undef CLEANUP_sleep
+#undef FOR_sleep
+#endif
+
+// sort gS:T:mo:k*t:xbMcszdfirun
+#undef OPTSTR_sort
+#define OPTSTR_sort "gS:T:mo:k*t:xbMcszdfirun"
+#ifdef CLEANUP_sort
+#undef CLEANUP_sort
+#undef FOR_sort
+#undef FLAG_n
+#undef FLAG_u
+#undef FLAG_r
+#undef FLAG_i
+#undef FLAG_f
+#undef FLAG_d
+#undef FLAG_z
+#undef FLAG_s
+#undef FLAG_c
+#undef FLAG_M
+#undef FLAG_b
+#undef FLAG_x
+#undef FLAG_t
+#undef FLAG_k
+#undef FLAG_o
+#undef FLAG_m
+#undef FLAG_T
+#undef FLAG_S
+#undef FLAG_g
+#endif
+
+// split >2a#<1=2>9b#<1l#<1[!bl]
+#undef OPTSTR_split
+#define OPTSTR_split ">2a#<1=2>9b#<1l#<1[!bl]"
+#ifdef CLEANUP_split
+#undef CLEANUP_split
+#undef FOR_split
+#undef FLAG_l
+#undef FLAG_b
+#undef FLAG_a
+#endif
+
+// start
+#undef OPTSTR_start
+#define OPTSTR_start 0
+#ifdef CLEANUP_start
+#undef CLEANUP_start
+#undef FOR_start
+#endif
+
+// stat <1c:fLt
+#undef OPTSTR_stat
+#define OPTSTR_stat "<1c:fLt"
+#ifdef CLEANUP_stat
+#undef CLEANUP_stat
+#undef FOR_stat
+#undef FLAG_t
+#undef FLAG_L
+#undef FLAG_f
+#undef FLAG_c
+#endif
+
+// stop
+#undef OPTSTR_stop
+#define OPTSTR_stop 0
+#ifdef CLEANUP_stop
+#undef CLEANUP_stop
+#undef FOR_stop
+#endif
+
+// strings t:an#=4<1fo
+#undef OPTSTR_strings
+#define OPTSTR_strings "t:an#=4<1fo"
+#ifdef CLEANUP_strings
+#undef CLEANUP_strings
+#undef FOR_strings
+#undef FLAG_o
+#undef FLAG_f
+#undef FLAG_n
+#undef FLAG_a
+#undef FLAG_t
+#endif
+
+// stty ?aF:g[!ag]
+#undef OPTSTR_stty
+#define OPTSTR_stty "?aF:g[!ag]"
+#ifdef CLEANUP_stty
+#undef CLEANUP_stty
+#undef FOR_stty
+#undef FLAG_g
+#undef FLAG_F
+#undef FLAG_a
+#endif
+
+// su lmpc:s:
+#undef OPTSTR_su
+#define OPTSTR_su "lmpc:s:"
+#ifdef CLEANUP_su
+#undef CLEANUP_su
+#undef FOR_su
+#undef FLAG_s
+#undef FLAG_c
+#undef FLAG_p
+#undef FLAG_m
+#undef FLAG_l
+#endif
+
+// sulogin t#<0=0
+#undef OPTSTR_sulogin
+#define OPTSTR_sulogin "t#<0=0"
+#ifdef CLEANUP_sulogin
+#undef CLEANUP_sulogin
+#undef FOR_sulogin
+#undef FLAG_t
+#endif
+
+// swapoff <1>1
+#undef OPTSTR_swapoff
+#define OPTSTR_swapoff "<1>1"
+#ifdef CLEANUP_swapoff
+#undef CLEANUP_swapoff
+#undef FOR_swapoff
+#endif
+
+// swapon <1>1p#<0>32767d
+#undef OPTSTR_swapon
+#define OPTSTR_swapon "<1>1p#<0>32767d"
+#ifdef CLEANUP_swapon
+#undef CLEANUP_swapon
+#undef FOR_swapon
+#undef FLAG_d
+#undef FLAG_p
+#endif
+
+// switch_root <2c:h
+#undef OPTSTR_switch_root
+#define OPTSTR_switch_root "<2c:h"
+#ifdef CLEANUP_switch_root
+#undef CLEANUP_switch_root
+#undef FOR_switch_root
+#undef FLAG_h
+#undef FLAG_c
+#endif
+
+// sync
+#undef OPTSTR_sync
+#define OPTSTR_sync 0
+#ifdef CLEANUP_sync
+#undef CLEANUP_sync
+#undef FOR_sync
+#endif
+
+// sysctl ^neNqwpaA[!ap][!aq][!aw][+aA]
+#undef OPTSTR_sysctl
+#define OPTSTR_sysctl "^neNqwpaA[!ap][!aq][!aw][+aA]"
+#ifdef CLEANUP_sysctl
+#undef CLEANUP_sysctl
+#undef FOR_sysctl
+#undef FLAG_A
+#undef FLAG_a
+#undef FLAG_p
+#undef FLAG_w
+#undef FLAG_q
+#undef FLAG_N
+#undef FLAG_e
+#undef FLAG_n
+#endif
+
+// syslogd >0l#<1>8=8R:b#<0>99=1s#<0=200m#<0>71582787=20O:p:f:a:nSKLD
+#undef OPTSTR_syslogd
+#define OPTSTR_syslogd ">0l#<1>8=8R:b#<0>99=1s#<0=200m#<0>71582787=20O:p:f:a:nSKLD"
+#ifdef CLEANUP_syslogd
+#undef CLEANUP_syslogd
+#undef FOR_syslogd
+#undef FLAG_D
+#undef FLAG_L
+#undef FLAG_K
+#undef FLAG_S
+#undef FLAG_n
+#undef FLAG_a
+#undef FLAG_f
+#undef FLAG_p
+#undef FLAG_O
+#undef FLAG_m
+#undef FLAG_s
+#undef FLAG_b
+#undef FLAG_R
+#undef FLAG_l
+#endif
+
+// tac
+#undef OPTSTR_tac
+#define OPTSTR_tac 0
+#ifdef CLEANUP_tac
+#undef CLEANUP_tac
+#undef FOR_tac
+#endif
+
+// tail ?fc-n-[-cn]
+#undef OPTSTR_tail
+#define OPTSTR_tail "?fc-n-[-cn]"
+#ifdef CLEANUP_tail
+#undef CLEANUP_tail
+#undef FOR_tail
+#undef FLAG_n
+#undef FLAG_c
+#undef FLAG_f
+#endif
+
+// tar &(no-recursion)(numeric-owner)(no-same-permissions)(overwrite)(exclude)*(to-command):o(no-same-owner)p(same-permissions)k(keep-old)c(create)|h(dereference)x(extract)|t(list)|v(verbose)j(bzip2)z(gzip)O(to-stdout)m(touch)X(exclude-from)*T(files-from)*C(directory):f(file):[!txc][!jz]
+#undef OPTSTR_tar
+#define OPTSTR_tar "&(no-recursion)(numeric-owner)(no-same-permissions)(overwrite)(exclude)*(to-command):o(no-same-owner)p(same-permissions)k(keep-old)c(create)|h(dereference)x(extract)|t(list)|v(verbose)j(bzip2)z(gzip)O(to-stdout)m(touch)X(exclude-from)*T(files-from)*C(directory):f(file):[!txc][!jz]"
+#ifdef CLEANUP_tar
+#undef CLEANUP_tar
+#undef FOR_tar
+#undef FLAG_file
+#undef FLAG_f
+#undef FLAG_directory
+#undef FLAG_C
+#undef FLAG_files_from
+#undef FLAG_T
+#undef FLAG_exclude_from
+#undef FLAG_X
+#undef FLAG_touch
+#undef FLAG_m
+#undef FLAG_to_stdout
+#undef FLAG_O
+#undef FLAG_gzip
+#undef FLAG_z
+#undef FLAG_bzip2
+#undef FLAG_j
+#undef FLAG_verbose
+#undef FLAG_v
+#undef FLAG_list
+#undef FLAG_t
+#undef FLAG_extract
+#undef FLAG_x
+#undef FLAG_dereference
+#undef FLAG_h
+#undef FLAG_create
+#undef FLAG_c
+#undef FLAG_keep_old
+#undef FLAG_k
+#undef FLAG_same_permissions
+#undef FLAG_p
+#undef FLAG_no_same_owner
+#undef FLAG_o
+#undef FLAG_to_command
+#undef FLAG_exclude
+#undef FLAG_overwrite
+#undef FLAG_no_same_permissions
+#undef FLAG_numeric_owner
+#undef FLAG_no_recursion
+#endif
+
+// taskset <1^pa
+#undef OPTSTR_taskset
+#define OPTSTR_taskset "<1^pa"
+#ifdef CLEANUP_taskset
+#undef CLEANUP_taskset
+#undef FOR_taskset
+#undef FLAG_a
+#undef FLAG_p
+#endif
+
+// tcpsvd ^<3c#=30<1C:b#=20<0u:l:hEv
+#undef OPTSTR_tcpsvd
+#define OPTSTR_tcpsvd "^<3c#=30<1C:b#=20<0u:l:hEv"
+#ifdef CLEANUP_tcpsvd
+#undef CLEANUP_tcpsvd
+#undef FOR_tcpsvd
+#undef FLAG_v
+#undef FLAG_E
+#undef FLAG_h
+#undef FLAG_l
+#undef FLAG_u
+#undef FLAG_b
+#undef FLAG_C
+#undef FLAG_c
+#endif
+
+// tee ia
+#undef OPTSTR_tee
+#define OPTSTR_tee "ia"
+#ifdef CLEANUP_tee
+#undef CLEANUP_tee
+#undef FOR_tee
+#undef FLAG_a
+#undef FLAG_i
+#endif
+
+// telnet <1>2
+#undef OPTSTR_telnet
+#define OPTSTR_telnet "<1>2"
+#ifdef CLEANUP_telnet
+#undef CLEANUP_telnet
+#undef FOR_telnet
+#endif
+
+// telnetd w#<0b:p#<0>65535=23f:l:FSKi[!wi]
+#undef OPTSTR_telnetd
+#define OPTSTR_telnetd "w#<0b:p#<0>65535=23f:l:FSKi[!wi]"
+#ifdef CLEANUP_telnetd
+#undef CLEANUP_telnetd
+#undef FOR_telnetd
+#undef FLAG_i
+#undef FLAG_K
+#undef FLAG_S
+#undef FLAG_F
+#undef FLAG_l
+#undef FLAG_f
+#undef FLAG_p
+#undef FLAG_b
+#undef FLAG_w
+#endif
+
+// test
+#undef OPTSTR_test
+#define OPTSTR_test 0
+#ifdef CLEANUP_test
+#undef CLEANUP_test
+#undef FOR_test
+#endif
+
+// tftp <1b#<8>65464r:l:g|p|[!gp]
+#undef OPTSTR_tftp
+#define OPTSTR_tftp "<1b#<8>65464r:l:g|p|[!gp]"
+#ifdef CLEANUP_tftp
+#undef CLEANUP_tftp
+#undef FOR_tftp
+#undef FLAG_p
+#undef FLAG_g
+#undef FLAG_l
+#undef FLAG_r
+#undef FLAG_b
+#endif
+
+// tftpd rcu:l
+#undef OPTSTR_tftpd
+#define OPTSTR_tftpd "rcu:l"
+#ifdef CLEANUP_tftpd
+#undef CLEANUP_tftpd
+#undef FOR_tftpd
+#undef FLAG_l
+#undef FLAG_u
+#undef FLAG_c
+#undef FLAG_r
+#endif
+
+// time <1^pv
+#undef OPTSTR_time
+#define OPTSTR_time "<1^pv"
+#ifdef CLEANUP_time
+#undef CLEANUP_time
+#undef FOR_time
+#undef FLAG_v
+#undef FLAG_p
+#endif
+
+// timeout <2^vk:s:
+#undef OPTSTR_timeout
+#define OPTSTR_timeout "<2^vk:s: "
+#ifdef CLEANUP_timeout
+#undef CLEANUP_timeout
+#undef FOR_timeout
+#undef FLAG_s
+#undef FLAG_k
+#undef FLAG_v
+#endif
+
+// top >0O*Hk*o*p*u*s#<1d%<100=3000m#n#<1bq[!oO]
+#undef OPTSTR_top
+#define OPTSTR_top ">0O*Hk*o*p*u*s#<1d%<100=3000m#n#<1bq[!oO]"
+#ifdef CLEANUP_top
+#undef CLEANUP_top
+#undef FOR_top
+#undef FLAG_q
+#undef FLAG_b
+#undef FLAG_n
+#undef FLAG_m
+#undef FLAG_d
+#undef FLAG_s
+#undef FLAG_u
+#undef FLAG_p
+#undef FLAG_o
+#undef FLAG_k
+#undef FLAG_H
+#undef FLAG_O
+#endif
+
+// touch <1acd:fmr:t:h[!dtr]
+#undef OPTSTR_touch
+#define OPTSTR_touch "<1acd:fmr:t:h[!dtr]"
+#ifdef CLEANUP_touch
+#undef CLEANUP_touch
+#undef FOR_touch
+#undef FLAG_h
+#undef FLAG_t
+#undef FLAG_r
+#undef FLAG_m
+#undef FLAG_f
+#undef FLAG_d
+#undef FLAG_c
+#undef FLAG_a
+#endif
+
+// toybox
+#undef OPTSTR_toybox
+#define OPTSTR_toybox 0
+#ifdef CLEANUP_toybox
+#undef CLEANUP_toybox
+#undef FOR_toybox
+#endif
+
+// tr ^>2<1Ccsd[+cC]
+#undef OPTSTR_tr
+#define OPTSTR_tr "^>2<1Ccsd[+cC]"
+#ifdef CLEANUP_tr
+#undef CLEANUP_tr
+#undef FOR_tr
+#undef FLAG_d
+#undef FLAG_s
+#undef FLAG_c
+#undef FLAG_C
+#endif
+
+// traceroute <1>2i:f#<1>255=1z#<0>86400=0g*w#<0>86400=5t#<0>255=0s:q#<1>255=3p#<1>65535=33434m#<1>255=30rvndlIUF64
+#undef OPTSTR_traceroute
+#define OPTSTR_traceroute "<1>2i:f#<1>255=1z#<0>86400=0g*w#<0>86400=5t#<0>255=0s:q#<1>255=3p#<1>65535=33434m#<1>255=30rvndlIUF64"
+#ifdef CLEANUP_traceroute
+#undef CLEANUP_traceroute
+#undef FOR_traceroute
+#undef FLAG_4
+#undef FLAG_6
+#undef FLAG_F
+#undef FLAG_U
+#undef FLAG_I
+#undef FLAG_l
+#undef FLAG_d
+#undef FLAG_n
+#undef FLAG_v
+#undef FLAG_r
+#undef FLAG_m
+#undef FLAG_p
+#undef FLAG_q
+#undef FLAG_s
+#undef FLAG_t
+#undef FLAG_w
+#undef FLAG_g
+#undef FLAG_z
+#undef FLAG_f
+#undef FLAG_i
+#endif
+
+// true
+#undef OPTSTR_true
+#define OPTSTR_true 0
+#ifdef CLEANUP_true
+#undef CLEANUP_true
+#undef FOR_true
+#endif
+
+// truncate <1s:|c
+#undef OPTSTR_truncate
+#define OPTSTR_truncate "<1s:|c"
+#ifdef CLEANUP_truncate
+#undef CLEANUP_truncate
+#undef FOR_truncate
+#undef FLAG_c
+#undef FLAG_s
+#endif
+
+// tty s
+#undef OPTSTR_tty
+#define OPTSTR_tty "s"
+#ifdef CLEANUP_tty
+#undef CLEANUP_tty
+#undef FOR_tty
+#undef FLAG_s
+#endif
+
+// tunctl <1>1t|d|u:T[!td]
+#undef OPTSTR_tunctl
+#define OPTSTR_tunctl "<1>1t|d|u:T[!td]"
+#ifdef CLEANUP_tunctl
+#undef CLEANUP_tunctl
+#undef FOR_tunctl
+#undef FLAG_T
+#undef FLAG_u
+#undef FLAG_d
+#undef FLAG_t
+#endif
+
+// ulimit >1P#<1SHavutsrRqpnmlifedc[-SH][!apvutsrRqnmlifedc]
+#undef OPTSTR_ulimit
+#define OPTSTR_ulimit ">1P#<1SHavutsrRqpnmlifedc[-SH][!apvutsrRqnmlifedc]"
+#ifdef CLEANUP_ulimit
+#undef CLEANUP_ulimit
+#undef FOR_ulimit
+#undef FLAG_c
+#undef FLAG_d
+#undef FLAG_e
+#undef FLAG_f
+#undef FLAG_i
+#undef FLAG_l
+#undef FLAG_m
+#undef FLAG_n
+#undef FLAG_p
+#undef FLAG_q
+#undef FLAG_R
+#undef FLAG_r
+#undef FLAG_s
+#undef FLAG_t
+#undef FLAG_u
+#undef FLAG_v
+#undef FLAG_a
+#undef FLAG_H
+#undef FLAG_S
+#undef FLAG_P
+#endif
+
+// umount cndDflrat*v[!na]
+#undef OPTSTR_umount
+#define OPTSTR_umount "cndDflrat*v[!na]"
+#ifdef CLEANUP_umount
+#undef CLEANUP_umount
+#undef FOR_umount
+#undef FLAG_v
+#undef FLAG_t
+#undef FLAG_a
+#undef FLAG_r
+#undef FLAG_l
+#undef FLAG_f
+#undef FLAG_D
+#undef FLAG_d
+#undef FLAG_n
+#undef FLAG_c
+#endif
+
+// uname oamvrns[+os]
+#undef OPTSTR_uname
+#define OPTSTR_uname "oamvrns[+os]"
+#ifdef CLEANUP_uname
+#undef CLEANUP_uname
+#undef FOR_uname
+#undef FLAG_s
+#undef FLAG_n
+#undef FLAG_r
+#undef FLAG_v
+#undef FLAG_m
+#undef FLAG_a
+#undef FLAG_o
+#endif
+
+// uniq f#s#w#zicdu
+#undef OPTSTR_uniq
+#define OPTSTR_uniq "f#s#w#zicdu"
+#ifdef CLEANUP_uniq
+#undef CLEANUP_uniq
+#undef FOR_uniq
+#undef FLAG_u
+#undef FLAG_d
+#undef FLAG_c
+#undef FLAG_i
+#undef FLAG_z
+#undef FLAG_w
+#undef FLAG_s
+#undef FLAG_f
+#endif
+
+// unix2dos
+#undef OPTSTR_unix2dos
+#define OPTSTR_unix2dos 0
+#ifdef CLEANUP_unix2dos
+#undef CLEANUP_unix2dos
+#undef FOR_unix2dos
+#endif
+
+// unlink <1>1
+#undef OPTSTR_unlink
+#define OPTSTR_unlink "<1>1"
+#ifdef CLEANUP_unlink
+#undef CLEANUP_unlink
+#undef FOR_unlink
+#endif
+
+// unshare <1^f(fork);r(map-root-user);i:(ipc);m:(mount);n:(net);p:(pid);u:(uts);U:(user);
+#undef OPTSTR_unshare
+#define OPTSTR_unshare "<1^f(fork);r(map-root-user);i:(ipc);m:(mount);n:(net);p:(pid);u:(uts);U:(user);"
+#ifdef CLEANUP_unshare
+#undef CLEANUP_unshare
+#undef FOR_unshare
+#undef FLAG_user
+#undef FLAG_U
+#undef FLAG_uts
+#undef FLAG_u
+#undef FLAG_pid
+#undef FLAG_p
+#undef FLAG_net
+#undef FLAG_n
+#undef FLAG_mount
+#undef FLAG_m
+#undef FLAG_ipc
+#undef FLAG_i
+#undef FLAG_map_root_user
+#undef FLAG_r
+#undef FLAG_fork
+#undef FLAG_f
+#endif
+
+// uptime >0ps
+#undef OPTSTR_uptime
+#define OPTSTR_uptime ">0ps"
+#ifdef CLEANUP_uptime
+#undef CLEANUP_uptime
+#undef FOR_uptime
+#undef FLAG_s
+#undef FLAG_p
+#endif
+
+// useradd <1>2u#<0G:s:g:h:SDH
+#undef OPTSTR_useradd
+#define OPTSTR_useradd "<1>2u#<0G:s:g:h:SDH"
+#ifdef CLEANUP_useradd
+#undef CLEANUP_useradd
+#undef FOR_useradd
+#undef FLAG_H
+#undef FLAG_D
+#undef FLAG_S
+#undef FLAG_h
+#undef FLAG_g
+#undef FLAG_s
+#undef FLAG_G
+#undef FLAG_u
+#endif
+
+// userdel <1>1r
+#undef OPTSTR_userdel
+#define OPTSTR_userdel "<1>1r"
+#ifdef CLEANUP_userdel
+#undef CLEANUP_userdel
+#undef FOR_userdel
+#undef FLAG_r
+#endif
+
+// usleep <1
+#undef OPTSTR_usleep
+#define OPTSTR_usleep "<1"
+#ifdef CLEANUP_usleep
+#undef CLEANUP_usleep
+#undef FOR_usleep
+#endif
+
+// uudecode >1o:
+#undef OPTSTR_uudecode
+#define OPTSTR_uudecode ">1o:"
+#ifdef CLEANUP_uudecode
+#undef CLEANUP_uudecode
+#undef FOR_uudecode
+#undef FLAG_o
+#endif
+
+// uuencode <1>2m
+#undef OPTSTR_uuencode
+#define OPTSTR_uuencode "<1>2m"
+#ifdef CLEANUP_uuencode
+#undef CLEANUP_uuencode
+#undef FOR_uuencode
+#undef FLAG_m
+#endif
+
+// uuidgen >0r(random)
+#undef OPTSTR_uuidgen
+#define OPTSTR_uuidgen ">0r(random)"
+#ifdef CLEANUP_uuidgen
+#undef CLEANUP_uuidgen
+#undef FOR_uuidgen
+#undef FLAG_random
+#undef FLAG_r
+#endif
+
+// vconfig <2>4
+#undef OPTSTR_vconfig
+#define OPTSTR_vconfig "<2>4"
+#ifdef CLEANUP_vconfig
+#undef CLEANUP_vconfig
+#undef FOR_vconfig
+#endif
+
+// vi <1>1
+#undef OPTSTR_vi
+#define OPTSTR_vi "<1>1"
+#ifdef CLEANUP_vi
+#undef CLEANUP_vi
+#undef FOR_vi
+#endif
+
+// vmstat >2n
+#undef OPTSTR_vmstat
+#define OPTSTR_vmstat ">2n"
+#ifdef CLEANUP_vmstat
+#undef CLEANUP_vmstat
+#undef FOR_vmstat
+#undef FLAG_n
+#endif
+
+// w
+#undef OPTSTR_w
+#define OPTSTR_w 0
+#ifdef CLEANUP_w
+#undef CLEANUP_w
+#undef FOR_w
+#endif
+
+// watch ^<1n%<100=2000tebx
+#undef OPTSTR_watch
+#define OPTSTR_watch "^<1n%<100=2000tebx"
+#ifdef CLEANUP_watch
+#undef CLEANUP_watch
+#undef FOR_watch
+#undef FLAG_x
+#undef FLAG_b
+#undef FLAG_e
+#undef FLAG_t
+#undef FLAG_n
+#endif
+
+// wc mcwl
+#undef OPTSTR_wc
+#define OPTSTR_wc "mcwl"
+#ifdef CLEANUP_wc
+#undef CLEANUP_wc
+#undef FOR_wc
+#undef FLAG_l
+#undef FLAG_w
+#undef FLAG_c
+#undef FLAG_m
+#endif
+
+// wget f:
+#undef OPTSTR_wget
+#define OPTSTR_wget "f:"
+#ifdef CLEANUP_wget
+#undef CLEANUP_wget
+#undef FOR_wget
+#undef FLAG_f
+#endif
+
+// which <1a
+#undef OPTSTR_which
+#define OPTSTR_which "<1a"
+#ifdef CLEANUP_which
+#undef CLEANUP_which
+#undef FOR_which
+#undef FLAG_a
+#endif
+
+// who a
+#undef OPTSTR_who
+#define OPTSTR_who "a"
+#ifdef CLEANUP_who
+#undef CLEANUP_who
+#undef FOR_who
+#undef FLAG_a
+#endif
+
+// xargs ^I:E:L#ptxrn#<1s#0[!0E]
+#undef OPTSTR_xargs
+#define OPTSTR_xargs "^I:E:L#ptxrn#<1s#0[!0E]"
+#ifdef CLEANUP_xargs
+#undef CLEANUP_xargs
+#undef FOR_xargs
+#undef FLAG_0
+#undef FLAG_s
+#undef FLAG_n
+#undef FLAG_r
+#undef FLAG_x
+#undef FLAG_t
+#undef FLAG_p
+#undef FLAG_L
+#undef FLAG_E
+#undef FLAG_I
+#endif
+
+// xxd >1c#l#o#g#<1=2iprs#[!rs]
+#undef OPTSTR_xxd
+#define OPTSTR_xxd ">1c#l#o#g#<1=2iprs#[!rs]"
+#ifdef CLEANUP_xxd
+#undef CLEANUP_xxd
+#undef FOR_xxd
+#undef FLAG_s
+#undef FLAG_r
+#undef FLAG_p
+#undef FLAG_i
+#undef FLAG_g
+#undef FLAG_o
+#undef FLAG_l
+#undef FLAG_c
+#endif
+
+// xzcat
+#undef OPTSTR_xzcat
+#define OPTSTR_xzcat 0
+#ifdef CLEANUP_xzcat
+#undef CLEANUP_xzcat
+#undef FOR_xzcat
+#endif
+
+// yes
+#undef OPTSTR_yes
+#define OPTSTR_yes 0
+#ifdef CLEANUP_yes
+#undef CLEANUP_yes
+#undef FOR_yes
+#endif
+
+// zcat cdfk123456789[-123456789]
+#undef OPTSTR_zcat
+#define OPTSTR_zcat "cdfk123456789[-123456789]"
+#ifdef CLEANUP_zcat
+#undef CLEANUP_zcat
+#undef FOR_zcat
+#undef FLAG_9
+#undef FLAG_8
+#undef FLAG_7
+#undef FLAG_6
+#undef FLAG_5
+#undef FLAG_4
+#undef FLAG_3
+#undef FLAG_2
+#undef FLAG_1
+#undef FLAG_k
+#undef FLAG_f
+#undef FLAG_d
+#undef FLAG_c
+#endif
+
+#ifdef FOR_acpi
+#ifndef TT
+#define TT this.acpi
+#endif
+#define FLAG_V (FORCED_FLAG<<0)
+#define FLAG_t (FORCED_FLAG<<1)
+#define FLAG_c (FORCED_FLAG<<2)
+#define FLAG_b (FORCED_FLAG<<3)
+#define FLAG_a (FORCED_FLAG<<4)
+#endif
+
+#ifdef FOR_arp
+#ifndef TT
+#define TT this.arp
+#endif
+#define FLAG_H (FORCED_FLAG<<0)
+#define FLAG_A (FORCED_FLAG<<1)
+#define FLAG_p (FORCED_FLAG<<2)
+#define FLAG_a (FORCED_FLAG<<3)
+#define FLAG_d (FORCED_FLAG<<4)
+#define FLAG_s (FORCED_FLAG<<5)
+#define FLAG_D (FORCED_FLAG<<6)
+#define FLAG_n (FORCED_FLAG<<7)
+#define FLAG_i (FORCED_FLAG<<8)
+#define FLAG_v (FORCED_FLAG<<9)
+#endif
+
+#ifdef FOR_arping
+#ifndef TT
+#define TT this.arping
+#endif
+#define FLAG_f (FORCED_FLAG<<0)
+#define FLAG_q (FORCED_FLAG<<1)
+#define FLAG_b (FORCED_FLAG<<2)
+#define FLAG_D (FORCED_FLAG<<3)
+#define FLAG_U (FORCED_FLAG<<4)
+#define FLAG_A (FORCED_FLAG<<5)
+#define FLAG_c (FORCED_FLAG<<6)
+#define FLAG_w (FORCED_FLAG<<7)
+#define FLAG_I (FORCED_FLAG<<8)
+#define FLAG_s (FORCED_FLAG<<9)
+#endif
+
+#ifdef FOR_ascii
+#ifndef TT
+#define TT this.ascii
+#endif
+#endif
+
+#ifdef FOR_base64
+#ifndef TT
+#define TT this.base64
+#endif
+#define FLAG_w (FORCED_FLAG<<0)
+#define FLAG_i (FORCED_FLAG<<1)
+#define FLAG_d (FORCED_FLAG<<2)
+#endif
+
+#ifdef FOR_basename
+#ifndef TT
+#define TT this.basename
+#endif
+#define FLAG_s (FORCED_FLAG<<0)
+#define FLAG_a (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_bc
+#ifndef TT
+#define TT this.bc
+#endif
+#define FLAG_warn (FORCED_FLAG<<0)
+#define FLAG_w (FORCED_FLAG<<0)
+#define FLAG_standard (FORCED_FLAG<<1)
+#define FLAG_s (FORCED_FLAG<<1)
+#define FLAG_quiet (FORCED_FLAG<<2)
+#define FLAG_q (FORCED_FLAG<<2)
+#define FLAG_mathlib (FORCED_FLAG<<3)
+#define FLAG_l (FORCED_FLAG<<3)
+#define FLAG_interactive (FORCED_FLAG<<4)
+#define FLAG_i (FORCED_FLAG<<4)
+#endif
+
+#ifdef FOR_blkid
+#ifndef TT
+#define TT this.blkid
+#endif
+#endif
+
+#ifdef FOR_blockdev
+#ifndef TT
+#define TT this.blockdev
+#endif
+#define FLAG_rereadpt (FORCED_FLAG<<0)
+#define FLAG_flushbufs (FORCED_FLAG<<1)
+#define FLAG_setra (FORCED_FLAG<<2)
+#define FLAG_getra (FORCED_FLAG<<3)
+#define FLAG_getsize64 (FORCED_FLAG<<4)
+#define FLAG_getsize (FORCED_FLAG<<5)
+#define FLAG_getsz (FORCED_FLAG<<6)
+#define FLAG_setbsz (FORCED_FLAG<<7)
+#define FLAG_getbsz (FORCED_FLAG<<8)
+#define FLAG_getss (FORCED_FLAG<<9)
+#define FLAG_getro (FORCED_FLAG<<10)
+#define FLAG_setrw (FORCED_FLAG<<11)
+#define FLAG_setro (FORCED_FLAG<<12)
+#endif
+
+#ifdef FOR_bootchartd
+#ifndef TT
+#define TT this.bootchartd
+#endif
+#endif
+
+#ifdef FOR_brctl
+#ifndef TT
+#define TT this.brctl
+#endif
+#endif
+
+#ifdef FOR_bunzip2
+#ifndef TT
+#define TT this.bunzip2
+#endif
+#define FLAG_v (FORCED_FLAG<<0)
+#define FLAG_k (FORCED_FLAG<<1)
+#define FLAG_t (FORCED_FLAG<<2)
+#define FLAG_f (FORCED_FLAG<<3)
+#define FLAG_c (FORCED_FLAG<<4)
+#endif
+
+#ifdef FOR_bzcat
+#ifndef TT
+#define TT this.bzcat
+#endif
+#endif
+
+#ifdef FOR_cal
+#ifndef TT
+#define TT this.cal
+#endif
+#endif
+
+#ifdef FOR_cat
+#ifndef TT
+#define TT this.cat
+#endif
+#define FLAG_e (FORCED_FLAG<<0)
+#define FLAG_t (FORCED_FLAG<<1)
+#define FLAG_v (FORCED_FLAG<<2)
+#define FLAG_u (FORCED_FLAG<<3)
+#endif
+
+#ifdef FOR_catv
+#ifndef TT
+#define TT this.catv
+#endif
+#define FLAG_e (FORCED_FLAG<<0)
+#define FLAG_t (FORCED_FLAG<<1)
+#define FLAG_v (FORCED_FLAG<<2)
+#endif
+
+#ifdef FOR_cd
+#ifndef TT
+#define TT this.cd
+#endif
+#endif
+
+#ifdef FOR_chattr
+#ifndef TT
+#define TT this.chattr
+#endif
+#endif
+
+#ifdef FOR_chcon
+#ifndef TT
+#define TT this.chcon
+#endif
+#define FLAG_R (FORCED_FLAG<<0)
+#define FLAG_v (FORCED_FLAG<<1)
+#define FLAG_h (FORCED_FLAG<<2)
+#endif
+
+#ifdef FOR_chgrp
+#ifndef TT
+#define TT this.chgrp
+#endif
+#define FLAG_v (FORCED_FLAG<<0)
+#define FLAG_f (FORCED_FLAG<<1)
+#define FLAG_R (FORCED_FLAG<<2)
+#define FLAG_H (FORCED_FLAG<<3)
+#define FLAG_L (FORCED_FLAG<<4)
+#define FLAG_P (FORCED_FLAG<<5)
+#define FLAG_h (FORCED_FLAG<<6)
+#endif
+
+#ifdef FOR_chmod
+#ifndef TT
+#define TT this.chmod
+#endif
+#define FLAG_f (FORCED_FLAG<<0)
+#define FLAG_R (FORCED_FLAG<<1)
+#define FLAG_v (FORCED_FLAG<<2)
+#endif
+
+#ifdef FOR_chroot
+#ifndef TT
+#define TT this.chroot
+#endif
+#endif
+
+#ifdef FOR_chrt
+#ifndef TT
+#define TT this.chrt
+#endif
+#define FLAG_o (FORCED_FLAG<<0)
+#define FLAG_f (FORCED_FLAG<<1)
+#define FLAG_r (FORCED_FLAG<<2)
+#define FLAG_b (FORCED_FLAG<<3)
+#define FLAG_R (FORCED_FLAG<<4)
+#define FLAG_i (FORCED_FLAG<<5)
+#define FLAG_p (FORCED_FLAG<<6)
+#define FLAG_m (FORCED_FLAG<<7)
+#endif
+
+#ifdef FOR_chvt
+#ifndef TT
+#define TT this.chvt
+#endif
+#endif
+
+#ifdef FOR_cksum
+#ifndef TT
+#define TT this.cksum
+#endif
+#define FLAG_N (FORCED_FLAG<<0)
+#define FLAG_L (FORCED_FLAG<<1)
+#define FLAG_P (FORCED_FLAG<<2)
+#define FLAG_I (FORCED_FLAG<<3)
+#define FLAG_H (FORCED_FLAG<<4)
+#endif
+
+#ifdef FOR_clear
+#ifndef TT
+#define TT this.clear
+#endif
+#endif
+
+#ifdef FOR_cmp
+#ifndef TT
+#define TT this.cmp
+#endif
+#define FLAG_quiet (FORCED_FLAG<<0)
+#define FLAG_silent (FORCED_FLAG<<0)
+#define FLAG_s (FORCED_FLAG<<0)
+#define FLAG_l (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_comm
+#ifndef TT
+#define TT this.comm
+#endif
+#define FLAG_1 (FORCED_FLAG<<0)
+#define FLAG_2 (FORCED_FLAG<<1)
+#define FLAG_3 (FORCED_FLAG<<2)
+#endif
+
+#ifdef FOR_count
+#ifndef TT
+#define TT this.count
+#endif
+#endif
+
+#ifdef FOR_cp
+#ifndef TT
+#define TT this.cp
+#endif
+#define FLAG_i (FORCED_FLAG<<0)
+#define FLAG_f (FORCED_FLAG<<1)
+#define FLAG_remove_destination (FORCED_FLAG<<2)
+#define FLAG_F (FORCED_FLAG<<2)
+#define FLAG_n (FORCED_FLAG<<3)
+#define FLAG_v (FORCED_FLAG<<4)
+#define FLAG_l (FORCED_FLAG<<5)
+#define FLAG_s (FORCED_FLAG<<6)
+#define FLAG_a (FORCED_FLAG<<7)
+#define FLAG_d (FORCED_FLAG<<8)
+#define FLAG_r (FORCED_FLAG<<9)
+#define FLAG_p (FORCED_FLAG<<10)
+#define FLAG_P (FORCED_FLAG<<11)
+#define FLAG_L (FORCED_FLAG<<12)
+#define FLAG_H (FORCED_FLAG<<13)
+#define FLAG_R (FORCED_FLAG<<14)
+#define FLAG_parents (FORCED_FLAG<<15)
+#define FLAG_D (FORCED_FLAG<<15)
+#define FLAG_preserve (FORCED_FLAG<<16)
+#endif
+
+#ifdef FOR_cpio
+#ifndef TT
+#define TT this.cpio
+#endif
+#define FLAG_o (FORCED_FLAG<<0)
+#define FLAG_verbose (FORCED_FLAG<<1)
+#define FLAG_v (FORCED_FLAG<<1)
+#define FLAG_F (FORCED_FLAG<<2)
+#define FLAG_t (FORCED_FLAG<<3)
+#define FLAG_i (FORCED_FLAG<<4)
+#define FLAG_p (FORCED_FLAG<<5)
+#define FLAG_H (FORCED_FLAG<<6)
+#define FLAG_u (FORCED_FLAG<<7)
+#define FLAG_d (FORCED_FLAG<<8)
+#define FLAG_m (FORCED_FLAG<<9)
+#define FLAG_trailer (FORCED_FLAG<<10)
+#define FLAG_no_preserve_owner (FORCED_FLAG<<11)
+#endif
+
+#ifdef FOR_crc32
+#ifndef TT
+#define TT this.crc32
+#endif
+#endif
+
+#ifdef FOR_crond
+#ifndef TT
+#define TT this.crond
+#endif
+#define FLAG_c (FORCED_FLAG<<0)
+#define FLAG_L (FORCED_FLAG<<1)
+#define FLAG_d (FORCED_FLAG<<2)
+#define FLAG_l (FORCED_FLAG<<3)
+#define FLAG_S (FORCED_FLAG<<4)
+#define FLAG_b (FORCED_FLAG<<5)
+#define FLAG_f (FORCED_FLAG<<6)
+#endif
+
+#ifdef FOR_crontab
+#ifndef TT
+#define TT this.crontab
+#endif
+#define FLAG_r (FORCED_FLAG<<0)
+#define FLAG_l (FORCED_FLAG<<1)
+#define FLAG_e (FORCED_FLAG<<2)
+#define FLAG_u (FORCED_FLAG<<3)
+#define FLAG_c (FORCED_FLAG<<4)
+#endif
+
+#ifdef FOR_cut
+#ifndef TT
+#define TT this.cut
+#endif
+#define FLAG_n (FORCED_FLAG<<0)
+#define FLAG_D (FORCED_FLAG<<1)
+#define FLAG_s (FORCED_FLAG<<2)
+#define FLAG_d (FORCED_FLAG<<3)
+#define FLAG_output_delimiter (FORCED_FLAG<<4)
+#define FLAG_O (FORCED_FLAG<<4)
+#define FLAG_C (FORCED_FLAG<<5)
+#define FLAG_F (FORCED_FLAG<<6)
+#define FLAG_f (FORCED_FLAG<<7)
+#define FLAG_c (FORCED_FLAG<<8)
+#define FLAG_b (FORCED_FLAG<<9)
+#endif
+
+#ifdef FOR_date
+#ifndef TT
+#define TT this.date
+#endif
+#define FLAG_u (FORCED_FLAG<<0)
+#define FLAG_r (FORCED_FLAG<<1)
+#define FLAG_D (FORCED_FLAG<<2)
+#define FLAG_d (FORCED_FLAG<<3)
+#endif
+
+#ifdef FOR_dd
+#ifndef TT
+#define TT this.dd
+#endif
+#endif
+
+#ifdef FOR_deallocvt
+#ifndef TT
+#define TT this.deallocvt
+#endif
+#endif
+
+#ifdef FOR_demo_many_options
+#ifndef TT
+#define TT this.demo_many_options
+#endif
+#define FLAG_a (FORCED_FLAG<<0)
+#define FLAG_b (FORCED_FLAG<<1)
+#define FLAG_c (FORCED_FLAG<<2)
+#define FLAG_d (FORCED_FLAG<<3)
+#define FLAG_e (FORCED_FLAG<<4)
+#define FLAG_f (FORCED_FLAG<<5)
+#define FLAG_g (FORCED_FLAG<<6)
+#define FLAG_h (FORCED_FLAG<<7)
+#define FLAG_i (FORCED_FLAG<<8)
+#define FLAG_j (FORCED_FLAG<<9)
+#define FLAG_k (FORCED_FLAG<<10)
+#define FLAG_l (FORCED_FLAG<<11)
+#define FLAG_m (FORCED_FLAG<<12)
+#define FLAG_n (FORCED_FLAG<<13)
+#define FLAG_o (FORCED_FLAG<<14)
+#define FLAG_p (FORCED_FLAG<<15)
+#define FLAG_q (FORCED_FLAG<<16)
+#define FLAG_r (FORCED_FLAG<<17)
+#define FLAG_s (FORCED_FLAG<<18)
+#define FLAG_t (FORCED_FLAG<<19)
+#define FLAG_u (FORCED_FLAG<<20)
+#define FLAG_v (FORCED_FLAG<<21)
+#define FLAG_w (FORCED_FLAG<<22)
+#define FLAG_x (FORCED_FLAG<<23)
+#define FLAG_y (FORCED_FLAG<<24)
+#define FLAG_z (FORCED_FLAG<<25)
+#define FLAG_A (FORCED_FLAG<<26)
+#define FLAG_B (FORCED_FLAG<<27)
+#define FLAG_C (FORCED_FLAG<<28)
+#define FLAG_D (FORCED_FLAG<<29)
+#define FLAG_E (FORCED_FLAG<<30)
+#define FLAG_F (FORCED_FLAG<<31)
+#define FLAG_G (FORCED_FLAGLL<<32)
+#define FLAG_H (FORCED_FLAGLL<<33)
+#define FLAG_I (FORCED_FLAGLL<<34)
+#define FLAG_J (FORCED_FLAGLL<<35)
+#define FLAG_K (FORCED_FLAGLL<<36)
+#define FLAG_L (FORCED_FLAGLL<<37)
+#define FLAG_M (FORCED_FLAGLL<<38)
+#define FLAG_N (FORCED_FLAGLL<<39)
+#define FLAG_O (FORCED_FLAGLL<<40)
+#define FLAG_P (FORCED_FLAGLL<<41)
+#define FLAG_Q (FORCED_FLAGLL<<42)
+#define FLAG_R (FORCED_FLAGLL<<43)
+#define FLAG_S (FORCED_FLAGLL<<44)
+#define FLAG_T (FORCED_FLAGLL<<45)
+#define FLAG_U (FORCED_FLAGLL<<46)
+#define FLAG_V (FORCED_FLAGLL<<47)
+#define FLAG_W (FORCED_FLAGLL<<48)
+#define FLAG_X (FORCED_FLAGLL<<49)
+#define FLAG_Y (FORCED_FLAGLL<<50)
+#define FLAG_Z (FORCED_FLAGLL<<51)
+#endif
+
+#ifdef FOR_demo_number
+#ifndef TT
+#define TT this.demo_number
+#endif
+#define FLAG_s (FORCED_FLAG<<0)
+#define FLAG_b (FORCED_FLAG<<1)
+#define FLAG_d (FORCED_FLAG<<2)
+#define FLAG_h (FORCED_FLAG<<3)
+#endif
+
+#ifdef FOR_demo_scankey
+#ifndef TT
+#define TT this.demo_scankey
+#endif
+#endif
+
+#ifdef FOR_demo_utf8towc
+#ifndef TT
+#define TT this.demo_utf8towc
+#endif
+#endif
+
+#ifdef FOR_df
+#ifndef TT
+#define TT this.df
+#endif
+#define FLAG_a (FORCED_FLAG<<0)
+#define FLAG_t (FORCED_FLAG<<1)
+#define FLAG_i (FORCED_FLAG<<2)
+#define FLAG_h (FORCED_FLAG<<3)
+#define FLAG_k (FORCED_FLAG<<4)
+#define FLAG_P (FORCED_FLAG<<5)
+#define FLAG_H (FORCED_FLAG<<6)
+#endif
+
+#ifdef FOR_dhcp
+#ifndef TT
+#define TT this.dhcp
+#endif
+#define FLAG_f (FORCED_FLAG<<0)
+#define FLAG_b (FORCED_FLAG<<1)
+#define FLAG_n (FORCED_FLAG<<2)
+#define FLAG_q (FORCED_FLAG<<3)
+#define FLAG_v (FORCED_FLAG<<4)
+#define FLAG_o (FORCED_FLAG<<5)
+#define FLAG_a (FORCED_FLAG<<6)
+#define FLAG_C (FORCED_FLAG<<7)
+#define FLAG_R (FORCED_FLAG<<8)
+#define FLAG_B (FORCED_FLAG<<9)
+#define FLAG_S (FORCED_FLAG<<10)
+#define FLAG_i (FORCED_FLAG<<11)
+#define FLAG_p (FORCED_FLAG<<12)
+#define FLAG_s (FORCED_FLAG<<13)
+#define FLAG_t (FORCED_FLAG<<14)
+#define FLAG_T (FORCED_FLAG<<15)
+#define FLAG_A (FORCED_FLAG<<16)
+#define FLAG_O (FORCED_FLAG<<17)
+#define FLAG_r (FORCED_FLAG<<18)
+#define FLAG_x (FORCED_FLAG<<19)
+#define FLAG_F (FORCED_FLAG<<20)
+#define FLAG_H (FORCED_FLAG<<21)
+#define FLAG_V (FORCED_FLAG<<22)
+#endif
+
+#ifdef FOR_dhcp6
+#ifndef TT
+#define TT this.dhcp6
+#endif
+#define FLAG_f (FORCED_FLAG<<0)
+#define FLAG_b (FORCED_FLAG<<1)
+#define FLAG_n (FORCED_FLAG<<2)
+#define FLAG_q (FORCED_FLAG<<3)
+#define FLAG_v (FORCED_FLAG<<4)
+#define FLAG_R (FORCED_FLAG<<5)
+#define FLAG_S (FORCED_FLAG<<6)
+#define FLAG_i (FORCED_FLAG<<7)
+#define FLAG_p (FORCED_FLAG<<8)
+#define FLAG_s (FORCED_FLAG<<9)
+#define FLAG_t (FORCED_FLAG<<10)
+#define FLAG_T (FORCED_FLAG<<11)
+#define FLAG_A (FORCED_FLAG<<12)
+#define FLAG_r (FORCED_FLAG<<13)
+#endif
+
+#ifdef FOR_dhcpd
+#ifndef TT
+#define TT this.dhcpd
+#endif
+#define FLAG_6 (FORCED_FLAG<<0)
+#define FLAG_4 (FORCED_FLAG<<1)
+#define FLAG_S (FORCED_FLAG<<2)
+#define FLAG_i (FORCED_FLAG<<3)
+#define FLAG_f (FORCED_FLAG<<4)
+#define FLAG_P (FORCED_FLAG<<5)
+#endif
+
+#ifdef FOR_diff
+#ifndef TT
+#define TT this.diff
+#endif
+#define FLAG_unified (FORCED_FLAG<<0)
+#define FLAG_U (FORCED_FLAG<<0)
+#define FLAG_recursive (FORCED_FLAG<<1)
+#define FLAG_r (FORCED_FLAG<<1)
+#define FLAG_new_file (FORCED_FLAG<<2)
+#define FLAG_N (FORCED_FLAG<<2)
+#define FLAG_starting_file (FORCED_FLAG<<3)
+#define FLAG_S (FORCED_FLAG<<3)
+#define FLAG_label (FORCED_FLAG<<4)
+#define FLAG_L (FORCED_FLAG<<4)
+#define FLAG_text (FORCED_FLAG<<5)
+#define FLAG_a (FORCED_FLAG<<5)
+#define FLAG_brief (FORCED_FLAG<<6)
+#define FLAG_q (FORCED_FLAG<<6)
+#define FLAG_report_identical_files (FORCED_FLAG<<7)
+#define FLAG_s (FORCED_FLAG<<7)
+#define FLAG_initial_tab (FORCED_FLAG<<8)
+#define FLAG_T (FORCED_FLAG<<8)
+#define FLAG_ignore_case (FORCED_FLAG<<9)
+#define FLAG_i (FORCED_FLAG<<9)
+#define FLAG_ignore_all_space (FORCED_FLAG<<10)
+#define FLAG_w (FORCED_FLAG<<10)
+#define FLAG_expand_tabs (FORCED_FLAG<<11)
+#define FLAG_t (FORCED_FLAG<<11)
+#define FLAG_u (FORCED_FLAG<<12)
+#define FLAG_ignore_space_change (FORCED_FLAG<<13)
+#define FLAG_b (FORCED_FLAG<<13)
+#define FLAG_minimal (FORCED_FLAG<<14)
+#define FLAG_d (FORCED_FLAG<<14)
+#define FLAG_ignore_blank_lines (FORCED_FLAG<<15)
+#define FLAG_B (FORCED_FLAG<<15)
+#define FLAG_color (FORCED_FLAG<<16)
+#endif
+
+#ifdef FOR_dirname
+#ifndef TT
+#define TT this.dirname
+#endif
+#endif
+
+#ifdef FOR_dmesg
+#ifndef TT
+#define TT this.dmesg
+#endif
+#define FLAG_c (FORCED_FLAG<<0)
+#define FLAG_n (FORCED_FLAG<<1)
+#define FLAG_s (FORCED_FLAG<<2)
+#define FLAG_r (FORCED_FLAG<<3)
+#define FLAG_t (FORCED_FLAG<<4)
+#define FLAG_T (FORCED_FLAG<<5)
+#define FLAG_S (FORCED_FLAG<<6)
+#define FLAG_C (FORCED_FLAG<<7)
+#define FLAG_follow (FORCED_FLAG<<8)
+#define FLAG_w (FORCED_FLAG<<8)
+#endif
+
+#ifdef FOR_dos2unix
+#ifndef TT
+#define TT this.dos2unix
+#endif
+#endif
+
+#ifdef FOR_du
+#ifndef TT
+#define TT this.du
+#endif
+#define FLAG_x (FORCED_FLAG<<0)
+#define FLAG_s (FORCED_FLAG<<1)
+#define FLAG_L (FORCED_FLAG<<2)
+#define FLAG_K (FORCED_FLAG<<3)
+#define FLAG_k (FORCED_FLAG<<4)
+#define FLAG_H (FORCED_FLAG<<5)
+#define FLAG_a (FORCED_FLAG<<6)
+#define FLAG_c (FORCED_FLAG<<7)
+#define FLAG_l (FORCED_FLAG<<8)
+#define FLAG_m (FORCED_FLAG<<9)
+#define FLAG_h (FORCED_FLAG<<10)
+#define FLAG_d (FORCED_FLAG<<11)
+#endif
+
+#ifdef FOR_dumpleases
+#ifndef TT
+#define TT this.dumpleases
+#endif
+#define FLAG_f (FORCED_FLAG<<0)
+#define FLAG_r (FORCED_FLAG<<1)
+#define FLAG_a (FORCED_FLAG<<2)
+#endif
+
+#ifdef FOR_echo
+#ifndef TT
+#define TT this.echo
+#endif
+#define FLAG_n (FORCED_FLAG<<0)
+#define FLAG_e (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_eject
+#ifndef TT
+#define TT this.eject
+#endif
+#define FLAG_T (FORCED_FLAG<<0)
+#define FLAG_t (FORCED_FLAG<<1)
+#define FLAG_s (FORCED_FLAG<<2)
+#endif
+
+#ifdef FOR_env
+#ifndef TT
+#define TT this.env
+#endif
+#define FLAG_u (FORCED_FLAG<<0)
+#define FLAG_i (FORCED_FLAG<<1)
+#define FLAG_0 (FORCED_FLAG<<2)
+#endif
+
+#ifdef FOR_exit
+#ifndef TT
+#define TT this.exit
+#endif
+#endif
+
+#ifdef FOR_expand
+#ifndef TT
+#define TT this.expand
+#endif
+#define FLAG_t (FORCED_FLAG<<0)
+#endif
+
+#ifdef FOR_expr
+#ifndef TT
+#define TT this.expr
+#endif
+#endif
+
+#ifdef FOR_factor
+#ifndef TT
+#define TT this.factor
+#endif
+#endif
+
+#ifdef FOR_fallocate
+#ifndef TT
+#define TT this.fallocate
+#endif
+#define FLAG_o (FORCED_FLAG<<0)
+#define FLAG_l (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_false
+#ifndef TT
+#define TT this.false
+#endif
+#endif
+
+#ifdef FOR_fdisk
+#ifndef TT
+#define TT this.fdisk
+#endif
+#define FLAG_l (FORCED_FLAG<<0)
+#define FLAG_u (FORCED_FLAG<<1)
+#define FLAG_b (FORCED_FLAG<<2)
+#define FLAG_S (FORCED_FLAG<<3)
+#define FLAG_H (FORCED_FLAG<<4)
+#define FLAG_C (FORCED_FLAG<<5)
+#endif
+
+#ifdef FOR_file
+#ifndef TT
+#define TT this.file
+#endif
+#define FLAG_L (FORCED_FLAG<<0)
+#define FLAG_h (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_find
+#ifndef TT
+#define TT this.find
+#endif
+#define FLAG_L (FORCED_FLAG<<0)
+#define FLAG_H (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_flock
+#ifndef TT
+#define TT this.flock
+#endif
+#define FLAG_x (FORCED_FLAG<<0)
+#define FLAG_u (FORCED_FLAG<<1)
+#define FLAG_s (FORCED_FLAG<<2)
+#define FLAG_n (FORCED_FLAG<<3)
+#endif
+
+#ifdef FOR_fmt
+#ifndef TT
+#define TT this.fmt
+#endif
+#define FLAG_w (FORCED_FLAG<<0)
+#endif
+
+#ifdef FOR_fold
+#ifndef TT
+#define TT this.fold
+#endif
+#define FLAG_w (FORCED_FLAG<<0)
+#define FLAG_u (FORCED_FLAG<<1)
+#define FLAG_s (FORCED_FLAG<<2)
+#define FLAG_b (FORCED_FLAG<<3)
+#endif
+
+#ifdef FOR_free
+#ifndef TT
+#define TT this.free
+#endif
+#define FLAG_b (FORCED_FLAG<<0)
+#define FLAG_k (FORCED_FLAG<<1)
+#define FLAG_m (FORCED_FLAG<<2)
+#define FLAG_g (FORCED_FLAG<<3)
+#define FLAG_t (FORCED_FLAG<<4)
+#define FLAG_h (FORCED_FLAG<<5)
+#endif
+
+#ifdef FOR_freeramdisk
+#ifndef TT
+#define TT this.freeramdisk
+#endif
+#endif
+
+#ifdef FOR_fsck
+#ifndef TT
+#define TT this.fsck
+#endif
+#define FLAG_C (FORCED_FLAG<<0)
+#define FLAG_s (FORCED_FLAG<<1)
+#define FLAG_V (FORCED_FLAG<<2)
+#define FLAG_T (FORCED_FLAG<<3)
+#define FLAG_R (FORCED_FLAG<<4)
+#define FLAG_P (FORCED_FLAG<<5)
+#define FLAG_N (FORCED_FLAG<<6)
+#define FLAG_A (FORCED_FLAG<<7)
+#define FLAG_t (FORCED_FLAG<<8)
+#endif
+
+#ifdef FOR_fsfreeze
+#ifndef TT
+#define TT this.fsfreeze
+#endif
+#define FLAG_u (FORCED_FLAG<<0)
+#define FLAG_f (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_fstype
+#ifndef TT
+#define TT this.fstype
+#endif
+#endif
+
+#ifdef FOR_fsync
+#ifndef TT
+#define TT this.fsync
+#endif
+#define FLAG_d (FORCED_FLAG<<0)
+#endif
+
+#ifdef FOR_ftpget
+#ifndef TT
+#define TT this.ftpget
+#endif
+#define FLAG_D (FORCED_FLAG<<0)
+#define FLAG_d (FORCED_FLAG<<1)
+#define FLAG_M (FORCED_FLAG<<2)
+#define FLAG_m (FORCED_FLAG<<3)
+#define FLAG_L (FORCED_FLAG<<4)
+#define FLAG_l (FORCED_FLAG<<5)
+#define FLAG_s (FORCED_FLAG<<6)
+#define FLAG_g (FORCED_FLAG<<7)
+#define FLAG_v (FORCED_FLAG<<8)
+#define FLAG_u (FORCED_FLAG<<9)
+#define FLAG_p (FORCED_FLAG<<10)
+#define FLAG_c (FORCED_FLAG<<11)
+#define FLAG_P (FORCED_FLAG<<12)
+#endif
+
+#ifdef FOR_getconf
+#ifndef TT
+#define TT this.getconf
+#endif
+#define FLAG_l (FORCED_FLAG<<0)
+#define FLAG_a (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_getenforce
+#ifndef TT
+#define TT this.getenforce
+#endif
+#endif
+
+#ifdef FOR_getfattr
+#ifndef TT
+#define TT this.getfattr
+#endif
+#define FLAG_n (FORCED_FLAG<<0)
+#define FLAG_h (FORCED_FLAG<<1)
+#define FLAG_d (FORCED_FLAG<<2)
+#endif
+
+#ifdef FOR_getprop
+#ifndef TT
+#define TT this.getprop
+#endif
+#define FLAG_Z (FORCED_FLAG<<0)
+#endif
+
+#ifdef FOR_getty
+#ifndef TT
+#define TT this.getty
+#endif
+#define FLAG_h (FORCED_FLAG<<0)
+#define FLAG_L (FORCED_FLAG<<1)
+#define FLAG_m (FORCED_FLAG<<2)
+#define FLAG_n (FORCED_FLAG<<3)
+#define FLAG_w (FORCED_FLAG<<4)
+#define FLAG_i (FORCED_FLAG<<5)
+#define FLAG_f (FORCED_FLAG<<6)
+#define FLAG_l (FORCED_FLAG<<7)
+#define FLAG_I (FORCED_FLAG<<8)
+#define FLAG_H (FORCED_FLAG<<9)
+#define FLAG_t (FORCED_FLAG<<10)
+#endif
+
+#ifdef FOR_grep
+#ifndef TT
+#define TT this.grep
+#endif
+#define FLAG_x (FORCED_FLAG<<0)
+#define FLAG_m (FORCED_FLAG<<1)
+#define FLAG_A (FORCED_FLAG<<2)
+#define FLAG_B (FORCED_FLAG<<3)
+#define FLAG_C (FORCED_FLAG<<4)
+#define FLAG_f (FORCED_FLAG<<5)
+#define FLAG_e (FORCED_FLAG<<6)
+#define FLAG_q (FORCED_FLAG<<7)
+#define FLAG_l (FORCED_FLAG<<8)
+#define FLAG_c (FORCED_FLAG<<9)
+#define FLAG_w (FORCED_FLAG<<10)
+#define FLAG_v (FORCED_FLAG<<11)
+#define FLAG_s (FORCED_FLAG<<12)
+#define FLAG_r (FORCED_FLAG<<13)
+#define FLAG_o (FORCED_FLAG<<14)
+#define FLAG_n (FORCED_FLAG<<15)
+#define FLAG_i (FORCED_FLAG<<16)
+#define FLAG_h (FORCED_FLAG<<17)
+#define FLAG_b (FORCED_FLAG<<18)
+#define FLAG_a (FORCED_FLAG<<19)
+#define FLAG_I (FORCED_FLAG<<20)
+#define FLAG_H (FORCED_FLAG<<21)
+#define FLAG_F (FORCED_FLAG<<22)
+#define FLAG_E (FORCED_FLAG<<23)
+#define FLAG_z (FORCED_FLAG<<24)
+#define FLAG_Z (FORCED_FLAG<<25)
+#define FLAG_include (FORCED_FLAG<<26)
+#define FLAG_M (FORCED_FLAG<<26)
+#define FLAG_exclude (FORCED_FLAG<<27)
+#define FLAG_S (FORCED_FLAG<<27)
+#endif
+
+#ifdef FOR_groupadd
+#ifndef TT
+#define TT this.groupadd
+#endif
+#define FLAG_S (FORCED_FLAG<<0)
+#define FLAG_g (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_groupdel
+#ifndef TT
+#define TT this.groupdel
+#endif
+#endif
+
+#ifdef FOR_groups
+#ifndef TT
+#define TT this.groups
+#endif
+#endif
+
+#ifdef FOR_gunzip
+#ifndef TT
+#define TT this.gunzip
+#endif
+#define FLAG_9 (FORCED_FLAG<<0)
+#define FLAG_8 (FORCED_FLAG<<1)
+#define FLAG_7 (FORCED_FLAG<<2)
+#define FLAG_6 (FORCED_FLAG<<3)
+#define FLAG_5 (FORCED_FLAG<<4)
+#define FLAG_4 (FORCED_FLAG<<5)
+#define FLAG_3 (FORCED_FLAG<<6)
+#define FLAG_2 (FORCED_FLAG<<7)
+#define FLAG_1 (FORCED_FLAG<<8)
+#define FLAG_k (FORCED_FLAG<<9)
+#define FLAG_f (FORCED_FLAG<<10)
+#define FLAG_d (FORCED_FLAG<<11)
+#define FLAG_c (FORCED_FLAG<<12)
+#endif
+
+#ifdef FOR_gzip
+#ifndef TT
+#define TT this.gzip
+#endif
+#define FLAG_9 (FORCED_FLAG<<0)
+#define FLAG_8 (FORCED_FLAG<<1)
+#define FLAG_7 (FORCED_FLAG<<2)
+#define FLAG_6 (FORCED_FLAG<<3)
+#define FLAG_5 (FORCED_FLAG<<4)
+#define FLAG_4 (FORCED_FLAG<<5)
+#define FLAG_3 (FORCED_FLAG<<6)
+#define FLAG_2 (FORCED_FLAG<<7)
+#define FLAG_1 (FORCED_FLAG<<8)
+#define FLAG_k (FORCED_FLAG<<9)
+#define FLAG_f (FORCED_FLAG<<10)
+#define FLAG_d (FORCED_FLAG<<11)
+#define FLAG_c (FORCED_FLAG<<12)
+#endif
+
+#ifdef FOR_head
+#ifndef TT
+#define TT this.head
+#endif
+#define FLAG_v (FORCED_FLAG<<0)
+#define FLAG_q (FORCED_FLAG<<1)
+#define FLAG_c (FORCED_FLAG<<2)
+#define FLAG_n (FORCED_FLAG<<3)
+#endif
+
+#ifdef FOR_hello
+#ifndef TT
+#define TT this.hello
+#endif
+#endif
+
+#ifdef FOR_help
+#ifndef TT
+#define TT this.help
+#endif
+#define FLAG_h (FORCED_FLAG<<0)
+#define FLAG_a (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_hexedit
+#ifndef TT
+#define TT this.hexedit
+#endif
+#define FLAG_r (FORCED_FLAG<<0)
+#endif
+
+#ifdef FOR_host
+#ifndef TT
+#define TT this.host
+#endif
+#define FLAG_t (FORCED_FLAG<<0)
+#define FLAG_v (FORCED_FLAG<<1)
+#define FLAG_a (FORCED_FLAG<<2)
+#endif
+
+#ifdef FOR_hostid
+#ifndef TT
+#define TT this.hostid
+#endif
+#endif
+
+#ifdef FOR_hostname
+#ifndef TT
+#define TT this.hostname
+#endif
+#define FLAG_F (FORCED_FLAG<<0)
+#define FLAG_f (FORCED_FLAG<<1)
+#define FLAG_s (FORCED_FLAG<<2)
+#define FLAG_d (FORCED_FLAG<<3)
+#define FLAG_b (FORCED_FLAG<<4)
+#endif
+
+#ifdef FOR_hwclock
+#ifndef TT
+#define TT this.hwclock
+#endif
+#define FLAG_systohc (FORCED_FLAG<<0)
+#define FLAG_w (FORCED_FLAG<<0)
+#define FLAG_show (FORCED_FLAG<<1)
+#define FLAG_r (FORCED_FLAG<<1)
+#define FLAG_hctosys (FORCED_FLAG<<2)
+#define FLAG_s (FORCED_FLAG<<2)
+#define FLAG_systz (FORCED_FLAG<<3)
+#define FLAG_t (FORCED_FLAG<<3)
+#define FLAG_localtime (FORCED_FLAG<<4)
+#define FLAG_l (FORCED_FLAG<<4)
+#define FLAG_utc (FORCED_FLAG<<5)
+#define FLAG_u (FORCED_FLAG<<5)
+#define FLAG_rtc (FORCED_FLAG<<6)
+#define FLAG_f (FORCED_FLAG<<6)
+#define FLAG_fast (FORCED_FLAG<<7)
+#endif
+
+#ifdef FOR_i2cdetect
+#ifndef TT
+#define TT this.i2cdetect
+#endif
+#define FLAG_y (FORCED_FLAG<<0)
+#define FLAG_l (FORCED_FLAG<<1)
+#define FLAG_F (FORCED_FLAG<<2)
+#define FLAG_a (FORCED_FLAG<<3)
+#endif
+
+#ifdef FOR_i2cdump
+#ifndef TT
+#define TT this.i2cdump
+#endif
+#define FLAG_y (FORCED_FLAG<<0)
+#define FLAG_f (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_i2cget
+#ifndef TT
+#define TT this.i2cget
+#endif
+#define FLAG_y (FORCED_FLAG<<0)
+#define FLAG_f (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_i2cset
+#ifndef TT
+#define TT this.i2cset
+#endif
+#define FLAG_y (FORCED_FLAG<<0)
+#define FLAG_f (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_iconv
+#ifndef TT
+#define TT this.iconv
+#endif
+#define FLAG_f (FORCED_FLAG<<0)
+#define FLAG_t (FORCED_FLAG<<1)
+#define FLAG_s (FORCED_FLAG<<2)
+#define FLAG_c (FORCED_FLAG<<3)
+#endif
+
+#ifdef FOR_id
+#ifndef TT
+#define TT this.id
+#endif
+#define FLAG_u (FORCED_FLAG<<0)
+#define FLAG_r (FORCED_FLAG<<1)
+#define FLAG_g (FORCED_FLAG<<2)
+#define FLAG_G (FORCED_FLAG<<3)
+#define FLAG_n (FORCED_FLAG<<4)
+#define FLAG_Z (FORCED_FLAG<<5)
+#endif
+
+#ifdef FOR_ifconfig
+#ifndef TT
+#define TT this.ifconfig
+#endif
+#define FLAG_S (FORCED_FLAG<<0)
+#define FLAG_a (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_init
+#ifndef TT
+#define TT this.init
+#endif
+#endif
+
+#ifdef FOR_inotifyd
+#ifndef TT
+#define TT this.inotifyd
+#endif
+#endif
+
+#ifdef FOR_insmod
+#ifndef TT
+#define TT this.insmod
+#endif
+#endif
+
+#ifdef FOR_install
+#ifndef TT
+#define TT this.install
+#endif
+#define FLAG_g (FORCED_FLAG<<0)
+#define FLAG_o (FORCED_FLAG<<1)
+#define FLAG_m (FORCED_FLAG<<2)
+#define FLAG_v (FORCED_FLAG<<3)
+#define FLAG_s (FORCED_FLAG<<4)
+#define FLAG_p (FORCED_FLAG<<5)
+#define FLAG_D (FORCED_FLAG<<6)
+#define FLAG_d (FORCED_FLAG<<7)
+#define FLAG_c (FORCED_FLAG<<8)
+#endif
+
+#ifdef FOR_ionice
+#ifndef TT
+#define TT this.ionice
+#endif
+#define FLAG_p (FORCED_FLAG<<0)
+#define FLAG_n (FORCED_FLAG<<1)
+#define FLAG_c (FORCED_FLAG<<2)
+#define FLAG_t (FORCED_FLAG<<3)
+#endif
+
+#ifdef FOR_iorenice
+#ifndef TT
+#define TT this.iorenice
+#endif
+#endif
+
+#ifdef FOR_iotop
+#ifndef TT
+#define TT this.iotop
+#endif
+#define FLAG_q (FORCED_FLAG<<0)
+#define FLAG_b (FORCED_FLAG<<1)
+#define FLAG_n (FORCED_FLAG<<2)
+#define FLAG_m (FORCED_FLAG<<3)
+#define FLAG_d (FORCED_FLAG<<4)
+#define FLAG_s (FORCED_FLAG<<5)
+#define FLAG_u (FORCED_FLAG<<6)
+#define FLAG_p (FORCED_FLAG<<7)
+#define FLAG_o (FORCED_FLAG<<8)
+#define FLAG_k (FORCED_FLAG<<9)
+#define FLAG_H (FORCED_FLAG<<10)
+#define FLAG_O (FORCED_FLAG<<11)
+#define FLAG_K (FORCED_FLAG<<12)
+#define FLAG_a (FORCED_FLAG<<13)
+#define FLAG_A (FORCED_FLAG<<14)
+#endif
+
+#ifdef FOR_ip
+#ifndef TT
+#define TT this.ip
+#endif
+#endif
+
+#ifdef FOR_ipcrm
+#ifndef TT
+#define TT this.ipcrm
+#endif
+#define FLAG_Q (FORCED_FLAG<<0)
+#define FLAG_q (FORCED_FLAG<<1)
+#define FLAG_S (FORCED_FLAG<<2)
+#define FLAG_s (FORCED_FLAG<<3)
+#define FLAG_M (FORCED_FLAG<<4)
+#define FLAG_m (FORCED_FLAG<<5)
+#endif
+
+#ifdef FOR_ipcs
+#ifndef TT
+#define TT this.ipcs
+#endif
+#define FLAG_i (FORCED_FLAG<<0)
+#define FLAG_m (FORCED_FLAG<<1)
+#define FLAG_q (FORCED_FLAG<<2)
+#define FLAG_s (FORCED_FLAG<<3)
+#define FLAG_l (FORCED_FLAG<<4)
+#define FLAG_u (FORCED_FLAG<<5)
+#define FLAG_t (FORCED_FLAG<<6)
+#define FLAG_p (FORCED_FLAG<<7)
+#define FLAG_c (FORCED_FLAG<<8)
+#define FLAG_a (FORCED_FLAG<<9)
+#endif
+
+#ifdef FOR_kill
+#ifndef TT
+#define TT this.kill
+#endif
+#define FLAG_s (FORCED_FLAG<<0)
+#define FLAG_l (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_killall
+#ifndef TT
+#define TT this.killall
+#endif
+#define FLAG_i (FORCED_FLAG<<0)
+#define FLAG_v (FORCED_FLAG<<1)
+#define FLAG_q (FORCED_FLAG<<2)
+#define FLAG_l (FORCED_FLAG<<3)
+#define FLAG_s (FORCED_FLAG<<4)
+#endif
+
+#ifdef FOR_killall5
+#ifndef TT
+#define TT this.killall5
+#endif
+#define FLAG_s (FORCED_FLAG<<0)
+#define FLAG_l (FORCED_FLAG<<1)
+#define FLAG_o (FORCED_FLAG<<2)
+#endif
+
+#ifdef FOR_klogd
+#ifndef TT
+#define TT this.klogd
+#endif
+#define FLAG_n (FORCED_FLAG<<0)
+#define FLAG_c (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_last
+#ifndef TT
+#define TT this.last
+#endif
+#define FLAG_W (FORCED_FLAG<<0)
+#define FLAG_f (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_link
+#ifndef TT
+#define TT this.link
+#endif
+#endif
+
+#ifdef FOR_ln
+#ifndef TT
+#define TT this.ln
+#endif
+#define FLAG_s (FORCED_FLAG<<0)
+#define FLAG_f (FORCED_FLAG<<1)
+#define FLAG_n (FORCED_FLAG<<2)
+#define FLAG_v (FORCED_FLAG<<3)
+#endif
+
+#ifdef FOR_load_policy
+#ifndef TT
+#define TT this.load_policy
+#endif
+#endif
+
+#ifdef FOR_log
+#ifndef TT
+#define TT this.log
+#endif
+#define FLAG_t (FORCED_FLAG<<0)
+#define FLAG_p (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_logger
+#ifndef TT
+#define TT this.logger
+#endif
+#define FLAG_p (FORCED_FLAG<<0)
+#define FLAG_t (FORCED_FLAG<<1)
+#define FLAG_s (FORCED_FLAG<<2)
+#endif
+
+#ifdef FOR_login
+#ifndef TT
+#define TT this.login
+#endif
+#define FLAG_h (1<<0)
+#define FLAG_p (1<<1)
+#define FLAG_f (1<<2)
+#endif
+
+#ifdef FOR_logname
+#ifndef TT
+#define TT this.logname
+#endif
+#endif
+
+#ifdef FOR_losetup
+#ifndef TT
+#define TT this.losetup
+#endif
+#define FLAG_a (FORCED_FLAG<<0)
+#define FLAG_c (FORCED_FLAG<<1)
+#define FLAG_d (FORCED_FLAG<<2)
+#define FLAG_f (FORCED_FLAG<<3)
+#define FLAG_j (FORCED_FLAG<<4)
+#define FLAG_o (FORCED_FLAG<<5)
+#define FLAG_r (FORCED_FLAG<<6)
+#define FLAG_show (FORCED_FLAG<<7)
+#define FLAG_s (FORCED_FLAG<<7)
+#define FLAG_sizelimit (FORCED_FLAG<<8)
+#define FLAG_S (FORCED_FLAG<<8)
+#endif
+
+#ifdef FOR_ls
+#ifndef TT
+#define TT this.ls
+#endif
+#define FLAG_1 (FORCED_FLAG<<0)
+#define FLAG_x (FORCED_FLAG<<1)
+#define FLAG_u (FORCED_FLAG<<2)
+#define FLAG_t (FORCED_FLAG<<3)
+#define FLAG_s (FORCED_FLAG<<4)
+#define FLAG_r (FORCED_FLAG<<5)
+#define FLAG_q (FORCED_FLAG<<6)
+#define FLAG_p (FORCED_FLAG<<7)
+#define FLAG_n (FORCED_FLAG<<8)
+#define FLAG_m (FORCED_FLAG<<9)
+#define FLAG_l (FORCED_FLAG<<10)
+#define FLAG_k (FORCED_FLAG<<11)
+#define FLAG_i (FORCED_FLAG<<12)
+#define FLAG_h (FORCED_FLAG<<13)
+#define FLAG_f (FORCED_FLAG<<14)
+#define FLAG_d (FORCED_FLAG<<15)
+#define FLAG_c (FORCED_FLAG<<16)
+#define FLAG_b (FORCED_FLAG<<17)
+#define FLAG_a (FORCED_FLAG<<18)
+#define FLAG_S (FORCED_FLAG<<19)
+#define FLAG_R (FORCED_FLAG<<20)
+#define FLAG_L (FORCED_FLAG<<21)
+#define FLAG_H (FORCED_FLAG<<22)
+#define FLAG_F (FORCED_FLAG<<23)
+#define FLAG_C (FORCED_FLAG<<24)
+#define FLAG_A (FORCED_FLAG<<25)
+#define FLAG_o (FORCED_FLAG<<26)
+#define FLAG_g (FORCED_FLAG<<27)
+#define FLAG_Z (FORCED_FLAG<<28)
+#define FLAG_show_control_chars (FORCED_FLAG<<29)
+#define FLAG_full_time (FORCED_FLAG<<30)
+#define FLAG_color (FORCED_FLAG<<31)
+#endif
+
+#ifdef FOR_lsattr
+#ifndef TT
+#define TT this.lsattr
+#endif
+#define FLAG_R (FORCED_FLAG<<0)
+#define FLAG_a (FORCED_FLAG<<1)
+#define FLAG_d (FORCED_FLAG<<2)
+#define FLAG_l (FORCED_FLAG<<3)
+#define FLAG_v (FORCED_FLAG<<4)
+#endif
+
+#ifdef FOR_lsmod
+#ifndef TT
+#define TT this.lsmod
+#endif
+#endif
+
+#ifdef FOR_lsof
+#ifndef TT
+#define TT this.lsof
+#endif
+#define FLAG_t (FORCED_FLAG<<0)
+#define FLAG_p (FORCED_FLAG<<1)
+#define FLAG_l (FORCED_FLAG<<2)
+#endif
+
+#ifdef FOR_lspci
+#ifndef TT
+#define TT this.lspci
+#endif
+#define FLAG_i (FORCED_FLAG<<0)
+#define FLAG_n (FORCED_FLAG<<1)
+#define FLAG_k (FORCED_FLAG<<2)
+#define FLAG_m (FORCED_FLAG<<3)
+#define FLAG_e (FORCED_FLAG<<4)
+#endif
+
+#ifdef FOR_lsusb
+#ifndef TT
+#define TT this.lsusb
+#endif
+#endif
+
+#ifdef FOR_makedevs
+#ifndef TT
+#define TT this.makedevs
+#endif
+#define FLAG_d (FORCED_FLAG<<0)
+#endif
+
+#ifdef FOR_md5sum
+#ifndef TT
+#define TT this.md5sum
+#endif
+#define FLAG_c (FORCED_FLAG<<0)
+#define FLAG_b (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_mdev
+#ifndef TT
+#define TT this.mdev
+#endif
+#define FLAG_s (FORCED_FLAG<<0)
+#endif
+
+#ifdef FOR_microcom
+#ifndef TT
+#define TT this.microcom
+#endif
+#define FLAG_X (FORCED_FLAG<<0)
+#define FLAG_s (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_mix
+#ifndef TT
+#define TT this.mix
+#endif
+#define FLAG_r (FORCED_FLAG<<0)
+#define FLAG_l (FORCED_FLAG<<1)
+#define FLAG_d (FORCED_FLAG<<2)
+#define FLAG_c (FORCED_FLAG<<3)
+#endif
+
+#ifdef FOR_mkdir
+#ifndef TT
+#define TT this.mkdir
+#endif
+#define FLAG_m (FORCED_FLAG<<0)
+#define FLAG_parents (FORCED_FLAG<<1)
+#define FLAG_parent (FORCED_FLAG<<1)
+#define FLAG_p (FORCED_FLAG<<1)
+#define FLAG_v (FORCED_FLAG<<2)
+#define FLAG_Z (FORCED_FLAG<<3)
+#endif
+
+#ifdef FOR_mke2fs
+#ifndef TT
+#define TT this.mke2fs
+#endif
+#define FLAG_b (FORCED_FLAG<<0)
+#define FLAG_i (FORCED_FLAG<<1)
+#define FLAG_N (FORCED_FLAG<<2)
+#define FLAG_m (FORCED_FLAG<<3)
+#define FLAG_q (FORCED_FLAG<<4)
+#define FLAG_n (FORCED_FLAG<<5)
+#define FLAG_F (FORCED_FLAG<<6)
+#define FLAG_g (FORCED_FLAG<<7)
+#endif
+
+#ifdef FOR_mkfifo
+#ifndef TT
+#define TT this.mkfifo
+#endif
+#define FLAG_m (FORCED_FLAG<<0)
+#define FLAG_Z (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_mknod
+#ifndef TT
+#define TT this.mknod
+#endif
+#define FLAG_Z (FORCED_FLAG<<0)
+#define FLAG_mode (FORCED_FLAG<<1)
+#define FLAG_m (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_mkpasswd
+#ifndef TT
+#define TT this.mkpasswd
+#endif
+#define FLAG_P (FORCED_FLAG<<0)
+#define FLAG_m (FORCED_FLAG<<1)
+#define FLAG_S (FORCED_FLAG<<2)
+#endif
+
+#ifdef FOR_mkswap
+#ifndef TT
+#define TT this.mkswap
+#endif
+#define FLAG_L (FORCED_FLAG<<0)
+#endif
+
+#ifdef FOR_mktemp
+#ifndef TT
+#define TT this.mktemp
+#endif
+#define FLAG_tmpdir (FORCED_FLAG<<0)
+#define FLAG_p (FORCED_FLAG<<0)
+#define FLAG_directory (FORCED_FLAG<<1)
+#define FLAG_d (FORCED_FLAG<<1)
+#define FLAG_q (FORCED_FLAG<<2)
+#define FLAG_u (FORCED_FLAG<<3)
+#endif
+
+#ifdef FOR_modinfo
+#ifndef TT
+#define TT this.modinfo
+#endif
+#define FLAG_0 (FORCED_FLAG<<0)
+#define FLAG_F (FORCED_FLAG<<1)
+#define FLAG_k (FORCED_FLAG<<2)
+#define FLAG_b (FORCED_FLAG<<3)
+#endif
+
+#ifdef FOR_modprobe
+#ifndef TT
+#define TT this.modprobe
+#endif
+#define FLAG_d (FORCED_FLAG<<0)
+#define FLAG_b (FORCED_FLAG<<1)
+#define FLAG_D (FORCED_FLAG<<2)
+#define FLAG_s (FORCED_FLAG<<3)
+#define FLAG_v (FORCED_FLAG<<4)
+#define FLAG_q (FORCED_FLAG<<5)
+#define FLAG_r (FORCED_FLAG<<6)
+#define FLAG_l (FORCED_FLAG<<7)
+#define FLAG_a (FORCED_FLAG<<8)
+#endif
+
+#ifdef FOR_more
+#ifndef TT
+#define TT this.more
+#endif
+#endif
+
+#ifdef FOR_mount
+#ifndef TT
+#define TT this.mount
+#endif
+#define FLAG_o (FORCED_FLAG<<0)
+#define FLAG_t (FORCED_FLAG<<1)
+#define FLAG_w (FORCED_FLAG<<2)
+#define FLAG_v (FORCED_FLAG<<3)
+#define FLAG_r (FORCED_FLAG<<4)
+#define FLAG_n (FORCED_FLAG<<5)
+#define FLAG_f (FORCED_FLAG<<6)
+#define FLAG_a (FORCED_FLAG<<7)
+#define FLAG_O (FORCED_FLAG<<8)
+#endif
+
+#ifdef FOR_mountpoint
+#ifndef TT
+#define TT this.mountpoint
+#endif
+#define FLAG_x (FORCED_FLAG<<0)
+#define FLAG_d (FORCED_FLAG<<1)
+#define FLAG_q (FORCED_FLAG<<2)
+#endif
+
+#ifdef FOR_mv
+#ifndef TT
+#define TT this.mv
+#endif
+#define FLAG_i (FORCED_FLAG<<0)
+#define FLAG_f (FORCED_FLAG<<1)
+#define FLAG_remove_destination (FORCED_FLAG<<2)
+#define FLAG_F (FORCED_FLAG<<2)
+#define FLAG_n (FORCED_FLAG<<3)
+#define FLAG_v (FORCED_FLAG<<4)
+#endif
+
+#ifdef FOR_nbd_client
+#ifndef TT
+#define TT this.nbd_client
+#endif
+#define FLAG_s (FORCED_FLAG<<0)
+#define FLAG_n (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_netcat
+#ifndef TT
+#define TT this.netcat
+#endif
+#define FLAG_f (FORCED_FLAG<<0)
+#define FLAG_s (FORCED_FLAG<<1)
+#define FLAG_q (FORCED_FLAG<<2)
+#define FLAG_p (FORCED_FLAG<<3)
+#define FLAG_W (FORCED_FLAG<<4)
+#define FLAG_w (FORCED_FLAG<<5)
+#define FLAG_L (FORCED_FLAG<<6)
+#define FLAG_l (FORCED_FLAG<<7)
+#define FLAG_t (FORCED_FLAG<<8)
+#endif
+
+#ifdef FOR_netstat
+#ifndef TT
+#define TT this.netstat
+#endif
+#define FLAG_l (FORCED_FLAG<<0)
+#define FLAG_a (FORCED_FLAG<<1)
+#define FLAG_e (FORCED_FLAG<<2)
+#define FLAG_n (FORCED_FLAG<<3)
+#define FLAG_t (FORCED_FLAG<<4)
+#define FLAG_u (FORCED_FLAG<<5)
+#define FLAG_w (FORCED_FLAG<<6)
+#define FLAG_x (FORCED_FLAG<<7)
+#define FLAG_r (FORCED_FLAG<<8)
+#define FLAG_W (FORCED_FLAG<<9)
+#define FLAG_p (FORCED_FLAG<<10)
+#endif
+
+#ifdef FOR_nice
+#ifndef TT
+#define TT this.nice
+#endif
+#define FLAG_n (FORCED_FLAG<<0)
+#endif
+
+#ifdef FOR_nl
+#ifndef TT
+#define TT this.nl
+#endif
+#define FLAG_s (FORCED_FLAG<<0)
+#define FLAG_n (FORCED_FLAG<<1)
+#define FLAG_b (FORCED_FLAG<<2)
+#define FLAG_E (FORCED_FLAG<<3)
+#define FLAG_w (FORCED_FLAG<<4)
+#define FLAG_l (FORCED_FLAG<<5)
+#define FLAG_v (FORCED_FLAG<<6)
+#endif
+
+#ifdef FOR_nohup
+#ifndef TT
+#define TT this.nohup
+#endif
+#endif
+
+#ifdef FOR_nproc
+#ifndef TT
+#define TT this.nproc
+#endif
+#define FLAG_all (FORCED_FLAG<<0)
+#endif
+
+#ifdef FOR_nsenter
+#ifndef TT
+#define TT this.nsenter
+#endif
+#define FLAG_user (FORCED_FLAG<<0)
+#define FLAG_U (FORCED_FLAG<<0)
+#define FLAG_uts (FORCED_FLAG<<1)
+#define FLAG_u (FORCED_FLAG<<1)
+#define FLAG_pid (FORCED_FLAG<<2)
+#define FLAG_p (FORCED_FLAG<<2)
+#define FLAG_net (FORCED_FLAG<<3)
+#define FLAG_n (FORCED_FLAG<<3)
+#define FLAG_mount (FORCED_FLAG<<4)
+#define FLAG_m (FORCED_FLAG<<4)
+#define FLAG_ipc (FORCED_FLAG<<5)
+#define FLAG_i (FORCED_FLAG<<5)
+#define FLAG_target (FORCED_FLAG<<6)
+#define FLAG_t (FORCED_FLAG<<6)
+#define FLAG_no_fork (FORCED_FLAG<<7)
+#define FLAG_F (FORCED_FLAG<<7)
+#endif
+
+#ifdef FOR_od
+#ifndef TT
+#define TT this.od
+#endif
+#define FLAG_t (FORCED_FLAG<<0)
+#define FLAG_A (FORCED_FLAG<<1)
+#define FLAG_b (FORCED_FLAG<<2)
+#define FLAG_c (FORCED_FLAG<<3)
+#define FLAG_d (FORCED_FLAG<<4)
+#define FLAG_o (FORCED_FLAG<<5)
+#define FLAG_s (FORCED_FLAG<<6)
+#define FLAG_x (FORCED_FLAG<<7)
+#define FLAG_N (FORCED_FLAG<<8)
+#define FLAG_w (FORCED_FLAG<<9)
+#define FLAG_v (FORCED_FLAG<<10)
+#define FLAG_j (FORCED_FLAG<<11)
+#endif
+
+#ifdef FOR_oneit
+#ifndef TT
+#define TT this.oneit
+#endif
+#define FLAG_3 (FORCED_FLAG<<0)
+#define FLAG_p (FORCED_FLAG<<1)
+#define FLAG_c (FORCED_FLAG<<2)
+#define FLAG_n (FORCED_FLAG<<3)
+#endif
+
+#ifdef FOR_openvt
+#ifndef TT
+#define TT this.openvt
+#endif
+#define FLAG_w (FORCED_FLAG<<0)
+#define FLAG_s (FORCED_FLAG<<1)
+#define FLAG_c (FORCED_FLAG<<2)
+#endif
+
+#ifdef FOR_partprobe
+#ifndef TT
+#define TT this.partprobe
+#endif
+#endif
+
+#ifdef FOR_passwd
+#ifndef TT
+#define TT this.passwd
+#endif
+#define FLAG_u (FORCED_FLAG<<0)
+#define FLAG_l (FORCED_FLAG<<1)
+#define FLAG_d (FORCED_FLAG<<2)
+#define FLAG_a (FORCED_FLAG<<3)
+#endif
+
+#ifdef FOR_paste
+#ifndef TT
+#define TT this.paste
+#endif
+#define FLAG_s (FORCED_FLAG<<0)
+#define FLAG_d (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_patch
+#ifndef TT
+#define TT this.patch
+#endif
+#define FLAG_R (FORCED_FLAG<<0)
+#define FLAG_i (FORCED_FLAG<<1)
+#define FLAG_d (FORCED_FLAG<<2)
+#define FLAG_p (FORCED_FLAG<<3)
+#define FLAG_l (FORCED_FLAG<<4)
+#define FLAG_u (FORCED_FLAG<<5)
+#define FLAG_x (FORCED_FLAG<<6)
+#define FLAG_dry_run (FORCED_FLAG<<7)
+#endif
+
+#ifdef FOR_pgrep
+#ifndef TT
+#define TT this.pgrep
+#endif
+#define FLAG_L (FORCED_FLAG<<0)
+#define FLAG_x (FORCED_FLAG<<1)
+#define FLAG_v (FORCED_FLAG<<2)
+#define FLAG_o (FORCED_FLAG<<3)
+#define FLAG_n (FORCED_FLAG<<4)
+#define FLAG_f (FORCED_FLAG<<5)
+#define FLAG_G (FORCED_FLAG<<6)
+#define FLAG_g (FORCED_FLAG<<7)
+#define FLAG_P (FORCED_FLAG<<8)
+#define FLAG_s (FORCED_FLAG<<9)
+#define FLAG_t (FORCED_FLAG<<10)
+#define FLAG_U (FORCED_FLAG<<11)
+#define FLAG_u (FORCED_FLAG<<12)
+#define FLAG_d (FORCED_FLAG<<13)
+#define FLAG_l (FORCED_FLAG<<14)
+#define FLAG_c (FORCED_FLAG<<15)
+#endif
+
+#ifdef FOR_pidof
+#ifndef TT
+#define TT this.pidof
+#endif
+#define FLAG_o (FORCED_FLAG<<0)
+#define FLAG_s (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_ping
+#ifndef TT
+#define TT this.ping
+#endif
+#define FLAG_I (FORCED_FLAG<<0)
+#define FLAG_6 (FORCED_FLAG<<1)
+#define FLAG_4 (FORCED_FLAG<<2)
+#define FLAG_f (FORCED_FLAG<<3)
+#define FLAG_q (FORCED_FLAG<<4)
+#define FLAG_w (FORCED_FLAG<<5)
+#define FLAG_W (FORCED_FLAG<<6)
+#define FLAG_i (FORCED_FLAG<<7)
+#define FLAG_s (FORCED_FLAG<<8)
+#define FLAG_c (FORCED_FLAG<<9)
+#define FLAG_t (FORCED_FLAG<<10)
+#define FLAG_m (FORCED_FLAG<<11)
+#endif
+
+#ifdef FOR_pivot_root
+#ifndef TT
+#define TT this.pivot_root
+#endif
+#endif
+
+#ifdef FOR_pkill
+#ifndef TT
+#define TT this.pkill
+#endif
+#define FLAG_l (FORCED_FLAG<<0)
+#define FLAG_x (FORCED_FLAG<<1)
+#define FLAG_v (FORCED_FLAG<<2)
+#define FLAG_o (FORCED_FLAG<<3)
+#define FLAG_n (FORCED_FLAG<<4)
+#define FLAG_f (FORCED_FLAG<<5)
+#define FLAG_G (FORCED_FLAG<<6)
+#define FLAG_g (FORCED_FLAG<<7)
+#define FLAG_P (FORCED_FLAG<<8)
+#define FLAG_s (FORCED_FLAG<<9)
+#define FLAG_t (FORCED_FLAG<<10)
+#define FLAG_U (FORCED_FLAG<<11)
+#define FLAG_u (FORCED_FLAG<<12)
+#define FLAG_V (FORCED_FLAG<<13)
+#endif
+
+#ifdef FOR_pmap
+#ifndef TT
+#define TT this.pmap
+#endif
+#define FLAG_q (FORCED_FLAG<<0)
+#define FLAG_x (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_printenv
+#ifndef TT
+#define TT this.printenv
+#endif
+#define FLAG_null (FORCED_FLAG<<0)
+#define FLAG_0 (FORCED_FLAG<<0)
+#endif
+
+#ifdef FOR_printf
+#ifndef TT
+#define TT this.printf
+#endif
+#endif
+
+#ifdef FOR_ps
+#ifndef TT
+#define TT this.ps
+#endif
+#define FLAG_Z (FORCED_FLAG<<0)
+#define FLAG_w (FORCED_FLAG<<1)
+#define FLAG_G (FORCED_FLAG<<2)
+#define FLAG_g (FORCED_FLAG<<3)
+#define FLAG_U (FORCED_FLAG<<4)
+#define FLAG_u (FORCED_FLAG<<5)
+#define FLAG_T (FORCED_FLAG<<6)
+#define FLAG_t (FORCED_FLAG<<7)
+#define FLAG_s (FORCED_FLAG<<8)
+#define FLAG_pid (FORCED_FLAG<<9)
+#define FLAG_p (FORCED_FLAG<<9)
+#define FLAG_O (FORCED_FLAG<<10)
+#define FLAG_o (FORCED_FLAG<<11)
+#define FLAG_n (FORCED_FLAG<<12)
+#define FLAG_M (FORCED_FLAG<<13)
+#define FLAG_l (FORCED_FLAG<<14)
+#define FLAG_f (FORCED_FLAG<<15)
+#define FLAG_e (FORCED_FLAG<<16)
+#define FLAG_d (FORCED_FLAG<<17)
+#define FLAG_A (FORCED_FLAG<<18)
+#define FLAG_a (FORCED_FLAG<<19)
+#define FLAG_ppid (FORCED_FLAG<<20)
+#define FLAG_P (FORCED_FLAG<<20)
+#define FLAG_sort (FORCED_FLAG<<21)
+#define FLAG_k (FORCED_FLAG<<21)
+#endif
+
+#ifdef FOR_pwd
+#ifndef TT
+#define TT this.pwd
+#endif
+#define FLAG_P (FORCED_FLAG<<0)
+#define FLAG_L (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_pwdx
+#ifndef TT
+#define TT this.pwdx
+#endif
+#define FLAG_a (FORCED_FLAG<<0)
+#endif
+
+#ifdef FOR_readahead
+#ifndef TT
+#define TT this.readahead
+#endif
+#endif
+
+#ifdef FOR_readlink
+#ifndef TT
+#define TT this.readlink
+#endif
+#define FLAG_f (FORCED_FLAG<<0)
+#define FLAG_e (FORCED_FLAG<<1)
+#define FLAG_m (FORCED_FLAG<<2)
+#define FLAG_q (FORCED_FLAG<<3)
+#define FLAG_n (FORCED_FLAG<<4)
+#endif
+
+#ifdef FOR_realpath
+#ifndef TT
+#define TT this.realpath
+#endif
+#endif
+
+#ifdef FOR_reboot
+#ifndef TT
+#define TT this.reboot
+#endif
+#define FLAG_n (FORCED_FLAG<<0)
+#define FLAG_f (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_renice
+#ifndef TT
+#define TT this.renice
+#endif
+#define FLAG_n (FORCED_FLAG<<0)
+#define FLAG_u (FORCED_FLAG<<1)
+#define FLAG_p (FORCED_FLAG<<2)
+#define FLAG_g (FORCED_FLAG<<3)
+#endif
+
+#ifdef FOR_reset
+#ifndef TT
+#define TT this.reset
+#endif
+#endif
+
+#ifdef FOR_restorecon
+#ifndef TT
+#define TT this.restorecon
+#endif
+#define FLAG_v (FORCED_FLAG<<0)
+#define FLAG_r (FORCED_FLAG<<1)
+#define FLAG_R (FORCED_FLAG<<2)
+#define FLAG_n (FORCED_FLAG<<3)
+#define FLAG_F (FORCED_FLAG<<4)
+#define FLAG_D (FORCED_FLAG<<5)
+#endif
+
+#ifdef FOR_rev
+#ifndef TT
+#define TT this.rev
+#endif
+#endif
+
+#ifdef FOR_rfkill
+#ifndef TT
+#define TT this.rfkill
+#endif
+#endif
+
+#ifdef FOR_rm
+#ifndef TT
+#define TT this.rm
+#endif
+#define FLAG_r (FORCED_FLAG<<0)
+#define FLAG_R (FORCED_FLAG<<1)
+#define FLAG_i (FORCED_FLAG<<2)
+#define FLAG_f (FORCED_FLAG<<3)
+#endif
+
+#ifdef FOR_rmdir
+#ifndef TT
+#define TT this.rmdir
+#endif
+#define FLAG_p (FORCED_FLAG<<0)
+#endif
+
+#ifdef FOR_rmmod
+#ifndef TT
+#define TT this.rmmod
+#endif
+#define FLAG_f (FORCED_FLAG<<0)
+#define FLAG_w (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_route
+#ifndef TT
+#define TT this.route
+#endif
+#define FLAG_A (FORCED_FLAG<<0)
+#define FLAG_e (FORCED_FLAG<<1)
+#define FLAG_n (FORCED_FLAG<<2)
+#endif
+
+#ifdef FOR_runcon
+#ifndef TT
+#define TT this.runcon
+#endif
+#endif
+
+#ifdef FOR_sed
+#ifndef TT
+#define TT this.sed
+#endif
+#define FLAG_r (FORCED_FLAG<<0)
+#define FLAG_E (FORCED_FLAG<<1)
+#define FLAG_n (FORCED_FLAG<<2)
+#define FLAG_i (FORCED_FLAG<<3)
+#define FLAG_f (FORCED_FLAG<<4)
+#define FLAG_e (FORCED_FLAG<<5)
+#define FLAG_version (FORCED_FLAG<<6)
+#define FLAG_help (FORCED_FLAG<<7)
+#endif
+
+#ifdef FOR_sendevent
+#ifndef TT
+#define TT this.sendevent
+#endif
+#endif
+
+#ifdef FOR_seq
+#ifndef TT
+#define TT this.seq
+#endif
+#define FLAG_w (FORCED_FLAG<<0)
+#define FLAG_s (FORCED_FLAG<<1)
+#define FLAG_f (FORCED_FLAG<<2)
+#endif
+
+#ifdef FOR_setenforce
+#ifndef TT
+#define TT this.setenforce
+#endif
+#endif
+
+#ifdef FOR_setfattr
+#ifndef TT
+#define TT this.setfattr
+#endif
+#define FLAG_x (FORCED_FLAG<<0)
+#define FLAG_v (FORCED_FLAG<<1)
+#define FLAG_n (FORCED_FLAG<<2)
+#define FLAG_h (FORCED_FLAG<<3)
+#endif
+
+#ifdef FOR_setprop
+#ifndef TT
+#define TT this.setprop
+#endif
+#endif
+
+#ifdef FOR_setsid
+#ifndef TT
+#define TT this.setsid
+#endif
+#define FLAG_t (FORCED_FLAG<<0)
+#endif
+
+#ifdef FOR_sh
+#ifndef TT
+#define TT this.sh
+#endif
+#define FLAG_i (FORCED_FLAG<<0)
+#define FLAG_c (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_sha1sum
+#ifndef TT
+#define TT this.sha1sum
+#endif
+#define FLAG_c (FORCED_FLAG<<0)
+#define FLAG_b (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_shred
+#ifndef TT
+#define TT this.shred
+#endif
+#define FLAG_f (FORCED_FLAG<<0)
+#define FLAG_o (FORCED_FLAG<<1)
+#define FLAG_n (FORCED_FLAG<<2)
+#define FLAG_s (FORCED_FLAG<<3)
+#define FLAG_u (FORCED_FLAG<<4)
+#define FLAG_x (FORCED_FLAG<<5)
+#define FLAG_z (FORCED_FLAG<<6)
+#endif
+
+#ifdef FOR_skeleton
+#ifndef TT
+#define TT this.skeleton
+#endif
+#define FLAG_a (FORCED_FLAG<<0)
+#define FLAG_b (FORCED_FLAG<<1)
+#define FLAG_c (FORCED_FLAG<<2)
+#define FLAG_d (FORCED_FLAG<<3)
+#define FLAG_e (FORCED_FLAG<<4)
+#define FLAG_also (FORCED_FLAG<<5)
+#define FLAG_blubber (FORCED_FLAG<<6)
+#define FLAG_walrus (FORCED_FLAG<<7)
+#endif
+
+#ifdef FOR_skeleton_alias
+#ifndef TT
+#define TT this.skeleton_alias
+#endif
+#define FLAG_q (FORCED_FLAG<<0)
+#define FLAG_d (FORCED_FLAG<<1)
+#define FLAG_b (FORCED_FLAG<<2)
+#endif
+
+#ifdef FOR_sleep
+#ifndef TT
+#define TT this.sleep
+#endif
+#endif
+
+#ifdef FOR_sort
+#ifndef TT
+#define TT this.sort
+#endif
+#define FLAG_n (FORCED_FLAG<<0)
+#define FLAG_u (FORCED_FLAG<<1)
+#define FLAG_r (FORCED_FLAG<<2)
+#define FLAG_i (FORCED_FLAG<<3)
+#define FLAG_f (FORCED_FLAG<<4)
+#define FLAG_d (FORCED_FLAG<<5)
+#define FLAG_z (FORCED_FLAG<<6)
+#define FLAG_s (FORCED_FLAG<<7)
+#define FLAG_c (FORCED_FLAG<<8)
+#define FLAG_M (FORCED_FLAG<<9)
+#define FLAG_b (FORCED_FLAG<<10)
+#define FLAG_x (FORCED_FLAG<<11)
+#define FLAG_t (FORCED_FLAG<<12)
+#define FLAG_k (FORCED_FLAG<<13)
+#define FLAG_o (FORCED_FLAG<<14)
+#define FLAG_m (FORCED_FLAG<<15)
+#define FLAG_T (FORCED_FLAG<<16)
+#define FLAG_S (FORCED_FLAG<<17)
+#define FLAG_g (FORCED_FLAG<<18)
+#endif
+
+#ifdef FOR_split
+#ifndef TT
+#define TT this.split
+#endif
+#define FLAG_l (FORCED_FLAG<<0)
+#define FLAG_b (FORCED_FLAG<<1)
+#define FLAG_a (FORCED_FLAG<<2)
+#endif
+
+#ifdef FOR_start
+#ifndef TT
+#define TT this.start
+#endif
+#endif
+
+#ifdef FOR_stat
+#ifndef TT
+#define TT this.stat
+#endif
+#define FLAG_t (FORCED_FLAG<<0)
+#define FLAG_L (FORCED_FLAG<<1)
+#define FLAG_f (FORCED_FLAG<<2)
+#define FLAG_c (FORCED_FLAG<<3)
+#endif
+
+#ifdef FOR_stop
+#ifndef TT
+#define TT this.stop
+#endif
+#endif
+
+#ifdef FOR_strings
+#ifndef TT
+#define TT this.strings
+#endif
+#define FLAG_o (FORCED_FLAG<<0)
+#define FLAG_f (FORCED_FLAG<<1)
+#define FLAG_n (FORCED_FLAG<<2)
+#define FLAG_a (FORCED_FLAG<<3)
+#define FLAG_t (FORCED_FLAG<<4)
+#endif
+
+#ifdef FOR_stty
+#ifndef TT
+#define TT this.stty
+#endif
+#define FLAG_g (FORCED_FLAG<<0)
+#define FLAG_F (FORCED_FLAG<<1)
+#define FLAG_a (FORCED_FLAG<<2)
+#endif
+
+#ifdef FOR_su
+#ifndef TT
+#define TT this.su
+#endif
+#define FLAG_s (FORCED_FLAG<<0)
+#define FLAG_c (FORCED_FLAG<<1)
+#define FLAG_p (FORCED_FLAG<<2)
+#define FLAG_m (FORCED_FLAG<<3)
+#define FLAG_l (FORCED_FLAG<<4)
+#endif
+
+#ifdef FOR_sulogin
+#ifndef TT
+#define TT this.sulogin
+#endif
+#define FLAG_t (FORCED_FLAG<<0)
+#endif
+
+#ifdef FOR_swapoff
+#ifndef TT
+#define TT this.swapoff
+#endif
+#endif
+
+#ifdef FOR_swapon
+#ifndef TT
+#define TT this.swapon
+#endif
+#define FLAG_d (FORCED_FLAG<<0)
+#define FLAG_p (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_switch_root
+#ifndef TT
+#define TT this.switch_root
+#endif
+#define FLAG_h (FORCED_FLAG<<0)
+#define FLAG_c (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_sync
+#ifndef TT
+#define TT this.sync
+#endif
+#endif
+
+#ifdef FOR_sysctl
+#ifndef TT
+#define TT this.sysctl
+#endif
+#define FLAG_A (FORCED_FLAG<<0)
+#define FLAG_a (FORCED_FLAG<<1)
+#define FLAG_p (FORCED_FLAG<<2)
+#define FLAG_w (FORCED_FLAG<<3)
+#define FLAG_q (FORCED_FLAG<<4)
+#define FLAG_N (FORCED_FLAG<<5)
+#define FLAG_e (FORCED_FLAG<<6)
+#define FLAG_n (FORCED_FLAG<<7)
+#endif
+
+#ifdef FOR_syslogd
+#ifndef TT
+#define TT this.syslogd
+#endif
+#define FLAG_D (FORCED_FLAG<<0)
+#define FLAG_L (FORCED_FLAG<<1)
+#define FLAG_K (FORCED_FLAG<<2)
+#define FLAG_S (FORCED_FLAG<<3)
+#define FLAG_n (FORCED_FLAG<<4)
+#define FLAG_a (FORCED_FLAG<<5)
+#define FLAG_f (FORCED_FLAG<<6)
+#define FLAG_p (FORCED_FLAG<<7)
+#define FLAG_O (FORCED_FLAG<<8)
+#define FLAG_m (FORCED_FLAG<<9)
+#define FLAG_s (FORCED_FLAG<<10)
+#define FLAG_b (FORCED_FLAG<<11)
+#define FLAG_R (FORCED_FLAG<<12)
+#define FLAG_l (FORCED_FLAG<<13)
+#endif
+
+#ifdef FOR_tac
+#ifndef TT
+#define TT this.tac
+#endif
+#endif
+
+#ifdef FOR_tail
+#ifndef TT
+#define TT this.tail
+#endif
+#define FLAG_n (FORCED_FLAG<<0)
+#define FLAG_c (FORCED_FLAG<<1)
+#define FLAG_f (FORCED_FLAG<<2)
+#endif
+
+#ifdef FOR_tar
+#ifndef TT
+#define TT this.tar
+#endif
+#define FLAG_file (FORCED_FLAG<<0)
+#define FLAG_f (FORCED_FLAG<<0)
+#define FLAG_directory (FORCED_FLAG<<1)
+#define FLAG_C (FORCED_FLAG<<1)
+#define FLAG_files_from (FORCED_FLAG<<2)
+#define FLAG_T (FORCED_FLAG<<2)
+#define FLAG_exclude_from (FORCED_FLAG<<3)
+#define FLAG_X (FORCED_FLAG<<3)
+#define FLAG_touch (FORCED_FLAG<<4)
+#define FLAG_m (FORCED_FLAG<<4)
+#define FLAG_to_stdout (FORCED_FLAG<<5)
+#define FLAG_O (FORCED_FLAG<<5)
+#define FLAG_gzip (FORCED_FLAG<<6)
+#define FLAG_z (FORCED_FLAG<<6)
+#define FLAG_bzip2 (FORCED_FLAG<<7)
+#define FLAG_j (FORCED_FLAG<<7)
+#define FLAG_verbose (FORCED_FLAG<<8)
+#define FLAG_v (FORCED_FLAG<<8)
+#define FLAG_list (FORCED_FLAG<<9)
+#define FLAG_t (FORCED_FLAG<<9)
+#define FLAG_extract (FORCED_FLAG<<10)
+#define FLAG_x (FORCED_FLAG<<10)
+#define FLAG_dereference (FORCED_FLAG<<11)
+#define FLAG_h (FORCED_FLAG<<11)
+#define FLAG_create (FORCED_FLAG<<12)
+#define FLAG_c (FORCED_FLAG<<12)
+#define FLAG_keep_old (FORCED_FLAG<<13)
+#define FLAG_k (FORCED_FLAG<<13)
+#define FLAG_same_permissions (FORCED_FLAG<<14)
+#define FLAG_p (FORCED_FLAG<<14)
+#define FLAG_no_same_owner (FORCED_FLAG<<15)
+#define FLAG_o (FORCED_FLAG<<15)
+#define FLAG_to_command (FORCED_FLAG<<16)
+#define FLAG_exclude (FORCED_FLAG<<17)
+#define FLAG_overwrite (FORCED_FLAG<<18)
+#define FLAG_no_same_permissions (FORCED_FLAG<<19)
+#define FLAG_numeric_owner (FORCED_FLAG<<20)
+#define FLAG_no_recursion (FORCED_FLAG<<21)
+#endif
+
+#ifdef FOR_taskset
+#ifndef TT
+#define TT this.taskset
+#endif
+#define FLAG_a (FORCED_FLAG<<0)
+#define FLAG_p (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_tcpsvd
+#ifndef TT
+#define TT this.tcpsvd
+#endif
+#define FLAG_v (FORCED_FLAG<<0)
+#define FLAG_E (FORCED_FLAG<<1)
+#define FLAG_h (FORCED_FLAG<<2)
+#define FLAG_l (FORCED_FLAG<<3)
+#define FLAG_u (FORCED_FLAG<<4)
+#define FLAG_b (FORCED_FLAG<<5)
+#define FLAG_C (FORCED_FLAG<<6)
+#define FLAG_c (FORCED_FLAG<<7)
+#endif
+
+#ifdef FOR_tee
+#ifndef TT
+#define TT this.tee
+#endif
+#define FLAG_a (FORCED_FLAG<<0)
+#define FLAG_i (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_telnet
+#ifndef TT
+#define TT this.telnet
+#endif
+#endif
+
+#ifdef FOR_telnetd
+#ifndef TT
+#define TT this.telnetd
+#endif
+#define FLAG_i (FORCED_FLAG<<0)
+#define FLAG_K (FORCED_FLAG<<1)
+#define FLAG_S (FORCED_FLAG<<2)
+#define FLAG_F (FORCED_FLAG<<3)
+#define FLAG_l (FORCED_FLAG<<4)
+#define FLAG_f (FORCED_FLAG<<5)
+#define FLAG_p (FORCED_FLAG<<6)
+#define FLAG_b (FORCED_FLAG<<7)
+#define FLAG_w (FORCED_FLAG<<8)
+#endif
+
+#ifdef FOR_test
+#ifndef TT
+#define TT this.test
+#endif
+#endif
+
+#ifdef FOR_tftp
+#ifndef TT
+#define TT this.tftp
+#endif
+#define FLAG_p (FORCED_FLAG<<0)
+#define FLAG_g (FORCED_FLAG<<1)
+#define FLAG_l (FORCED_FLAG<<2)
+#define FLAG_r (FORCED_FLAG<<3)
+#define FLAG_b (FORCED_FLAG<<4)
+#endif
+
+#ifdef FOR_tftpd
+#ifndef TT
+#define TT this.tftpd
+#endif
+#define FLAG_l (FORCED_FLAG<<0)
+#define FLAG_u (FORCED_FLAG<<1)
+#define FLAG_c (FORCED_FLAG<<2)
+#define FLAG_r (FORCED_FLAG<<3)
+#endif
+
+#ifdef FOR_time
+#ifndef TT
+#define TT this.time
+#endif
+#define FLAG_v (FORCED_FLAG<<0)
+#define FLAG_p (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_timeout
+#ifndef TT
+#define TT this.timeout
+#endif
+#define FLAG_s (FORCED_FLAG<<0)
+#define FLAG_k (FORCED_FLAG<<1)
+#define FLAG_v (FORCED_FLAG<<2)
+#endif
+
+#ifdef FOR_top
+#ifndef TT
+#define TT this.top
+#endif
+#define FLAG_q (FORCED_FLAG<<0)
+#define FLAG_b (FORCED_FLAG<<1)
+#define FLAG_n (FORCED_FLAG<<2)
+#define FLAG_m (FORCED_FLAG<<3)
+#define FLAG_d (FORCED_FLAG<<4)
+#define FLAG_s (FORCED_FLAG<<5)
+#define FLAG_u (FORCED_FLAG<<6)
+#define FLAG_p (FORCED_FLAG<<7)
+#define FLAG_o (FORCED_FLAG<<8)
+#define FLAG_k (FORCED_FLAG<<9)
+#define FLAG_H (FORCED_FLAG<<10)
+#define FLAG_O (FORCED_FLAG<<11)
+#endif
+
+#ifdef FOR_touch
+#ifndef TT
+#define TT this.touch
+#endif
+#define FLAG_h (FORCED_FLAG<<0)
+#define FLAG_t (FORCED_FLAG<<1)
+#define FLAG_r (FORCED_FLAG<<2)
+#define FLAG_m (FORCED_FLAG<<3)
+#define FLAG_f (FORCED_FLAG<<4)
+#define FLAG_d (FORCED_FLAG<<5)
+#define FLAG_c (FORCED_FLAG<<6)
+#define FLAG_a (FORCED_FLAG<<7)
+#endif
+
+#ifdef FOR_toybox
+#ifndef TT
+#define TT this.toybox
+#endif
+#endif
+
+#ifdef FOR_tr
+#ifndef TT
+#define TT this.tr
+#endif
+#define FLAG_d (FORCED_FLAG<<0)
+#define FLAG_s (FORCED_FLAG<<1)
+#define FLAG_c (FORCED_FLAG<<2)
+#define FLAG_C (FORCED_FLAG<<3)
+#endif
+
+#ifdef FOR_traceroute
+#ifndef TT
+#define TT this.traceroute
+#endif
+#define FLAG_4 (FORCED_FLAG<<0)
+#define FLAG_6 (FORCED_FLAG<<1)
+#define FLAG_F (FORCED_FLAG<<2)
+#define FLAG_U (FORCED_FLAG<<3)
+#define FLAG_I (FORCED_FLAG<<4)
+#define FLAG_l (FORCED_FLAG<<5)
+#define FLAG_d (FORCED_FLAG<<6)
+#define FLAG_n (FORCED_FLAG<<7)
+#define FLAG_v (FORCED_FLAG<<8)
+#define FLAG_r (FORCED_FLAG<<9)
+#define FLAG_m (FORCED_FLAG<<10)
+#define FLAG_p (FORCED_FLAG<<11)
+#define FLAG_q (FORCED_FLAG<<12)
+#define FLAG_s (FORCED_FLAG<<13)
+#define FLAG_t (FORCED_FLAG<<14)
+#define FLAG_w (FORCED_FLAG<<15)
+#define FLAG_g (FORCED_FLAG<<16)
+#define FLAG_z (FORCED_FLAG<<17)
+#define FLAG_f (FORCED_FLAG<<18)
+#define FLAG_i (FORCED_FLAG<<19)
+#endif
+
+#ifdef FOR_true
+#ifndef TT
+#define TT this.true
+#endif
+#endif
+
+#ifdef FOR_truncate
+#ifndef TT
+#define TT this.truncate
+#endif
+#define FLAG_c (FORCED_FLAG<<0)
+#define FLAG_s (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_tty
+#ifndef TT
+#define TT this.tty
+#endif
+#define FLAG_s (FORCED_FLAG<<0)
+#endif
+
+#ifdef FOR_tunctl
+#ifndef TT
+#define TT this.tunctl
+#endif
+#define FLAG_T (FORCED_FLAG<<0)
+#define FLAG_u (FORCED_FLAG<<1)
+#define FLAG_d (FORCED_FLAG<<2)
+#define FLAG_t (FORCED_FLAG<<3)
+#endif
+
+#ifdef FOR_ulimit
+#ifndef TT
+#define TT this.ulimit
+#endif
+#define FLAG_c (FORCED_FLAG<<0)
+#define FLAG_d (FORCED_FLAG<<1)
+#define FLAG_e (FORCED_FLAG<<2)
+#define FLAG_f (FORCED_FLAG<<3)
+#define FLAG_i (FORCED_FLAG<<4)
+#define FLAG_l (FORCED_FLAG<<5)
+#define FLAG_m (FORCED_FLAG<<6)
+#define FLAG_n (FORCED_FLAG<<7)
+#define FLAG_p (FORCED_FLAG<<8)
+#define FLAG_q (FORCED_FLAG<<9)
+#define FLAG_R (FORCED_FLAG<<10)
+#define FLAG_r (FORCED_FLAG<<11)
+#define FLAG_s (FORCED_FLAG<<12)
+#define FLAG_t (FORCED_FLAG<<13)
+#define FLAG_u (FORCED_FLAG<<14)
+#define FLAG_v (FORCED_FLAG<<15)
+#define FLAG_a (FORCED_FLAG<<16)
+#define FLAG_H (FORCED_FLAG<<17)
+#define FLAG_S (FORCED_FLAG<<18)
+#define FLAG_P (FORCED_FLAG<<19)
+#endif
+
+#ifdef FOR_umount
+#ifndef TT
+#define TT this.umount
+#endif
+#define FLAG_v (FORCED_FLAG<<0)
+#define FLAG_t (FORCED_FLAG<<1)
+#define FLAG_a (FORCED_FLAG<<2)
+#define FLAG_r (FORCED_FLAG<<3)
+#define FLAG_l (FORCED_FLAG<<4)
+#define FLAG_f (FORCED_FLAG<<5)
+#define FLAG_D (FORCED_FLAG<<6)
+#define FLAG_d (FORCED_FLAG<<7)
+#define FLAG_n (FORCED_FLAG<<8)
+#define FLAG_c (FORCED_FLAG<<9)
+#endif
+
+#ifdef FOR_uname
+#ifndef TT
+#define TT this.uname
+#endif
+#define FLAG_s (FORCED_FLAG<<0)
+#define FLAG_n (FORCED_FLAG<<1)
+#define FLAG_r (FORCED_FLAG<<2)
+#define FLAG_v (FORCED_FLAG<<3)
+#define FLAG_m (FORCED_FLAG<<4)
+#define FLAG_a (FORCED_FLAG<<5)
+#define FLAG_o (FORCED_FLAG<<6)
+#endif
+
+#ifdef FOR_uniq
+#ifndef TT
+#define TT this.uniq
+#endif
+#define FLAG_u (FORCED_FLAG<<0)
+#define FLAG_d (FORCED_FLAG<<1)
+#define FLAG_c (FORCED_FLAG<<2)
+#define FLAG_i (FORCED_FLAG<<3)
+#define FLAG_z (FORCED_FLAG<<4)
+#define FLAG_w (FORCED_FLAG<<5)
+#define FLAG_s (FORCED_FLAG<<6)
+#define FLAG_f (FORCED_FLAG<<7)
+#endif
+
+#ifdef FOR_unix2dos
+#ifndef TT
+#define TT this.unix2dos
+#endif
+#endif
+
+#ifdef FOR_unlink
+#ifndef TT
+#define TT this.unlink
+#endif
+#endif
+
+#ifdef FOR_unshare
+#ifndef TT
+#define TT this.unshare
+#endif
+#define FLAG_user (FORCED_FLAG<<0)
+#define FLAG_U (FORCED_FLAG<<0)
+#define FLAG_uts (FORCED_FLAG<<1)
+#define FLAG_u (FORCED_FLAG<<1)
+#define FLAG_pid (FORCED_FLAG<<2)
+#define FLAG_p (FORCED_FLAG<<2)
+#define FLAG_net (FORCED_FLAG<<3)
+#define FLAG_n (FORCED_FLAG<<3)
+#define FLAG_mount (FORCED_FLAG<<4)
+#define FLAG_m (FORCED_FLAG<<4)
+#define FLAG_ipc (FORCED_FLAG<<5)
+#define FLAG_i (FORCED_FLAG<<5)
+#define FLAG_map_root_user (FORCED_FLAG<<6)
+#define FLAG_r (FORCED_FLAG<<6)
+#define FLAG_fork (FORCED_FLAG<<7)
+#define FLAG_f (FORCED_FLAG<<7)
+#endif
+
+#ifdef FOR_uptime
+#ifndef TT
+#define TT this.uptime
+#endif
+#define FLAG_s (FORCED_FLAG<<0)
+#define FLAG_p (FORCED_FLAG<<1)
+#endif
+
+#ifdef FOR_useradd
+#ifndef TT
+#define TT this.useradd
+#endif
+#define FLAG_H (FORCED_FLAG<<0)
+#define FLAG_D (FORCED_FLAG<<1)
+#define FLAG_S (FORCED_FLAG<<2)
+#define FLAG_h (FORCED_FLAG<<3)
+#define FLAG_g (FORCED_FLAG<<4)
+#define FLAG_s (FORCED_FLAG<<5)
+#define FLAG_G (FORCED_FLAG<<6)
+#define FLAG_u (FORCED_FLAG<<7)
+#endif
+
+#ifdef FOR_userdel
+#ifndef TT
+#define TT this.userdel
+#endif
+#define FLAG_r (FORCED_FLAG<<0)
+#endif
+
+#ifdef FOR_usleep
+#ifndef TT
+#define TT this.usleep
+#endif
+#endif
+
+#ifdef FOR_uudecode
+#ifndef TT
+#define TT this.uudecode
+#endif
+#define FLAG_o (FORCED_FLAG<<0)
+#endif
+
+#ifdef FOR_uuencode
+#ifndef TT
+#define TT this.uuencode
+#endif
+#define FLAG_m (FORCED_FLAG<<0)
+#endif
+
+#ifdef FOR_uuidgen
+#ifndef TT
+#define TT this.uuidgen
+#endif
+#define FLAG_random (FORCED_FLAG<<0)
+#define FLAG_r (FORCED_FLAG<<0)
+#endif
+
+#ifdef FOR_vconfig
+#ifndef TT
+#define TT this.vconfig
+#endif
+#endif
+
+#ifdef FOR_vi
+#ifndef TT
+#define TT this.vi
+#endif
+#endif
+
+#ifdef FOR_vmstat
+#ifndef TT
+#define TT this.vmstat
+#endif
+#define FLAG_n (FORCED_FLAG<<0)
+#endif
+
+#ifdef FOR_w
+#ifndef TT
+#define TT this.w
+#endif
+#endif
+
+#ifdef FOR_watch
+#ifndef TT
+#define TT this.watch
+#endif
+#define FLAG_x (FORCED_FLAG<<0)
+#define FLAG_b (FORCED_FLAG<<1)
+#define FLAG_e (FORCED_FLAG<<2)
+#define FLAG_t (FORCED_FLAG<<3)
+#define FLAG_n (FORCED_FLAG<<4)
+#endif
+
+#ifdef FOR_wc
+#ifndef TT
+#define TT this.wc
+#endif
+#define FLAG_l (FORCED_FLAG<<0)
+#define FLAG_w (FORCED_FLAG<<1)
+#define FLAG_c (FORCED_FLAG<<2)
+#define FLAG_m (FORCED_FLAG<<3)
+#endif
+
+#ifdef FOR_wget
+#ifndef TT
+#define TT this.wget
+#endif
+#define FLAG_f (FORCED_FLAG<<0)
+#endif
+
+#ifdef FOR_which
+#ifndef TT
+#define TT this.which
+#endif
+#define FLAG_a (FORCED_FLAG<<0)
+#endif
+
+#ifdef FOR_who
+#ifndef TT
+#define TT this.who
+#endif
+#define FLAG_a (FORCED_FLAG<<0)
+#endif
+
+#ifdef FOR_xargs
+#ifndef TT
+#define TT this.xargs
+#endif
+#define FLAG_0 (FORCED_FLAG<<0)
+#define FLAG_s (FORCED_FLAG<<1)
+#define FLAG_n (FORCED_FLAG<<2)
+#define FLAG_r (FORCED_FLAG<<3)
+#define FLAG_x (FORCED_FLAG<<4)
+#define FLAG_t (FORCED_FLAG<<5)
+#define FLAG_p (FORCED_FLAG<<6)
+#define FLAG_L (FORCED_FLAG<<7)
+#define FLAG_E (FORCED_FLAG<<8)
+#define FLAG_I (FORCED_FLAG<<9)
+#endif
+
+#ifdef FOR_xxd
+#ifndef TT
+#define TT this.xxd
+#endif
+#define FLAG_s (FORCED_FLAG<<0)
+#define FLAG_r (FORCED_FLAG<<1)
+#define FLAG_p (FORCED_FLAG<<2)
+#define FLAG_i (FORCED_FLAG<<3)
+#define FLAG_g (FORCED_FLAG<<4)
+#define FLAG_o (FORCED_FLAG<<5)
+#define FLAG_l (FORCED_FLAG<<6)
+#define FLAG_c (FORCED_FLAG<<7)
+#endif
+
+#ifdef FOR_xzcat
+#ifndef TT
+#define TT this.xzcat
+#endif
+#endif
+
+#ifdef FOR_yes
+#ifndef TT
+#define TT this.yes
+#endif
+#endif
+
+#ifdef FOR_zcat
+#ifndef TT
+#define TT this.zcat
+#endif
+#define FLAG_9 (FORCED_FLAG<<0)
+#define FLAG_8 (FORCED_FLAG<<1)
+#define FLAG_7 (FORCED_FLAG<<2)
+#define FLAG_6 (FORCED_FLAG<<3)
+#define FLAG_5 (FORCED_FLAG<<4)
+#define FLAG_4 (FORCED_FLAG<<5)
+#define FLAG_3 (FORCED_FLAG<<6)
+#define FLAG_2 (FORCED_FLAG<<7)
+#define FLAG_1 (FORCED_FLAG<<8)
+#define FLAG_k (FORCED_FLAG<<9)
+#define FLAG_f (FORCED_FLAG<<10)
+#define FLAG_d (FORCED_FLAG<<11)
+#define FLAG_c (FORCED_FLAG<<12)
+#endif
+
diff --git a/login/globals.h b/login/globals.h
@@ -0,0 +1,1473 @@
+// toys/android/getprop.c
+
+struct getprop_data {
+ size_t size;
+ char **nv; // name/value pairs: even=name, odd=value
+ struct selabel_handle *handle;
+};
+
+// toys/android/log.c
+
+struct log_data {
+ char *t, *p;
+};
+
+// toys/example/hello.c
+
+struct hello_data {
+ int unused;
+};
+
+// toys/example/skeleton.c
+
+struct skeleton_data {
+ union {
+ struct {
+ char *b;
+ long c;
+ struct arg_list *d;
+ long e;
+ char *also, *blubber;
+ } s;
+ struct {
+ long b;
+ } a;
+ };
+
+ int more_globals;
+};
+
+// toys/lsb/dmesg.c
+
+struct dmesg_data {
+ long n, s;
+
+ int use_color;
+ time_t tea;
+};
+
+// toys/lsb/hostname.c
+
+struct hostname_data {
+ char *F;
+};
+
+// toys/lsb/killall.c
+
+struct killall_data {
+ char *s;
+
+ int signum;
+ pid_t cur_pid;
+ char **names;
+ short *err;
+};
+
+// toys/lsb/md5sum.c
+
+struct md5sum_data {
+ struct arg_list *c;
+
+ int sawline;
+
+ // Crypto variables blanked after summing
+ unsigned state[5];
+ unsigned oldstate[5];
+ uint64_t count;
+ union {
+ char c[64];
+ unsigned i[16];
+ } buffer;
+};
+
+// toys/lsb/mknod.c
+
+struct mknod_data {
+ char *Z, *m;
+};
+
+// toys/lsb/mktemp.c
+
+struct mktemp_data {
+ char *p;
+};
+
+// toys/lsb/mount.c
+
+struct mount_data {
+ struct arg_list *optlist;
+ char *type;
+ char *bigO;
+
+ unsigned long flags;
+ char *opts;
+ int okuser;
+};
+
+// toys/lsb/passwd.c
+
+struct passwd_data {
+ char *a;
+};
+
+// toys/lsb/pidof.c
+
+struct pidof_data {
+ char *omit;
+};
+
+// toys/lsb/seq.c
+
+struct seq_data {
+ char *s, *f;
+
+ int precision;
+};
+
+// toys/lsb/su.c
+
+struct su_data {
+ char *s;
+ char *c;
+};
+
+// toys/lsb/umount.c
+
+struct umount_data {
+ struct arg_list *t;
+
+ char *types;
+};
+
+// toys/net/ftpget.c
+
+struct ftpget_data {
+ char *u, *p, *P;
+
+ int fd;
+};
+
+// toys/net/ifconfig.c
+
+struct ifconfig_data {
+ int sockfd;
+};
+
+// toys/net/microcom.c
+
+struct microcom_data {
+ char *s;
+
+ int fd;
+ struct termios original_stdin_state, original_fd_state;
+};
+
+// toys/net/netcat.c
+
+struct netcat_data {
+ char *f, *s;
+ long q, p, W, w;
+};
+
+// toys/net/netstat.c
+
+struct netstat_data {
+ struct num_cache *inodes;
+ int wpad;
+};;
+
+// toys/net/ping.c
+
+struct ping_data {
+ char *I;
+ long w, W, i, s, c, t, m;
+
+ struct sockaddr *sa;
+ int sock;
+ unsigned long sent, recv, fugit, min, max;
+};
+
+// toys/net/tunctl.c
+
+struct tunctl_data {
+ char *u;
+};
+
+// toys/other/acpi.c
+
+struct acpi_data {
+ int ac, bat, therm, cool;
+ char *cpath;
+};
+
+// toys/other/base64.c
+
+struct base64_data {
+ long w;
+
+ unsigned total;
+};
+
+// toys/other/blockdev.c
+
+struct blockdev_data {
+ long setbsz, setra;
+};
+
+// toys/other/chrt.c
+
+struct chrt_data {
+ long p;
+};
+
+// toys/other/dos2unix.c
+
+struct dos2unix_data {
+ char *tempfile;
+};
+
+// toys/other/fallocate.c
+
+struct fallocate_data {
+ long offset;
+ long size;
+};
+
+// toys/other/fmt.c
+
+struct fmt_data {
+ int width;
+
+ int level, pos;
+};
+
+// toys/other/free.c
+
+struct free_data {
+ unsigned bits;
+ unsigned long long units;
+ char *buf;
+};
+
+// toys/other/hexedit.c
+
+struct hexedit_data {
+ char *data;
+ long long len, base;
+ int numlen, undo, undolen;
+ unsigned height;
+};
+
+// toys/other/hwclock.c
+
+struct hwclock_data {
+ char *fname;
+
+ int utc;
+};
+
+// toys/other/ionice.c
+
+struct ionice_data {
+ long pid;
+ long level;
+ long class;
+};
+
+// toys/other/login.c
+
+struct login_data {
+ char *hostname;
+ char *username;
+
+ int login_timeout, login_fail_timeout;
+};
+
+// toys/other/losetup.c
+
+struct losetup_data {
+ char *jfile;
+ long offset;
+ long size;
+
+ int openflags;
+ dev_t jdev;
+ ino_t jino;
+};
+
+// toys/other/lspci.c
+
+struct lspci_data {
+ char *i;
+ long n;
+
+ FILE *db;
+};
+
+// toys/other/makedevs.c
+
+struct makedevs_data {
+ char *fname;
+};
+
+// toys/other/mix.c
+
+struct mix_data {
+ long r, l;
+ char *d, *c;
+};
+
+// toys/other/mkpasswd.c
+
+struct mkpasswd_data {
+ long P;
+ char *m, *S;
+};
+
+// toys/other/mkswap.c
+
+struct mkswap_data {
+ char *L;
+};
+
+// toys/other/modinfo.c
+
+struct modinfo_data {
+ char *F, *k, *b;
+
+ long mod;
+};
+
+// toys/other/nsenter.c
+
+struct nsenter_data {
+ char *Uupnmi[6];
+ long t;
+};
+
+// toys/other/oneit.c
+
+struct oneit_data {
+ char *c;
+};
+
+// toys/other/setfattr.c
+
+struct setfattr_data {
+ char *x, *v, *n;
+};
+
+// toys/other/shred.c
+
+struct shred_data {
+ long o, n, s;
+};
+
+// toys/other/stat.c
+
+struct stat_data {
+ char *c;
+
+ union {
+ struct stat st;
+ struct statfs sf;
+ } stat;
+ char *file, *pattern;
+ int patlen;
+};
+
+// toys/other/swapon.c
+
+struct swapon_data {
+ long p;
+};
+
+// toys/other/switch_root.c
+
+struct switch_root_data {
+ char *c;
+
+ dev_t rootdev;
+};
+
+// toys/other/timeout.c
+
+struct timeout_data {
+ char *s, *k;
+
+ int nextsig;
+ pid_t pid;
+ struct timeval ktv;
+ struct itimerval itv;
+};
+
+// toys/other/truncate.c
+
+struct truncate_data {
+ char *s;
+
+ long size;
+ int type;
+};
+
+// toys/other/watch.c
+
+struct watch_data {
+ int n;
+
+ pid_t pid, oldpid;
+};
+
+// toys/other/xxd.c
+
+struct xxd_data {
+ long s, g, o, l, c;
+};
+
+// toys/pending/arp.c
+
+struct arp_data {
+ char *hw_type;
+ char *af_type_A;
+ char *af_type_p;
+ char *interface;
+
+ int sockfd;
+ char *device;
+};
+
+// toys/pending/arping.c
+
+struct arping_data {
+ long count;
+ unsigned long time_out;
+ char *iface;
+ char *src_ip;
+
+ int sockfd;
+ unsigned long start, end;
+ unsigned sent_at, sent_nr, rcvd_nr, brd_sent, rcvd_req, brd_rcv,
+ unicast_flag;
+};
+
+// toys/pending/bc.c
+
+struct bc_data {
+ long tty;
+ long ttyin;
+
+ unsigned long sig;
+ unsigned long sigc;
+ unsigned long signe;
+ long sig_other;
+};
+
+// toys/pending/bootchartd.c
+
+struct bootchartd_data {
+ char buf[32];
+ long smpl_period_usec;
+ int proc_accounting;
+ int is_login;
+
+ void *head;
+};
+
+// toys/pending/brctl.c
+
+struct brctl_data {
+ int sockfd;
+};
+
+// toys/pending/crond.c
+
+struct crond_data {
+ char *crontabs_dir;
+ char *logfile;
+ int loglevel_d;
+ int loglevel;
+
+ time_t crontabs_dir_mtime;
+ uint8_t flagd;
+};
+
+// toys/pending/crontab.c
+
+struct crontab_data {
+ char *user;
+ char *cdir;
+};
+
+// toys/pending/dd.c
+
+struct dd_data {
+ int show_xfer, show_records;
+ unsigned long long bytes, c_count, in_full, in_part, out_full, out_part;
+ struct timeval start;
+ struct {
+ char *name;
+ int fd;
+ unsigned char *buff, *bp;
+ long sz, count;
+ unsigned long long offset;
+ } in, out;
+};;
+
+// toys/pending/dhcp.c
+
+struct dhcp_data {
+ char *iface;
+ char *pidfile;
+ char *script;
+ long retries;
+ long timeout;
+ long tryagain;
+ struct arg_list *req_opt;
+ char *req_ip;
+ struct arg_list *pkt_opt;
+ char *fdn_name;
+ char *hostname;
+ char *vendor_cls;
+};
+
+// toys/pending/dhcp6.c
+
+struct dhcp6_data {
+ char *interface_name, *pidfile, *script;
+ long retry, timeout, errortimeout;
+ char *req_ip;
+ int length, state, request_length, sock, sock1, status, retval, retries;
+ struct timeval tv;
+ uint8_t transction_id[3];
+ struct sockaddr_in6 input_socket6;
+};
+
+// toys/pending/dhcpd.c
+
+struct dhcpd_data {
+ char *iface;
+ long port;
+};;
+
+// toys/pending/diff.c
+
+struct diff_data {
+ long ct;
+ char *start;
+ struct arg_list *L_list;
+
+ int dir_num, size, is_binary, status, change, len[2];
+ int *offset[2];
+ struct stat st[2];
+};
+
+// toys/pending/dumpleases.c
+
+struct dumpleases_data {
+ char *file;
+};
+
+// toys/pending/expr.c
+
+struct expr_data {
+ char **tok; // current token, not on the stack since recursive calls mutate it
+
+ char *refree;
+};
+
+// toys/pending/fdisk.c
+
+struct fdisk_data {
+ long sect_sz;
+ long sectors;
+ long heads;
+ long cylinders;
+};
+
+// toys/pending/fold.c
+
+struct fold_data {
+ int width;
+};
+
+// toys/pending/fsck.c
+
+struct fsck_data {
+ int fd_num;
+ char *t_list;
+
+ struct double_list *devices;
+ char *arr_flag;
+ char **arr_type;
+ int negate;
+ int sum_status;
+ int nr_run;
+ int sig_num;
+ long max_nr_run;
+};
+
+// toys/pending/getfattr.c
+
+struct getfattr_data {
+ char *n;
+};
+
+// toys/pending/getty.c
+
+struct getty_data {
+ char *issue_str;
+ char *login_str;
+ char *init_str;
+ char *host_str;
+ long timeout;
+
+ char *tty_name;
+ int speeds[20];
+ int sc;
+ struct termios termios;
+ char buff[128];
+};
+
+// toys/pending/groupadd.c
+
+struct groupadd_data {
+ long gid;
+};
+
+// toys/pending/gzip.c
+
+struct gzip_data {
+ int level;
+};
+
+// toys/pending/host.c
+
+struct host_data {
+ char *type_str;
+};
+
+// toys/pending/ip.c
+
+struct ip_data {
+ char stats, singleline, flush, *filter_dev, gbuf[8192];
+ int sockfd, connected, from_ok, route_cmd;
+ int8_t addressfamily, is_addr;
+};
+
+// toys/pending/ipcrm.c
+
+struct ipcrm_data {
+ struct arg_list *qkey;
+ struct arg_list *qid;
+ struct arg_list *skey;
+ struct arg_list *sid;
+ struct arg_list *mkey;
+ struct arg_list *mid;
+};
+
+// toys/pending/ipcs.c
+
+struct ipcs_data {
+ int id;
+};
+
+// toys/pending/klogd.c
+
+struct klogd_data {
+ long level;
+
+ int fd;
+};
+
+// toys/pending/last.c
+
+struct last_data {
+ char *file;
+
+ struct arg_list *list;
+};
+
+// toys/pending/lsof.c
+
+struct lsof_data {
+ struct arg_list *p;
+
+ struct stat *sought_files;
+ struct double_list *all_sockets, *files;
+ int last_shown_pid, shown_header;
+};
+
+// toys/pending/mke2fs.c
+
+struct mke2fs_data {
+ // Command line arguments.
+ long blocksize;
+ long bytes_per_inode;
+ long inodes; // Total inodes in filesystem.
+ long reserved_percent; // Integer precent of space to reserve for root.
+ char *gendir; // Where to read dirtree from.
+
+ // Internal data.
+ struct dirtree *dt; // Tree of files to copy into the new filesystem.
+ unsigned treeblocks; // Blocks used by dt
+ unsigned treeinodes; // Inodes used by dt
+
+ unsigned blocks; // Total blocks in the filesystem.
+ unsigned freeblocks; // Free blocks in the filesystem.
+ unsigned inodespg; // Inodes per group
+ unsigned groups; // Total number of block groups.
+ unsigned blockbits; // Bits per block. (Also blocks per group.)
+
+ // For gene2fs
+ unsigned nextblock; // Next data block to allocate
+ unsigned nextgroup; // Next group we'll be allocating from
+ int fsfd; // File descriptor of filesystem (to output to).
+};
+
+// toys/pending/modprobe.c
+
+struct modprobe_data {
+ struct arg_list *dirs;
+
+ struct arg_list *probes;
+ struct arg_list *dbase[256];
+ char *cmdopts;
+ int nudeps;
+ uint8_t symreq;
+};
+
+// toys/pending/more.c
+
+struct more_data {
+ struct termios inf;
+ int cin_fd;
+};
+
+// toys/pending/openvt.c
+
+struct openvt_data {
+ unsigned long vt_num;
+};
+
+// toys/pending/route.c
+
+struct route_data {
+ char *family;
+};
+
+// toys/pending/sh.c
+
+struct sh_data {
+ char *command;
+
+ long lineno;
+};
+
+// toys/pending/stty.c
+
+struct stty_data {
+ char *device;
+
+ int fd, col;
+ unsigned output_cols;
+};
+
+// toys/pending/sulogin.c
+
+struct sulogin_data {
+ long timeout;
+ struct termios crntio;
+};
+
+// toys/pending/syslogd.c
+
+struct syslogd_data {
+ char *socket;
+ char *config_file;
+ char *unix_socket;
+ char *logfile;
+ long interval;
+ long rot_size;
+ long rot_count;
+ char *remote_log;
+ long log_prio;
+
+ struct unsocks *lsocks; // list of listen sockets
+ struct logfile *lfiles; // list of write logfiles
+ int sigfd[2];
+};
+
+// toys/pending/tar.c
+
+struct tar_data {
+ char *fname;
+ char *dir;
+ struct arg_list *inc_file;
+ struct arg_list *exc_file;
+ char *tocmd;
+ struct arg_list *exc;
+
+ struct arg_list *inc, *pass;
+ void *inodes, *handle;
+};
+
+// toys/pending/tcpsvd.c
+
+struct tcpsvd_data {
+ char *name;
+ char *user;
+ long bn;
+ char *nmsg;
+ long cn;
+
+ int maxc;
+ int count_all;
+ int udp;
+};
+
+// toys/pending/telnet.c
+
+struct telnet_data {
+ int port;
+ int sfd;
+ char buff[128];
+ int pbuff;
+ char iac[256];
+ int piac;
+ char *ttype;
+ struct termios def_term;
+ struct termios raw_term;
+ uint8_t term_ok;
+ uint8_t term_mode;
+ uint8_t flags;
+ unsigned win_width;
+ unsigned win_height;
+};
+
+// toys/pending/telnetd.c
+
+struct telnetd_data {
+ char *login_path;
+ char *issue_path;
+ int port;
+ char *host_addr;
+ long w_sec;
+
+ int gmax_fd;
+ pid_t fork_pid;
+};
+
+// toys/pending/tftp.c
+
+struct tftp_data {
+ char *local_file;
+ char *remote_file;
+ long block_size;
+
+ struct sockaddr_storage inaddr;
+ int af;
+};
+
+// toys/pending/tftpd.c
+
+struct tftpd_data {
+ char *user;
+
+ long sfd;
+ struct passwd *pw;
+};
+
+// toys/pending/tr.c
+
+struct tr_data {
+ short map[256]; //map of chars
+ int len1, len2;
+};
+
+// toys/pending/traceroute.c
+
+struct traceroute_data {
+ long max_ttl;
+ long port;
+ long ttl_probes;
+ char *src_ip;
+ long tos;
+ long wait_time;
+ struct arg_list *loose_source;
+ long pause_time;
+ long first_ttl;
+ char *iface;
+
+ uint32_t gw_list[9];
+ int recv_sock;
+ int snd_sock;
+ unsigned msg_len;
+ char *packet;
+ uint32_t ident;
+ int istraceroute6;
+};
+
+// toys/pending/useradd.c
+
+struct useradd_data {
+ char *dir;
+ char *gecos;
+ char *shell;
+ char *u_grp;
+ long uid;
+
+ long gid;
+};
+
+// toys/pending/vi.c
+
+struct vi_data {
+ struct linestack *ls;
+ char *statline;
+};
+
+// toys/pending/wget.c
+
+struct wget_data {
+ char *filename;
+};
+
+// toys/posix/basename.c
+
+struct basename_data {
+ char *s;
+};
+
+// toys/posix/chgrp.c
+
+struct chgrp_data {
+ uid_t owner;
+ gid_t group;
+ char *owner_name, *group_name;
+ int symfollow;
+};
+
+// toys/posix/chmod.c
+
+struct chmod_data {
+ char *mode;
+};
+
+// toys/posix/cksum.c
+
+struct cksum_data {
+ unsigned crc_table[256];
+};
+
+// toys/posix/cmp.c
+
+struct cmp_data {
+ int fd;
+ char *name;
+};
+
+// toys/posix/cp.c
+
+struct cp_data {
+ union {
+ // install's options
+ struct {
+ char *g, *o, *m;
+ } i;
+ // cp's options
+ struct {
+ char *preserve;
+ } c;
+ };
+
+ char *destname;
+ struct stat top;
+ int (*callback)(struct dirtree *try);
+ uid_t uid;
+ gid_t gid;
+ int pflags;
+};
+
+// toys/posix/cpio.c
+
+struct cpio_data {
+ char *F, *p, *H;
+};
+
+// toys/posix/cut.c
+
+struct cut_data {
+ char *d, *O;
+ struct arg_list *select[5]; // we treat them the same, so loop through
+
+ int pairs;
+ regex_t reg;
+};
+
+// toys/posix/date.c
+
+struct date_data {
+ char *r, *D, *d;
+
+ unsigned nano;
+};
+
+// toys/posix/df.c
+
+struct df_data {
+ struct arg_list *t;
+
+ long units;
+ int column_widths[5];
+ int header_shown;
+};
+
+// toys/posix/du.c
+
+struct du_data {
+ long d;
+
+ unsigned long depth, total;
+ dev_t st_dev;
+ void *inodes;
+};
+
+// toys/posix/env.c
+
+struct env_data {
+ struct arg_list *u;
+};;
+
+// toys/posix/expand.c
+
+struct expand_data {
+ struct arg_list *t;
+
+ unsigned tabcount, *tab;
+};
+
+// toys/posix/file.c
+
+struct file_data {
+ int max_name_len;
+
+ off_t len;
+};
+
+// toys/posix/find.c
+
+struct find_data {
+ char **filter;
+ struct double_list *argdata;
+ int topdir, xdev, depth;
+ time_t now;
+ long max_bytes;
+};
+
+// toys/posix/grep.c
+
+struct grep_data {
+ long m, A, B, C;
+ struct arg_list *f, *e, *M, *S;
+
+ char indelim, outdelim;
+ int found;
+};
+
+// toys/posix/head.c
+
+struct head_data {
+ long c, n;
+
+ int file_no;
+};
+
+// toys/posix/iconv.c
+
+struct iconv_data {
+ char *f, *t;
+
+ void *ic;
+};
+
+// toys/posix/id.c
+
+struct id_data {
+ int is_groups;
+};
+
+// toys/posix/kill.c
+
+struct kill_data {
+ char *s;
+ struct arg_list *o;
+};
+
+// toys/posix/logger.c
+
+struct logger_data {
+ char *p, *t;
+};
+
+// toys/posix/ls.c
+
+struct ls_data {
+ long l;
+ char *color;
+
+ struct dirtree *files, *singledir;
+ unsigned screen_width;
+ int nl_title;
+ char *escmore;
+};
+
+// toys/posix/mkdir.c
+
+struct mkdir_data {
+ char *m, *Z;
+};
+
+// toys/posix/mkfifo.c
+
+struct mkfifo_data {
+ char *m;
+ char *Z;
+
+ mode_t mode;
+};
+
+// toys/posix/nice.c
+
+struct nice_data {
+ long n;
+};
+
+// toys/posix/nl.c
+
+struct nl_data {
+ char *s, *n, *b;
+ long w, l, v;
+
+ // Count of consecutive blank lines for -l has to persist between files
+ long lcount;
+};
+
+// toys/posix/od.c
+
+struct od_data {
+ struct arg_list *t;
+ char *A;
+ long N, w, j;
+
+ int address_idx;
+ unsigned types, leftover, star;
+ char *buf; // Points to buffers[0] or buffers[1].
+ char *bufs[2]; // Used to detect duplicate lines.
+ off_t pos;
+};
+
+// toys/posix/paste.c
+
+struct paste_data {
+ char *d;
+
+ int files;
+};
+
+// toys/posix/patch.c
+
+struct patch_data {
+ char *i, *d;
+ long p;
+
+ struct double_list *current_hunk;
+ long oldline, oldlen, newline, newlen;
+ long linenum;
+ int context, state, filein, fileout, filepatch, hunknum;
+ char *tempname;
+};
+
+// toys/posix/ps.c
+
+struct ps_data {
+ union {
+ struct {
+ struct arg_list *G, *g, *U, *u, *t, *s, *p, *O, *o, *P, *k;
+ } ps;
+ struct {
+ long n, m, d, s;
+ struct arg_list *u, *p, *o, *k, *O;
+ } top;
+ struct {
+ char *L;
+ struct arg_list *G, *g, *P, *s, *t, *U, *u;
+ char *d;
+
+ void *regexes, *snapshot;
+ int signal;
+ pid_t self, match;
+ } pgrep;
+ };
+
+ struct sysinfo si;
+ struct ptr_len gg, GG, pp, PP, ss, tt, uu, UU;
+ struct dirtree *threadparent;
+ unsigned width, height;
+ dev_t tty;
+ void *fields, *kfields;
+ long long ticks, bits, time;
+ int kcount, forcek, sortpos;
+ int (*match_process)(long long *slot);
+ void (*show_process)(void *tb);
+};
+
+// toys/posix/renice.c
+
+struct renice_data {
+ long n;
+};
+
+// toys/posix/sed.c
+
+struct sed_data {
+ struct arg_list *f, *e;
+
+ // processed pattern list
+ struct double_list *pattern;
+
+ char *nextline, *remember;
+ void *restart, *lastregex;
+ long nextlen, rememberlen, count;
+ int fdout, noeol;
+ unsigned xx;
+};
+
+// toys/posix/sort.c
+
+struct sort_data {
+ char *t;
+ struct arg_list *k;
+ char *o, *T, S;
+
+ void *key_list;
+ int linecount;
+ char **lines;
+};
+
+// toys/posix/split.c
+
+struct split_data {
+ long l, b, a;
+
+ char *outfile;
+};
+
+// toys/posix/strings.c
+
+struct strings_data {
+ long n;
+ char *t;
+};
+
+// toys/posix/tail.c
+
+struct tail_data {
+ long n, c;
+
+ int file_no, ffd, *files;
+};
+
+// toys/posix/tee.c
+
+struct tee_data {
+ void *outputs;
+};
+
+// toys/posix/touch.c
+
+struct touch_data {
+ char *t, *r, *d;
+};
+
+// toys/posix/ulimit.c
+
+struct ulimit_data {
+ long P;
+};
+
+// toys/posix/uniq.c
+
+struct uniq_data {
+ long w, s, f;
+
+ long repeats;
+};
+
+// toys/posix/uudecode.c
+
+struct uudecode_data {
+ char *o;
+};
+
+// toys/posix/wc.c
+
+struct wc_data {
+ unsigned long totals[4];
+};
+
+// toys/posix/xargs.c
+
+struct xargs_data {
+ long s, n, L;
+ char *E, *I;
+
+ long entries, bytes;
+ char delim;
+};
+
+extern union global_union {
+ struct getprop_data getprop;
+ struct log_data log;
+ struct hello_data hello;
+ struct skeleton_data skeleton;
+ struct dmesg_data dmesg;
+ struct hostname_data hostname;
+ struct killall_data killall;
+ struct md5sum_data md5sum;
+ struct mknod_data mknod;
+ struct mktemp_data mktemp;
+ struct mount_data mount;
+ struct passwd_data passwd;
+ struct pidof_data pidof;
+ struct seq_data seq;
+ struct su_data su;
+ struct umount_data umount;
+ struct ftpget_data ftpget;
+ struct ifconfig_data ifconfig;
+ struct microcom_data microcom;
+ struct netcat_data netcat;
+ struct netstat_data netstat;
+ struct ping_data ping;
+ struct tunctl_data tunctl;
+ struct acpi_data acpi;
+ struct base64_data base64;
+ struct blockdev_data blockdev;
+ struct chrt_data chrt;
+ struct dos2unix_data dos2unix;
+ struct fallocate_data fallocate;
+ struct fmt_data fmt;
+ struct free_data free;
+ struct hexedit_data hexedit;
+ struct hwclock_data hwclock;
+ struct ionice_data ionice;
+ struct login_data login;
+ struct losetup_data losetup;
+ struct lspci_data lspci;
+ struct makedevs_data makedevs;
+ struct mix_data mix;
+ struct mkpasswd_data mkpasswd;
+ struct mkswap_data mkswap;
+ struct modinfo_data modinfo;
+ struct nsenter_data nsenter;
+ struct oneit_data oneit;
+ struct setfattr_data setfattr;
+ struct shred_data shred;
+ struct stat_data stat;
+ struct swapon_data swapon;
+ struct switch_root_data switch_root;
+ struct timeout_data timeout;
+ struct truncate_data truncate;
+ struct watch_data watch;
+ struct xxd_data xxd;
+ struct arp_data arp;
+ struct arping_data arping;
+ struct bc_data bc;
+ struct bootchartd_data bootchartd;
+ struct brctl_data brctl;
+ struct crond_data crond;
+ struct crontab_data crontab;
+ struct dd_data dd;
+ struct dhcp_data dhcp;
+ struct dhcp6_data dhcp6;
+ struct dhcpd_data dhcpd;
+ struct diff_data diff;
+ struct dumpleases_data dumpleases;
+ struct expr_data expr;
+ struct fdisk_data fdisk;
+ struct fold_data fold;
+ struct fsck_data fsck;
+ struct getfattr_data getfattr;
+ struct getty_data getty;
+ struct groupadd_data groupadd;
+ struct gzip_data gzip;
+ struct host_data host;
+ struct ip_data ip;
+ struct ipcrm_data ipcrm;
+ struct ipcs_data ipcs;
+ struct klogd_data klogd;
+ struct last_data last;
+ struct lsof_data lsof;
+ struct mke2fs_data mke2fs;
+ struct modprobe_data modprobe;
+ struct more_data more;
+ struct openvt_data openvt;
+ struct route_data route;
+ struct sh_data sh;
+ struct stty_data stty;
+ struct sulogin_data sulogin;
+ struct syslogd_data syslogd;
+ struct tar_data tar;
+ struct tcpsvd_data tcpsvd;
+ struct telnet_data telnet;
+ struct telnetd_data telnetd;
+ struct tftp_data tftp;
+ struct tftpd_data tftpd;
+ struct tr_data tr;
+ struct traceroute_data traceroute;
+ struct useradd_data useradd;
+ struct vi_data vi;
+ struct wget_data wget;
+ struct basename_data basename;
+ struct chgrp_data chgrp;
+ struct chmod_data chmod;
+ struct cksum_data cksum;
+ struct cmp_data cmp;
+ struct cp_data cp;
+ struct cpio_data cpio;
+ struct cut_data cut;
+ struct date_data date;
+ struct df_data df;
+ struct du_data du;
+ struct env_data env;
+ struct expand_data expand;
+ struct file_data file;
+ struct find_data find;
+ struct grep_data grep;
+ struct head_data head;
+ struct iconv_data iconv;
+ struct id_data id;
+ struct kill_data kill;
+ struct logger_data logger;
+ struct ls_data ls;
+ struct mkdir_data mkdir;
+ struct mkfifo_data mkfifo;
+ struct nice_data nice;
+ struct nl_data nl;
+ struct od_data od;
+ struct paste_data paste;
+ struct patch_data patch;
+ struct ps_data ps;
+ struct renice_data renice;
+ struct sed_data sed;
+ struct sort_data sort;
+ struct split_data split;
+ struct strings_data strings;
+ struct tail_data tail;
+ struct tee_data tee;
+ struct touch_data touch;
+ struct ulimit_data ulimit;
+ struct uniq_data uniq;
+ struct uudecode_data uudecode;
+ struct wc_data wc;
+ struct xargs_data xargs;
+} this;
diff --git a/login/help.h b/login/help.h
@@ -0,0 +1,618 @@
+#define HELP_toybox_musl_nommu_is_broken "When using musl-libc on a nommu system, you'll need to say \"y\" here.\n\nAlthough uclibc lets you detect support for things like fork() and\ndaemon() at compile time, musl intentionally includes broken versions\nthat always return -ENOSYS on nommu systems, and goes out of its way\nto prevent any cross-compile compatible compile-time probes for a\nnommu system. (It doesn't even #define __MUSL__ in features.h.)\n\nMusl does this despite the fact that a nommu system can't even run\nstandard ELF binaries, and requires specially packaged executables.\nSo our only choice is to manually provide a musl nommu bug workaround\nyou can manually select to enable (larger, slower) nommu support with\nmusl.\n\n"
+
+#define HELP_toybox_uid_usr "When commands like useradd/groupadd allocate user IDs, start here.\n\n"
+
+#define HELP_toybox_uid_sys "When commands like useradd/groupadd allocate system IDs, start here.\n\n"
+
+#define HELP_toybox_pedantic_args "Check arguments for commands that have no arguments.\n\n"
+
+#define HELP_toybox_debug "Enable extra checks for debugging purposes. All of them catch\nthings that can only go wrong at development time, not runtime.\n\n"
+
+#define HELP_toybox_norecurse "When one toybox command calls another, usually it just calls the new\ncommand's main() function rather than searching the $PATH and calling\nexec on another file (which is much slower).\n\nThis disables that optimization, so toybox will run external commands\n even when it has a built-in version of that command. This requires\n toybox symlinks to be installed in the $PATH, or re-invoking the\n \"toybox\" multiplexer command by name.\n\n"
+
+#define HELP_toybox_free "When a program exits, the operating system will clean up after it\n(free memory, close files, etc). To save size, toybox usually relies\non this behavior. If you're running toybox under a debugger or\nwithout a real OS (ala newlib+libgloss), enable this to make toybox\nclean up after itself.\n\n"
+
+#define HELP_toybox_i18n "Support for UTF-8 character sets, and some locale support.\n\n"
+
+#define HELP_toybox_help_dashdash "Support --help argument in all commands, even ones with a NULL\noptstring. (Use TOYFLAG_NOHELP to disable.) Produces the same output\nas \"help command\". --version shows toybox version.\n\n"
+
+#define HELP_toybox_help "Include help text for each command.\n\n"
+
+#define HELP_toybox_float "Include floating point support infrastructure and commands that\nrequire it.\n\n"
+
+#define HELP_toybox_libz "Use libz for gz support.\n\n"
+
+#define HELP_toybox_libcrypto "Use faster hash functions out of exteral -lcrypto library.\n\n"
+
+#define HELP_toybox_smack "Include SMACK options in commands like ls for systems like Tizen.\n\n\n"
+
+#define HELP_toybox_selinux "Include SELinux options in commands such as ls, and add\nSELinux-specific commands such as chcon to the Android menu.\n\n"
+
+#define HELP_toybox_lsm_none "Don't try to achieve \"watertight\" by plugging the holes in a\ncollander, instead use conventional unix security (and possibly\nLinux Containers) for a simple straightforward system.\n\n"
+
+#define HELP_toybox_suid "Support for the Set User ID bit, to install toybox suid root and drop\npermissions for commands which do not require root access. To use\nthis change ownership of the file to the root user and set the suid\nbit in the file permissions:\n\nchown root:root toybox; chmod +s toybox\n\nprompt \"Security Blanket\"\ndefault TOYBOX_LSM_NONE\nhelp\nSelect a Linux Security Module to complicate your system\nuntil you can't find holes in it.\n\n"
+
+#define HELP_toybox "usage: toybox [--long | --help | --version | [command] [arguments...]]\n\nWith no arguments, shows available commands. First argument is\nname of a command to run, followed by any arguments to that command.\n\n--long Show path to each command\n\nTo install command symlinks, try:\n for i in $(/bin/toybox --long); do ln -s /bin/toybox $i; done\n\nMost toybox commands also understand the following arguments:\n\n--help Show command help (only)\n--version Show toybox version (only)\n\nThe filename \"-\" means stdin, \"--\" stops argument parsing,\nand numerical arguments accept a single letter suffix for\nkilo, mega, giga, tera, peta, and exabytes, plus an additional\n\"d\" to indicate decimal 1000's instead of 1024. Durations take\n minute, hour, or day suffixes (ala 0.1m = 6s).\n\n"
+
+#define HELP_stop "usage: stop [SERVICE...]\n\nStop the given system service, or netd/surfaceflinger/zygotes.\n\n"
+
+#define HELP_start "usage: start [SERVICE...]\n\nStarts the given system service, or netd/surfaceflinger/zygotes.\n\n"
+
+#define HELP_setprop "usage: setprop NAME VALUE\n\nSets an Android system property.\n\n"
+
+#define HELP_setenforce "usage: setenforce [enforcing|permissive|1|0]\n\nSets whether SELinux is enforcing (1) or permissive (0).\n\n"
+
+#define HELP_sendevent "usage: sendevent DEVICE TYPE CODE VALUE\n\nSends a Linux input event.\n\n"
+
+#define HELP_runcon "usage: runcon CONTEXT COMMAND [ARGS...]\n\nRun a command in a specified security context.\n\n"
+
+#define HELP_restorecon "usage: restorecon [-D] [-F] [-R] [-n] [-v] FILE...\n\nRestores the default security contexts for the given files.\n\n-D apply to /data/data too\n-F force reset\n-R recurse into directories\n-n don't make any changes; useful with -v to see what would change\n-v verbose: show any changes\n\n"
+
+#define HELP_log "usage: log [-p PRI] [-t TAG] MESSAGE...\n\nLogs message to logcat.\n\n-p use the given priority instead of INFO:\n d: DEBUG e: ERROR f: FATAL i: INFO v: VERBOSE w: WARN s: SILENT\n-t use the given tag instead of \"log\"\n\n"
+
+#define HELP_load_policy "usage: load_policy FILE\n\nLoad the specified policy file.\n\n"
+
+#define HELP_getprop "usage: getprop [NAME [DEFAULT]]\n\nGets an Android system property, or lists them all.\n\n"
+
+#define HELP_getenforce "usage: getenforce\n\nShows whether SELinux is disabled, enforcing, or permissive.\n\n"
+
+#define HELP_skeleton_alias "usage: skeleton_alias [-dq] [-b NUMBER]\n\nExample of a second command with different arguments in the same source\nfile as the first. This allows shared infrastructure not added to lib/.\n\n\n"
+
+#define HELP_skeleton "usage: skeleton [-a] [-b STRING] [-c NUMBER] [-d LIST] [-e COUNT] [...]\n\nTemplate for new commands. You don't need this.\n\nWhen creating a new command, copy this file and delete the parts you\ndon't need. Be sure to replace all instances of \"skeleton\" (upper and lower\ncase) with your new command name.\n\nFor simple commands, \"hello.c\" is probably a better starting point.\n\n"
+
+#define HELP_hostid "usage: hostid\n\nPrint the numeric identifier for the current host.\n\n"
+
+#define HELP_hello "usage: hello\n\nA hello world program.\n\nMostly used as a simple template for adding new commands.\nOccasionally nice to smoketest kernel booting via \"init=/usr/bin/hello\".\n\n"
+
+#define HELP_demo_utf8towc "usage: demo_utf8towc\n\nPrint differences between toybox's utf8 conversion routines vs libc du jour.\n\n"
+
+#define HELP_demo_scankey "usage: demo_scankey\n\nMove a letter around the screen. Hit ESC to exit.\n\n"
+
+#define HELP_demo_number "usage: demo_number [-hsbi] NUMBER...\n\n-b Use \"B\" for single byte units (HR_B)\n-d Decimal units\n-h human readable\n-s Space between number and units (HR_SPACE)\n\n"
+
+#define HELP_demo_many_options "usage: demo_many_options -[a-zA-Z]\n\nPrint the optflags value of the command arguments, in hex.\n\n"
+
+#define HELP_umount "usage: umount [-a [-t TYPE[,TYPE...]]] [-vrfD] [DIR...]\n\nUnmount the listed filesystems.\n\n-a Unmount all mounts in /proc/mounts instead of command line list\n-D Don't free loopback device(s)\n-f Force unmount\n-l Lazy unmount (detach from filesystem now, close when last user does)\n-n Don't use /proc/mounts\n-r Remount read only if unmounting fails\n-t Restrict \"all\" to mounts of TYPE (or use \"noTYPE\" to skip)\n-v Verbose\n\n\n"
+
+#define HELP_sync "usage: sync\n\nWrite pending cached data to disk (synchronize), blocking until done.\n\n"
+
+#define HELP_su "usage: su [-lmp] [-c CMD] [-s SHELL] [USER [ARGS...]]\n\nSwitch to user (or root) and run shell (with optional command line).\n\n-s shell to use\n-c command to pass to shell with -c\n-l login shell\n-(m|p) preserve environment\n\n"
+
+#define HELP_seq "usage: seq [-w|-f fmt_str] [-s sep_str] [first] [increment] last\n\nCount from first to last, by increment. Omitted arguments default\nto 1. Two arguments are used as first and last. Arguments can be\nnegative or floating point.\n\n-f Use fmt_str as a printf-style floating point format string\n-s Use sep_str as separator, default is a newline character\n-w Pad to equal width with leading zeroes\n\n"
+
+#define HELP_pidof "usage: pidof [-s] [-o omitpid[,omitpid...]] [NAME]...\n\nPrint the PIDs of all processes with the given names.\n\n-s single shot, only return one pid\n-o omit PID(s)\n\n"
+
+#define HELP_passwd_sad "Password changes are checked to make sure they're at least 6 chars long,\ndon't include the entire username (but not a subset of it), or the entire\nprevious password (but changing password1, password2, password3 is fine).\nThis heuristic accepts \"aaaaaa\" and \"123456\".\n\n"
+
+#define HELP_passwd "usage: passwd [-a ALGO] [-dlu] <account name>\n\nupdate user's authentication tokens. Default : current user\n\n-a ALGO Encryption method (des, md5, sha256, sha512) default: des\n-d Set password to ''\n-l Lock (disable) account\n-u Unlock (enable) account\n\n"
+
+#define HELP_mount "usage: mount [-afFrsvw] [-t TYPE] [-o OPTION,] [[DEVICE] DIR]\n\nMount new filesystem(s) on directories. With no arguments, display existing\nmounts.\n\n-a mount all entries in /etc/fstab (with -t, only entries of that TYPE)\n-O only mount -a entries that have this option\n-f fake it (don't actually mount)\n-r read only (same as -o ro)\n-w read/write (default, same as -o rw)\n-t specify filesystem type\n-v verbose\n\nOPTIONS is a comma separated list of options, which can also be supplied\nas --longopts.\n\nThis mount autodetects loopback mounts (a file on a directory) and\nbind mounts (file on file, directory on directory), so you don't need\nto say --bind or --loop. You can also \"mount -a /path\" to mount everything\nin /etc/fstab under /path, even if it's noauto.\n\n\n"
+
+#define HELP_mktemp "usage: mktemp [-dqu] [-p DIR] [TEMPLATE]\n\nSafely create a new file \"DIR/TEMPLATE\" and print its name.\n\n-d Create directory instead of file (--directory)\n-p Put new file in DIR (--tmpdir)\n-q Quiet, no error messages\n-u Don't create anything, just print what would be created\n\nEach X in TEMPLATE is replaced with a random printable character. The\ndefault TEMPLATE is tmp.XXXXXX, and the default DIR is $TMPDIR if set,\nelse \"/tmp\".\n\n"
+
+#define HELP_mknod_z "usage: mknod [-Z CONTEXT] ...\n\n-Z Set security context to created file\n\n"
+
+#define HELP_mknod "usage: mknod [-m MODE] NAME TYPE [MAJOR MINOR]\n\nCreate a special file NAME with a given type. TYPE is b for block device,\nc or u for character device, p for named pipe (which ignores MAJOR/MINOR).\n\n-m Mode (file permissions) of new device, in octal or u+x format\n\n"
+
+#define HELP_sha512sum "See sha1sum\n\n"
+
+#define HELP_sha384sum "See sha1sum\n\n"
+
+#define HELP_sha256sum "See sha1sum\n\n"
+
+#define HELP_sha224sum "See sha1sum\n\n"
+
+#define HELP_sha1sum "usage: sha?sum [-b] [-c FILE] [FILE]...\n\ncalculate sha hash for each input file, reading from stdin if none. Output\none hash (40 hex digits for sha1, 56 for sha224, 64 for sha256, 96 for sha384,\nand 128 for sha512) for each input file, followed by filename.\n\n-b brief (hash only, no filename)\n-c Check each line of FILE is the same hash+filename we'd output\n\n"
+
+#define HELP_md5sum "usage: md5sum [-b] [-c FILE] [FILE]...\n\nCalculate md5 hash for each input file, reading from stdin if none.\nOutput one hash (32 hex digits) for each input file, followed by filename.\n\n-b brief (hash only, no filename)\n-c Check each line of FILE is the same hash+filename we'd output\n\n"
+
+#define HELP_killall "usage: killall [-l] [-iqv] [-SIGNAL|-s SIGNAL] PROCESS_NAME...\n\nSend a signal (default: TERM) to all processes with the given names.\n\n-i ask for confirmation before killing\n-l print list of all available signals\n-q don't print any warnings or error messages\n-s send SIGNAL instead of SIGTERM\n-v report if the signal was successfully sent\n\n"
+
+#define HELP_hostname "usage: hostname [-bsf] [-F FILENAME] [newname]\n\nGet/set the current hostname.\n\n-b set hostname to 'localhost' if otherwise unset\n-d show DNS domain name (no host)\n-f show fully-qualified name (host+domain, FQDN)\n-F set hostname to contents of FILENAME\n-s show short host name (no domain)\n\n"
+
+#define HELP_dmesg "usage: dmesg [-Cc] [-r|-t|-T] [-n LEVEL] [-s SIZE] [-w]\n\nPrint or control the kernel ring buffer.\n\n-C Clear ring buffer without printing\n-c Clear ring buffer after printing\n-n Set kernel logging LEVEL (1-9)\n-r Raw output (with <level markers>)\n-S Use syslog(2) rather than /dev/kmsg\n-s Show the last SIZE many bytes\n-T Show human-readable timestamps\n-t Don't print timestamps\n-w Keep waiting for more output (aka --follow)\n\n"
+
+#define HELP_tunctl "usage: tunctl [-dtT] [-u USER] NAME\n\nCreate and delete tun/tap virtual ethernet devices.\n\n-T Use tap (ethernet frames) instead of tun (ip packets)\n-d Delete tun/tap device\n-t Create tun/tap device\n-u Set owner (user who can read/write device without root access)\n\n\n"
+
+#define HELP_rfkill "Usage: rfkill COMMAND [DEVICE]\n\nEnable/disable wireless devices.\n\nCommands:\nlist [DEVICE] List current state\nblock DEVICE Disable device\nunblock DEVICE Enable device\n\nDEVICE is an index number, or one of:\nall, wlan(wifi), bluetooth, uwb(ultrawideband), wimax, wwan, gps, fm.\n\n"
+
+#define HELP_ping "usage: ping [OPTIONS] HOST\n\nCheck network connectivity by sending packets to a host and reporting\nits response.\n\nSend ICMP ECHO_REQUEST packets to ipv4 or ipv6 addresses and prints each\necho it receives back, with round trip time. Returns true if host alive.\n\nOptions:\n-4, -6 Force IPv4 or IPv6\n-c CNT Send CNT many packets (default 3, 0 = infinite)\n-f Flood (print . and \\b to show drops, default -c 15 -i 0.2)\n-i TIME Interval between packets (default 1, need root for < .2)\n-I IFACE/IP Source interface or address\n-m MARK Tag outgoing packets using SO_MARK\n-q Quiet (stops after one returns true if host is alive)\n-s SIZE Data SIZE in bytes (default 56)\n-t TTL Set Time To Live (number of hops)\n-W SEC Seconds to wait for response after last -c packet (default 3)\n-w SEC Exit after this many seconds\n\n"
+
+#define HELP_netstat "usage: netstat [-pWrxwutneal]\n\nDisplay networking information. Default is netsat -tuwx\n\n-r routing table\n-a all sockets (not just connected)\n-l listening server sockets\n-t TCP sockets\n-u UDP sockets\n-w raw sockets\n-x unix sockets\n-e extended info\n-n don't resolve names\n-W wide display\n-p show PID/program name of sockets\n\n"
+
+#define HELP_netcat_listen "usage: netcat [-t] [-lL COMMAND...]\n\n-l listen for one incoming connection\n-L listen for multiple incoming connections (server mode)\n-t allocate tty (must come before -l or -L)\n\nThe command line after -l or -L is executed (as a child process) to handle\neach incoming connection. If blank -l waits for a connection and forwards\nit to stdin/stdout. If no -p specified, -l prints port it bound to and\nbackgrounds itself (returning immediately).\n\nFor a quick-and-dirty server, try something like:\nnetcat -s 127.0.0.1 -p 1234 -tL /bin/bash -l\n\n"
+
+#define HELP_netcat "usage: netcat [-u] [-wpq #] [-s addr] {IPADDR PORTNUM|-f FILENAME}\n\n-f use FILENAME (ala /dev/ttyS0) instead of network\n-p local port number\n-q quit SECONDS after EOF on stdin, even if stdout hasn't closed yet\n-s local source address\n-w SECONDS timeout to establish connection\n-W SECONDS timeout for more data on an idle connection\n\nUse \"stty 115200 -F /dev/ttyS0 && stty raw -echo -ctlecho\" with\nnetcat -f to connect to a serial port.\n\n"
+
+#define HELP_microcom "usage: microcom [-s SPEED] [-X] DEVICE\n\nSimple serial console.\n\n-s Set baud rate to SPEED\n-X Ignore ^@ (send break) and ^] (exit).\n\n"
+
+#define HELP_ifconfig "usage: ifconfig [-aS] [INTERFACE [ACTION...]]\n\nDisplay or configure network interface.\n\nWith no arguments, display active interfaces. First argument is interface\nto operate on, one argument by itself displays that interface.\n\n-a All interfaces displayed, not just active ones\n-S Short view, one line per interface\n\nStandard ACTIONs to perform on an INTERFACE:\n\nADDR[/MASK] - set IPv4 address (1.2.3.4/5) and activate interface\nadd|del ADDR[/LEN] - add/remove IPv6 address (1111::8888/128)\nup|down - activate or deactivate interface\n\nAdvanced ACTIONs (default values usually suffice):\n\ndefault - remove IPv4 address\nnetmask ADDR - set IPv4 netmask via 255.255.255.0 instead of /24\ntxqueuelen LEN - number of buffered packets before output blocks\nmtu LEN - size of outgoing packets (Maximum Transmission Unit)\nbroadcast ADDR - Set broadcast address\npointopoint ADDR - PPP and PPPOE use this instead of \"route add default gw\"\nhw TYPE ADDR - set hardware (mac) address (type = ether|infiniband)\n\nFlags you can set on an interface (or -remove by prefixing with -):\n\narp - don't use Address Resolution Protocol to map LAN routes\npromisc - don't discard packets that aren't to this LAN hardware address\nmulticast - force interface into multicast mode if the driver doesn't\nallmulti - promisc for multicast packets\n\n"
+
+#define HELP_ftpput "An ftpget that defaults to -s instead of -g\n\n"
+
+#define HELP_ftpget "usage: ftpget [-cvgslLmMdD] [-P PORT] [-p PASSWORD] [-u USER] HOST [LOCAL] REMOTE\n\nTalk to ftp server. By default get REMOTE file via passive anonymous\ntransfer, optionally saving under a LOCAL name. Can also send, list, etc.\n\n-c Continue partial transfer\n-p Use PORT instead of \"21\"\n-P Use PASSWORD instead of \"ftpget@\"\n-u Use USER instead of \"anonymous\"\n-v Verbose\n\nWays to interact with FTP server:\n-d Delete file\n-D Remove directory\n-g Get file (default)\n-l List directory\n-L List (filenames only)\n-m Move file on server from LOCAL to REMOTE\n-M mkdir\n-s Send file\n\n"
+
+#define HELP_yes "usage: yes [args...]\n\nRepeatedly output line until killed. If no args, output 'y'.\n\n\n"
+
+#define HELP_xxd "usage: xxd [-c n] [-g n] [-i] [-l n] [-o n] [-p] [-r] [-s n] [file]\n\nHexdump a file to stdout. If no file is listed, copy from stdin.\nFilename \"-\" is a synonym for stdin.\n\n-c n Show n bytes per line (default 16)\n-g n Group bytes by adding a ' ' every n bytes (default 2)\n-i Include file output format (comma-separated hex byte literals)\n-l n Limit of n bytes before stopping (default is no limit)\n-o n Add n to display offset\n-p Plain hexdump (30 bytes/line, no grouping)\n-r Reverse operation: turn a hexdump into a binary file\n-s n Skip to offset n\n\n"
+
+#define HELP_which "usage: which [-a] filename ...\n\nSearch $PATH for executable files matching filename(s).\n\n-a Show all matches\n\n"
+
+#define HELP_watch "usage: watch [-teb] [-n SEC] PROG ARGS\n\nRun PROG every -n seconds, showing output. Hit q to quit.\n\n-n Loop period in seconds (default 2)\n-t Don't print header\n-e Exit on error\n-b Beep on command error\n-x Exec command directly (vs \"sh -c\")\n\n"
+
+#define HELP_w "usage: w\n\nShow who is logged on and since how long they logged in.\n\n"
+
+#define HELP_vmstat "usage: vmstat [-n] [DELAY [COUNT]]\n\nPrint virtual memory statistics, repeating each DELAY seconds, COUNT times.\n(With no DELAY, prints one line. With no COUNT, repeats until killed.)\n\nShow processes running and blocked, kilobytes swapped, free, buffered, and\ncached, kilobytes swapped in and out per second, file disk blocks input and\noutput per second, interrupts and context switches per second, percent\nof CPU time spent running user code, system code, idle, and awaiting I/O.\nFirst line is since system started, later lines are since last line.\n\n-n Display the header only once\n\n"
+
+#define HELP_vconfig "usage: vconfig COMMAND [OPTIONS]\n\nCreate and remove virtual ethernet devices\n\nadd [interface-name] [vlan_id]\nrem [vlan-name]\nset_flag [interface-name] [flag-num] [0 | 1]\nset_egress_map [vlan-name] [skb_priority] [vlan_qos]\nset_ingress_map [vlan-name] [skb_priority] [vlan_qos]\nset_name_type [name-type]\n\n"
+
+#define HELP_uuidgen "usage: uuidgen\n\nCreate and print a new RFC4122 random UUID.\n\n"
+
+#define HELP_usleep "usage: usleep MICROSECONDS\n\nPause for MICROSECONDS microseconds.\n\n"
+
+#define HELP_uptime "usage: uptime [-ps]\n\nTell the current time, how long the system has been running, the number\nof users, and the system load averages for the past 1, 5 and 15 minutes.\n\n-p Pretty (human-readable) uptime\n-s Since when has the system been up?\n\n"
+
+#define HELP_truncate "usage: truncate [-c] -s SIZE file...\n\nSet length of file(s), extending sparsely if necessary.\n\n-c Don't create file if it doesn't exist\n-s New size (with optional prefix and suffix)\n\nSIZE prefix: + add, - subtract, < shrink to, > expand to,\n / multiple rounding down, % multiple rounding up\nSIZE suffix: k=1024, m=1024^2, g=1024^3, t=1024^4, p=1024^5, e=1024^6\n\n"
+
+#define HELP_timeout "usage: timeout [-k LENGTH] [-s SIGNAL] LENGTH COMMAND...\n\nRun command line as a child process, sending child a signal if the\ncommand doesn't exit soon enough.\n\nLength can be a decimal fraction. An optional suffix can be \"m\"\n(minutes), \"h\" (hours), \"d\" (days), or \"s\" (seconds, the default).\n\n-s Send specified signal (default TERM)\n-k Send KILL signal if child still running this long after first signal\n-v Verbose\n\n"
+
+#define HELP_taskset "usage: taskset [-ap] [mask] [PID | cmd [args...]]\n\nLaunch a new task which may only run on certain processors, or change\nthe processor affinity of an exisitng PID.\n\nMask is a hex string where each bit represents a processor the process\nis allowed to run on. PID without a mask displays existing affinity.\n\n-p Set/get the affinity of given PID instead of a new command\n-a Set/get the affinity of all threads of the PID\n\n"
+
+#define HELP_nproc "usage: nproc [--all]\n\nPrint number of processors.\n\n--all Show all processors, not just ones this task can run on\n\n"
+
+#define HELP_tac "usage: tac [FILE...]\n\nOutput lines in reverse order.\n\n"
+
+#define HELP_sysctl "usage: sysctl [-aAeNnqw] [-p [FILE] | KEY[=VALUE]...]\n\nRead/write system control data (under /proc/sys).\n\n-a,A Show all values\n-e Don't warn about unknown keys\n-N Don't print key values\n-n Don't print key names\n-p Read values from FILE (default /etc/sysctl.conf)\n-q Don't show value after write\n-w Only write values (object to reading)\n\n"
+
+#define HELP_switch_root "usage: switch_root [-c /dev/console] NEW_ROOT NEW_INIT...\n\nUse from PID 1 under initramfs to free initramfs, chroot to NEW_ROOT,\nand exec NEW_INIT.\n\n-c Redirect console to device in NEW_ROOT\n-h Hang instead of exiting on failure (avoids kernel panic)\n\n"
+
+#define HELP_swapon "usage: swapon [-d] [-p priority] filename\n\nEnable swapping on a given device/file.\n\n-d Discard freed SSD pages\n-p Priority (highest priority areas allocated first)\n\n"
+
+#define HELP_swapoff "usage: swapoff swapregion\n\nDisable swapping on a given swapregion.\n\n"
+
+#define HELP_stat "usage: stat [-tfL] [-c FORMAT] FILE...\n\nDisplay status of files or filesystems.\n\n-c Output specified FORMAT string instead of default\n-f display filesystem status instead of file status\n-L Follow symlinks\n-t terse (-c \"%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %o\")\n (with -f = -c \"%n %i %l %t %s %S %b %f %a %c %d\")\n\nThe valid format escape sequences for files:\n%a Access bits (octal) |%A Access bits (flags)|%b Size/512\n%B Bytes per %b (512) |%d Device ID (dec) |%D Device ID (hex)\n%f All mode bits (hex) |%F File type |%g Group ID\n%G Group name |%h Hard links |%i Inode\n%m Mount point |%n Filename |%N Long filename\n%o I/O block size |%s Size (bytes) |%t Devtype major (hex)\n%T Devtype minor (hex) |%u User ID |%U User name\n%x Access time |%X Access unix time |%y Modification time\n%Y Mod unix time |%z Creation time |%Z Creation unix time\n\nThe valid format escape sequences for filesystems:\n%a Available blocks |%b Total blocks |%c Total inodes\n%d Free inodes |%f Free blocks |%i File system ID\n%l Max filename length |%n File name |%s Fragment size\n%S Best transfer size |%t FS type (hex) |%T FS type (driver name)\n\n"
+
+#define HELP_shred "usage: shred [-fuz] [-n COUNT] [-s SIZE] FILE...\n\nSecurely delete a file by overwriting its contents with random data.\n\n-f Force (chmod if necessary)\n-n COUNT Random overwrite iterations (default 1)\n-o OFFSET Start at OFFSET\n-s SIZE Use SIZE instead of detecting file size\n-u Unlink (actually delete file when done)\n-x Use exact size (default without -s rounds up to next 4k)\n-z Zero at end\n\nNote: data journaling filesystems render this command useless, you must\noverwrite all free space (fill up disk) to erase old data on those.\n\n"
+
+#define HELP_setsid "usage: setsid [-t] command [args...]\n\nRun process in a new session.\n\n-t Grab tty (become foreground process, receiving keyboard signals)\n\n"
+
+#define HELP_setfattr "usage: setfattr [-h] [-x|-n NAME] [-v VALUE] FILE...\n\nWrite POSIX extended attributes.\n\n-h Do not dereference symlink\n-n Set given attribute\n-x Remove given attribute\n-v Set value for attribute -n (default is empty)\n\n"
+
+#define HELP_rmmod "usage: rmmod [-wf] [MODULE]\n\nUnload the module named MODULE from the Linux kernel.\n-f Force unload of a module\n-w Wait until the module is no longer used\n\n\n"
+
+#define HELP_rev "usage: rev [FILE...]\n\nOutput each line reversed, when no files are given stdin is used.\n\n"
+
+#define HELP_reset "usage: reset\n\nreset the terminal\n\n"
+
+#define HELP_reboot "usage: reboot/halt/poweroff [-fn]\n\nRestart, halt or powerdown the system.\n\n-f Don't signal init\n-n Don't sync before stopping the system\n\n"
+
+#define HELP_realpath "usage: realpath FILE...\n\nDisplay the canonical absolute pathname\n\n"
+
+#define HELP_readlink "usage: readlink FILE\n\nWith no options, show what symlink points to, return error if not symlink.\n\nOptions for producing cannonical paths (all symlinks/./.. resolved):\n\n-e cannonical path to existing entry (fail if missing)\n-f full path (fail if directory missing)\n-m ignore missing entries, show where it would be\n-n no trailing newline\n-q quiet (no output, just error code)\n\n"
+
+#define HELP_readahead "usage: readahead FILE...\n\nPreload files into disk cache.\n\n"
+
+#define HELP_pwdx "usage: pwdx PID...\n\nPrint working directory of processes listed on command line.\n\n"
+
+#define HELP_printenv "usage: printenv [-0] [env_var...]\n\nPrint environment variables.\n\n-0 Use \\0 as delimiter instead of \\n\n\n"
+
+#define HELP_pmap "usage: pmap [-xq] [pids...]\n\nReports the memory map of a process or processes.\n\n-x Show the extended format\n-q Do not display some header/footer lines\n\n"
+
+#define HELP_pivot_root "usage: pivot_root OLD NEW\n\nSwap OLD and NEW filesystems (as if by simultaneous mount --move), and\nmove all processes with chdir or chroot under OLD into NEW (including\nkernel threads) so OLD may be unmounted.\n\nThe directory NEW must exist under OLD. This doesn't work on initramfs,\nwhich can't be moved (about the same way PID 1 can't be killed; see\nswitch_root instead).\n\n"
+
+#define HELP_partprobe "usage: partprobe DEVICE...\n\nTell the kernel about partition table changes\n\nAsk the kernel to re-read the partition table on the specified devices.\n\n"
+
+#define HELP_oneit "usage: oneit [-p] [-c /dev/tty0] command [...]\n\nSimple init program that runs a single supplied command line with a\ncontrolling tty (so CTRL-C can kill it).\n\n-c Which console device to use (/dev/console doesn't do CTRL-C, etc)\n-p Power off instead of rebooting when command exits\n-r Restart child when it exits\n-3 Write 32 bit PID of each exiting reparented process to fd 3 of child\n (Blocking writes, child must read to avoid eventual deadlock.)\n\nSpawns a single child process (because PID 1 has signals blocked)\nin its own session, reaps zombies until the child exits, then\nreboots the system (or powers off with -p, or restarts the child with -r).\n\nResponds to SIGUSR1 by halting the system, SIGUSR2 by powering off,\nand SIGTERM or SIGINT reboot.\n\n"
+
+#define HELP_nsenter "usage: nsenter [-t pid] [-F] [-i] [-m] [-n] [-p] [-u] [-U] COMMAND...\n\nRun COMMAND in an existing (set of) namespace(s).\n\n-t PID to take namespaces from (--target)\n-F don't fork, even if -p is used (--no-fork)\n\nThe namespaces to switch are:\n\n-i SysV IPC: message queues, semaphores, shared memory (--ipc)\n-m Mount/unmount tree (--mount)\n-n Network address, sockets, routing, iptables (--net)\n-p Process IDs and init, will fork unless -F is used (--pid)\n-u Host and domain names (--uts)\n-U UIDs, GIDs, capabilities (--user)\n\nIf -t isn't specified, each namespace argument must provide a path\nto a namespace file, ala \"-i=/proc/$PID/ns/ipc\"\n\n"
+
+#define HELP_unshare "usage: unshare [-imnpuUr] COMMAND...\n\nCreate new container namespace(s) for this process and its children, so\nsome attribute is not shared with the parent process.\n\n-f Fork command in the background (--fork)\n-i SysV IPC (message queues, semaphores, shared memory) (--ipc)\n-m Mount/unmount tree (--mount)\n-n Network address, sockets, routing, iptables (--net)\n-p Process IDs and init (--pid)\n-r Become root (map current euid/egid to 0/0, implies -U) (--map-root-user)\n-u Host and domain names (--uts)\n-U UIDs, GIDs, capabilities (--user)\n\nA namespace allows a set of processes to have a different view of the\nsystem than other sets of processes.\n\n"
+
+#define HELP_nbd_client "usage: nbd-client [-ns] HOST PORT DEVICE\n\n-n Do not fork into background\n-s nbd swap support (lock server into memory)\n\n"
+
+#define HELP_mountpoint "usage: mountpoint [-q] [-d] directory\n mountpoint [-q] [-x] device\n\n-q Be quiet, return zero if directory is a mountpoint\n-d Print major/minor device number of the directory\n-x Print major/minor device number of the block device\n\n"
+
+#define HELP_modinfo "usage: modinfo [-0] [-b basedir] [-k kernrelease] [-F field] [modulename...]\n\nDisplay module fields for all specified modules, looking in\n<basedir>/lib/modules/<kernrelease>/ (kernrelease defaults to uname -r).\n\n"
+
+#define HELP_mkswap "usage: mkswap [-L LABEL] DEVICE\n\nSets up a Linux swap area on a device or file.\n\n"
+
+#define HELP_mkpasswd "usage: mkpasswd [-P FD] [-m TYPE] [-S SALT] [PASSWORD] [SALT]\n\nCrypt PASSWORD using crypt(3)\n\n-P FD Read password from file descriptor FD\n-m TYPE Encryption method (des, md5, sha256, or sha512; default is des)\n-S SALT\n\n"
+
+#define HELP_mix "usage: mix [-d DEV] [-c CHANNEL] [-l VOL] [-r RIGHT]\n\nList OSS sound channels (module snd-mixer-oss), or set volume(s).\n\n-c CHANNEL Set/show volume of CHANNEL (default first channel found)\n-d DEV Device node (default /dev/mixer)\n-l VOL Volume level\n-r RIGHT Volume of right stereo channel (with -r, -l sets left volume)\n\n"
+
+#define HELP_makedevs "usage: makedevs [-d device_table] rootdir\n\nCreate a range of special files as specified in a device table.\n\n-d file containing device table (default reads from stdin)\n\nEach line of of the device table has the fields:\n<name> <type> <mode> <uid> <gid> <major> <minor> <start> <increment> <count>\nWhere name is the file name, and type is one of the following:\n\nb Block device\nc Character device\nd Directory\nf Regular file\np Named pipe (fifo)\n\nOther fields specify permissions, user and group id owning the file,\nand additional fields for device special files. Use '-' for blank entries,\nunspecified fields are treated as '-'.\n\n"
+
+#define HELP_lsusb "usage: lsusb\n\nList USB hosts/devices.\n\n"
+
+#define HELP_lspci_text "usage: lspci [-n] [-i FILE ]\n\n-n Numeric output (repeat for readable and numeric)\n-i PCI ID database (default /usr/share/misc/pci.ids)\n\n\n"
+
+#define HELP_lspci "usage: lspci [-ekm]\n\nList PCI devices.\n\n-e Print all 6 digits in class\n-k Print kernel driver\n-m Machine parseable format\n\n"
+
+#define HELP_lsmod "usage: lsmod\n\nDisplay the currently loaded modules, their sizes and their dependencies.\n\n"
+
+#define HELP_chattr "usage: chattr [-R] [-+=AacDdijsStTu] [-v version] [File...]\n\nChange file attributes on a Linux second extended file system.\n\n-R Recurse\n-v Set the file's version/generation number\n\nOperators:\n '-' Remove attributes\n '+' Add attributes\n '=' Set attributes\n\nAttributes:\n A Don't track atime\n a Append mode only\n c Enable compress\n D Write dir contents synchronously\n d Don't backup with dump\n i Cannot be modified (immutable)\n j Write all data to journal first\n s Zero disk storage when deleted\n S Write file contents synchronously\n t Disable tail-merging of partial blocks with other files\n u Allow file to be undeleted\n\n"
+
+#define HELP_lsattr "usage: lsattr [-Radlv] [Files...]\n\nList file attributes on a Linux second extended file system.\n(AacDdijsStu defined in chattr --help)\n\n-R Recursively list attributes of directories and their contents\n-a List all files in directories, including files that start with '.'\n-d List directories like other files, rather than listing their contents\n-l List long flag names\n-v List the file's version/generation number\n\n"
+
+#define HELP_losetup "usage: losetup [-cdrs] [-o OFFSET] [-S SIZE] {-d DEVICE...|-j FILE|-af|{DEVICE FILE}}\n\nAssociate a loopback device with a file, or show current file (if any)\nassociated with a loop device.\n\nInstead of a device:\n-a Iterate through all loopback devices\n-f Find first unused loop device (may create one)\n-j Iterate through all loopback devices associated with FILE\n\nexisting:\n-c Check capacity (file size changed)\n-d Detach loopback device\n\nnew:\n-s Show device name (alias --show)\n-o Start assocation at OFFSET into FILE\n-r Read only\n-S Limit SIZE of loopback association (alias --sizelimit)\n\n"
+
+#define HELP_login "usage: login [-p] [-h host] [-f USERNAME] [USERNAME]\n\nLog in as a user, prompting for username and password if necessary.\n\n-p Preserve environment\n-h The name of the remote host for this login\n-f login as USERNAME without authentication\n\n"
+
+#define HELP_iorenice "usage: iorenice PID [CLASS] [PRIORITY]\n\nDisplay or change I/O priority of existing process. CLASS can be\n\"rt\" for realtime, \"be\" for best effort, \"idle\" for only when idle, or\n\"none\" to leave it alone. PRIORITY can be 0-7 (0 is highest, default 4).\n\n"
+
+#define HELP_ionice "usage: ionice [-t] [-c CLASS] [-n LEVEL] [COMMAND...|-p PID]\n\nChange the I/O scheduling priority of a process. With no arguments\n(or just -p), display process' existing I/O class/priority.\n\n-c CLASS = 1-3: 1(realtime), 2(best-effort, default), 3(when-idle)\n-n LEVEL = 0-7: (0 is highest priority, default = 5)\n-p Affect existing PID instead of spawning new child\n-t Ignore failure to set I/O priority\n\nSystem default iopriority is generally -c 2 -n 4.\n\n"
+
+#define HELP_insmod "usage: insmod MODULE [MODULE_OPTIONS]\n\nLoad the module named MODULE passing options if given.\n\n"
+
+#define HELP_inotifyd "usage: inotifyd PROG FILE[:MASK] ...\n\nWhen a filesystem event matching MASK occurs to a FILE, run PROG as:\n\n PROG EVENTS FILE [DIRFILE]\n\nIf PROG is \"-\" events are sent to stdout.\n\nThis file is:\n a accessed c modified e metadata change w closed (writable)\n r opened D deleted M moved 0 closed (unwritable)\n u unmounted o overflow x unwatchable\n\nA file in this directory is:\n m moved in y moved out n created d deleted\n\nWhen x event happens for all FILEs, inotifyd exits (after waiting for PROG).\n\n"
+
+#define HELP_i2cset "usage: i2cset [-fy] BUS CHIP ADDR VALUE... MODE\n\nWrites an i2c register. MODE is b for byte, w for 16-bit word, i for I2C block.\n\n-f Force access to busy devices\n-y Answer \"yes\" to confirmation prompts (for script use)\n\n"
+
+#define HELP_i2cget "usage: i2cget [-fy] BUS CHIP ADDR\n\nReads an i2c register.\n\n-f Force access to busy devices\n-y Answer \"yes\" to confirmation prompts (for script use)\n\n"
+
+#define HELP_i2cdump "usage: i2cdump [-fy] BUS CHIP\n\nDumps i2c registers.\n\n-f Force access to busy devices\n-y Answer \"yes\" to confirmation prompts (for script use)\n\n"
+
+#define HELP_i2cdetect "usage: i2cdetect [-ary] BUS [FIRST LAST]\nusage: i2cdetect -F BUS\nusage: i2cdetect -l\n\nDetects i2c devices.\n\n-a All addresses (0x00-0x7f rather than 0x03-0x77)\n-F Show functionality\n-l List all buses\n-r Probe with SMBus Read Byte\n-y Answer \"yes\" to confirmation prompts (for script use)\n\n"
+
+#define HELP_hwclock "usage: hwclock [-rswtluf]\n\n-f FILE Use specified device file instead of /dev/rtc (--rtc)\n-l Hardware clock uses localtime (--localtime)\n-r Show hardware clock time (--show)\n-s Set system time from hardware clock (--hctosys)\n-t Set the system time based on the current timezone (--systz)\n-u Hardware clock uses UTC (--utc)\n-w Set hardware clock from system time (--systohc)\n\n"
+
+#define HELP_hexedit "usage: hexedit FILENAME\n\nHexadecimal file editor. All changes are written to disk immediately.\n\n-r Read only (display but don't edit)\n\nKeys:\nArrows Move left/right/up/down by one line/column\nPg Up/Pg Dn Move up/down by one page\n0-9, a-f Change current half-byte to hexadecimal value\nu Undo\nq/^c/^d/<esc> Quit\n\n"
+
+#define HELP_help_extras "usage: help [-ah]\n\n-a All commands\n-h HTML output\n\n"
+
+#define HELP_help "usage: help [command]\n\nShow usage information for toybox commands.\nRun \"toybox\" with no arguments for a list of available commands.\n\n"
+
+#define HELP_fsync "usage: fsync [-d] [FILE...]\n\nSynchronize a file's in-core state with storage device.\n\n-d Avoid syncing metadata\n\n"
+
+#define HELP_fsfreeze "usage: fsfreeze {-f | -u} MOUNTPOINT\n\nFreeze or unfreeze a filesystem.\n\n-f freeze\n-u unfreeze\n\n"
+
+#define HELP_freeramdisk "usage: freeramdisk [RAM device]\n\nFree all memory allocated to specified ramdisk\n\n"
+
+#define HELP_free "usage: free [-bkmgt]\n\nDisplay the total, free and used amount of physical memory and swap space.\n\n-bkmgt Output units (default is bytes)\n-h Human readable\n\n"
+
+#define HELP_fmt "usage: fmt [-w WIDTH] [FILE...]\n\nReformat input to wordwrap at a given line length, preserving existing\nindentation level, writing to stdout.\n\n-w WIDTH maximum characters per line (default 75)\n\n"
+
+#define HELP_flock "usage: flock [-sxun] fd\n\nManage advisory file locks.\n\n-s Shared lock\n-x Exclusive lock (default)\n-u Unlock\n-n Non-blocking: fail rather than wait for the lock\n\n"
+
+#define HELP_fallocate "usage: fallocate [-l size] [-o offset] file\n\nTell the filesystem to allocate space for a file.\n\n"
+
+#define HELP_factor "usage: factor NUMBER...\n\nFactor integers.\n\n"
+
+#define HELP_eject "usage: eject [-stT] [DEVICE]\n\nEject DEVICE or default /dev/cdrom\n\n-s SCSI device\n-t Close tray\n-T Open/close tray (toggle)\n\n"
+
+#define HELP_unix2dos "usage: unix2dos [FILE...]\n\nConvert newline format from unix \"\\n\" to dos \"\\r\\n\".\nIf no files listed copy from stdin, \"-\" is a synonym for stdin.\n\n"
+
+#define HELP_dos2unix "usage: dos2unix [FILE...]\n\nConvert newline format from dos \"\\r\\n\" to unix \"\\n\".\nIf no files listed copy from stdin, \"-\" is a synonym for stdin.\n\n"
+
+#define HELP_count "usage: count\n\nCopy stdin to stdout, displaying simple progress indicator to stderr.\n\n"
+
+#define HELP_clear "Clear the screen.\n\n"
+
+#define HELP_chvt "usage: chvt N\n\nChange to virtual terminal number N. (This only works in text mode.)\n\nVirtual terminals are the Linux VGA text mode displays, ordinarily\nswitched between via alt-F1, alt-F2, etc. Use ctrl-alt-F1 to switch\nfrom X to a virtual terminal, and alt-F6 (or F7, or F8) to get back.\n\n"
+
+#define HELP_chrt "usage: chrt [-Rmofrbi] {-p PID [PRIORITY] | [PRIORITY COMMAND...]}\n\nGet/set a process' real-time scheduling policy and priority.\n\n-p Set/query given pid (instead of running COMMAND)\n-R Set SCHED_RESET_ON_FORK\n-m Show min/max priorities available\n\nSet policy (default -r):\n\n -o SCHED_OTHER -f SCHED_FIFO -r SCHED_RR\n -b SCHED_BATCH -i SCHED_IDLE\n\n"
+
+#define HELP_chroot "usage: chroot NEWPATH [commandline...]\n\nRun command within a new root directory. If no command, run /bin/sh.\n\n"
+
+#define HELP_chcon "usage: chcon [-hRv] CONTEXT FILE...\n\nChange the SELinux security context of listed file[s].\n\n-h change symlinks instead of what they point to\n-R recurse into subdirectories\n-v verbose output\n\n"
+
+#define HELP_bzcat "usage: bzcat [FILE...]\n\nDecompress listed files to stdout. Use stdin if no files listed.\n\n"
+
+#define HELP_bunzip2 "usage: bunzip2 [-cftkv] [FILE...]\n\nDecompress listed files (file.bz becomes file) deleting archive file(s).\nRead from stdin if no files listed.\n\n-c force output to stdout\n-f force decompression (if FILE doesn't end in .bz, replace original)\n-k keep input files (-c and -t imply this)\n-t test integrity\n-v verbose\n\n"
+
+#define HELP_blockdev "usage: blockdev --OPTION... BLOCKDEV...\n\nCall ioctl(s) on each listed block device\n\n--setro Set read only\n--setrw Set read write\n--getro Get read only\n--getss Get sector size\n--getbsz Get block size\n--setbsz BYTES Set block size\n--getsz Get device size in 512-byte sectors\n--getsize Get device size in sectors (deprecated)\n--getsize64 Get device size in bytes\n--getra Get readahead in 512-byte sectors\n--setra SECTORS Set readahead\n--flushbufs Flush buffers\n--rereadpt Reread partition table\n\n"
+
+#define HELP_fstype "usage: fstype DEV...\n\nPrints type of filesystem on a block device or image.\n\n"
+
+#define HELP_blkid "usage: blkid DEV...\n\nPrints type, label and UUID of filesystem on a block device or image.\n\n"
+
+#define HELP_base64 "usage: base64 [-di] [-w COLUMNS] [FILE...]\n\nEncode or decode in base64.\n\n-d decode\n-i ignore non-alphabetic characters\n-w wrap output at COLUMNS (default 76 or 0 for no wrap)\n\n"
+
+#define HELP_ascii "usage: ascii\n\nDisplay ascii character set.\n\n"
+
+#define HELP_acpi "usage: acpi [-abctV]\n\nShow status of power sources and thermal devices.\n\n-a show power adapters\n-b show batteries\n-c show cooling device state\n-t show temperatures\n-V show everything\n\n"
+
+#define HELP_xzcat "usage: xzcat [filename...]\n\nDecompress listed files to stdout. Use stdin if no files listed.\n\n\n\n"
+
+#define HELP_wget "usage: wget -f filename URL\n-f filename: specify the filename to be saved\nURL: HTTP uniform resource location and only HTTP, not HTTPS\n\nexamples:\n wget -f index.html http://www.example.com\n wget -f sample.jpg http://www.example.com:8080/sample.jpg\n\n"
+
+#define HELP_vi "usage: vi FILE\n\nVisual text editor. Predates the existence of standardized cursor keys,\nso the controls are weird and historical.\n\n"
+
+#define HELP_userdel "usage: userdel [-r] USER\nusage: deluser [-r] USER\n\nDelete USER from the SYSTEM\n\n-r remove home directory\n\n"
+
+#define HELP_useradd "usage: useradd [-SDH] [-h DIR] [-s SHELL] [-G GRP] [-g NAME] [-u UID] USER [GROUP]\n\nCreate new user, or add USER to GROUP\n\n-D Don't assign a password\n-g NAME Real name\n-G GRP Add user to existing group\n-h DIR Home directory\n-H Don't create home directory\n-s SHELL Login shell\n-S Create a system user\n-u UID User id\n\n"
+
+#define HELP_traceroute "usage: traceroute [-46FUIldnvr] [-f 1ST_TTL] [-m MAXTTL] [-p PORT] [-q PROBES]\n[-s SRC_IP] [-t TOS] [-w WAIT_SEC] [-g GATEWAY] [-i IFACE] [-z PAUSE_MSEC] HOST [BYTES]\n\ntraceroute6 [-dnrv] [-m MAXTTL] [-p PORT] [-q PROBES][-s SRC_IP] [-t TOS] [-w WAIT_SEC]\n [-i IFACE] HOST [BYTES]\n\nTrace the route to HOST\n\n-4,-6 Force IP or IPv6 name resolution\n-F Set the don't fragment bit (supports IPV4 only)\n-U Use UDP datagrams instead of ICMP ECHO (supports IPV4 only)\n-I Use ICMP ECHO instead of UDP datagrams (supports IPV4 only)\n-l Display the TTL value of the returned packet (supports IPV4 only)\n-d Set SO_DEBUG options to socket\n-n Print numeric addresses\n-v verbose\n-r Bypass routing tables, send directly to HOST\n-m Max time-to-live (max number of hops)(RANGE 1 to 255)\n-p Base UDP port number used in probes(default 33434)(RANGE 1 to 65535)\n-q Number of probes per TTL (default 3)(RANGE 1 to 255)\n-s IP address to use as the source address\n-t Type-of-service in probe packets (default 0)(RANGE 0 to 255)\n-w Time in seconds to wait for a response (default 3)(RANGE 0 to 86400)\n-g Loose source route gateway (8 max) (supports IPV4 only)\n-z Pause Time in milisec (default 0)(RANGE 0 to 86400) (supports IPV4 only)\n-f Start from the 1ST_TTL hop (instead from 1)(RANGE 1 to 255) (supports IPV4 only)\n-i Specify a network interface to operate with\n\n"
+
+#define HELP_tr "usage: tr [-cds] SET1 [SET2]\n\nTranslate, squeeze, or delete characters from stdin, writing to stdout\n\n-c/-C Take complement of SET1\n-d Delete input characters coded SET1\n-s Squeeze multiple output characters of SET2 into one character\n\n"
+
+#define HELP_tftpd "usage: tftpd [-cr] [-u USER] [DIR]\n\nTransfer file from/to tftp server.\n\n-r read only\n-c Allow file creation via upload\n-u run as USER\n-l Log to syslog (inetd mode requires this)\n\n"
+
+#define HELP_tftp "usage: tftp [OPTIONS] HOST [PORT]\n\nTransfer file from/to tftp server.\n\n-l FILE Local FILE\n-r FILE Remote FILE\n-g Get file\n-p Put file\n-b SIZE Transfer blocks of SIZE octets(8 <= SIZE <= 65464)\n\n"
+
+#define HELP_test "usage: test [-bcdefghLPrSsuwx PATH] [-nz STRING] [-t FD] [X ?? Y]\n\nReturn true or false by performing tests. (With no arguments return false.)\n\n--- Tests with a single argument (after the option):\nPATH is/has:\n -b block device -f regular file -p fifo -u setuid bit\n -c char device -g setgid -r read bit -w write bit\n -d directory -h symlink -S socket -x execute bit\n -e exists -L symlink -s nonzero size\nSTRING is:\n -n nonzero size -z zero size (STRING by itself implies -n)\nFD (integer file descriptor) is:\n -t a TTY\n\n--- Tests with one argument on each side of an operator:\nTwo strings:\n = are identical != differ\nTwo integers:\n -eq equal -gt first > second -lt first < second\n -ne not equal -ge first >= second -le first <= second\n\n--- Modify or combine tests:\n ! EXPR not (swap true/false) EXPR -a EXPR and (are both true)\n ( EXPR ) evaluate this first EXPR -o EXPR or (is either true)\n\n"
+
+#define HELP_telnetd "Handle incoming telnet connections\n\n-l LOGIN Exec LOGIN on connect\n-f ISSUE_FILE Display ISSUE_FILE instead of /etc/issue\n-K Close connection as soon as login exits\n-p PORT Port to listen on\n-b ADDR[:PORT] Address to bind to\n-F Run in foreground\n-i Inetd mode\n-w SEC Inetd 'wait' mode, linger time SEC\n-S Log to syslog (implied by -i or without -F and -w)\n\n"
+
+#define HELP_telnet "usage: telnet HOST [PORT]\n\nConnect to telnet server\n\n"
+
+#define HELP_tcpsvd "usage: tcpsvd [-hEv] [-c N] [-C N[:MSG]] [-b N] [-u User] [-l Name] IP Port Prog\nusage: udpsvd [-hEv] [-c N] [-u User] [-l Name] IP Port Prog\n\nCreate TCP/UDP socket, bind to IP:PORT and listen for incoming connection.\nRun PROG for each connection.\n\nIP IP to listen on, 0 = all\nPORT Port to listen on\nPROG ARGS Program to run\n-l NAME Local hostname (else looks up local hostname in DNS)\n-u USER[:GRP] Change to user/group after bind\n-c N Handle up to N (> 0) connections simultaneously\n-b N (TCP Only) Allow a backlog of approximately N TCP SYNs\n-C N[:MSG] (TCP Only) Allow only up to N (> 0) connections from the same IP\n New connections from this IP address are closed\n immediately. MSG is written to the peer before close\n-h Look up peer's hostname\n-E Don't set up environment variables\n-v Verbose\n\n"
+
+#define HELP_tar "usage: tar -[cxtjzhmvO] [-X FILE] [-T FILE] [-f TARFILE] [-C DIR]\n\nCreate, extract, or list files from a tar file\n\nOperation:\nc Create\nf Name of TARFILE ('-' for stdin/out)\nh Follow symlinks\nj (De)compress using bzip2\nm Don't restore mtime\nt List\nv Verbose\nx Extract\nz (De)compress using gzip\nC Change to DIR before operation\nO Extract to stdout\nexclude=FILE File to exclude\nX File with names to exclude\nT File with names to include\n\n"
+
+#define HELP_syslogd "usage: syslogd [-a socket] [-O logfile] [-f config file] [-m interval]\n [-p socket] [-s SIZE] [-b N] [-R HOST] [-l N] [-nSLKD]\n\nSystem logging utility\n\n-a Extra unix socket for listen\n-O FILE Default log file <DEFAULT: /var/log/messages>\n-f FILE Config file <DEFAULT: /etc/syslog.conf>\n-p Alternative unix domain socket <DEFAULT : /dev/log>\n-n Avoid auto-backgrounding\n-S Smaller output\n-m MARK interval <DEFAULT: 20 minutes> (RANGE: 0 to 71582787)\n-R HOST Log to IP or hostname on PORT (default PORT=514/UDP)\"\n-L Log locally and via network (default is network only if -R)\"\n-s SIZE Max size (KB) before rotation (default:200KB, 0=off)\n-b N rotated logs to keep (default:1, max=99, 0=purge)\n-K Log to kernel printk buffer (use dmesg to read it)\n-l N Log only messages more urgent than prio(default:8 max:8 min:1)\n-D Drop duplicates\n\n"
+
+#define HELP_sulogin "usage: sulogin [-t time] [tty]\n\nSingle User Login.\n-t Default Time for Single User Login\n\n"
+
+#define HELP_stty "usage: stty [-ag] [-F device] SETTING...\n\nGet/set terminal configuration.\n\n-F Open device instead of stdin\n-a Show all current settings (default differences from \"sane\").\n-g Show all current settings usable as input to stty.\n\nSpecial characters (syntax ^c or undef): intr quit erase kill eof eol eol2\nswtch start stop susp rprnt werase lnext discard\n\nControl/input/output/local settings as shown by -a, '-' prefix to disable\n\nCombo settings: cooked/raw, evenp/oddp/parity, nl, ek, sane\n\nN set input and output speed (ispeed N or ospeed N for just one)\ncols N set number of columns\nrows N set number of rows\nline N set line discipline\nmin N set minimum chars per read\ntime N set read timeout\nspeed show speed only\nsize show size only\n\n"
+
+#define HELP_exit "usage: exit [status]\n\nExit shell. If no return value supplied on command line, use value\nof most recent command, or 0 if none.\n\n"
+
+#define HELP_cd "usage: cd [-PL] [path]\n\nChange current directory. With no arguments, go $HOME.\n\n-P Physical path: resolve symlinks in path\n-L Local path: .. trims directories off $PWD (default)\n\n"
+
+#define HELP_sh "usage: sh [-c command] [script]\n\nCommand shell. Runs a shell script, or reads input interactively\nand responds to it.\n\n-c command line to execute\n-i interactive mode (default when STDIN is a tty)\n\n"
+
+#define HELP_route "usage: route [-ne] [-A [46]] [add|del TARGET [OPTIONS]]\n\nDisplay, add or delete network routes in the \"Forwarding Information Base\".\n\n-n Show numerical addresses (no DNS lookups)\n-e display netstat fields\n\nRouting means sending packets out a network interface to an address.\nThe kernel can tell where to send packets one hop away by examining each\ninterface's address and netmask, so the most common use of this command\nis to identify a \"gateway\" that forwards other traffic.\n\nAssigning an address to an interface automatically creates an appropriate\nnetwork route (\"ifconfig eth0 10.0.2.15/8\" does \"route add 10.0.0.0/8 eth0\"\nfor you), although some devices (such as loopback) won't show it in the\ntable. For machines more than one hop away, you need to specify a gateway\n(ala \"route add default gw 10.0.2.2\").\n\nThe address \"default\" is a wildcard address (0.0.0.0/0) matching all\npackets without a more specific route.\n\nAvailable OPTIONS include:\nreject - blocking route (force match failure)\ndev NAME - force packets out this interface (ala \"eth0\")\nnetmask - old way of saying things like ADDR/24\ngw ADDR - forward packets to gateway ADDR\n\n\n"
+
+#define HELP_deallocvt "usage: deallocvt [N]\n\nDeallocate unused virtual terminal /dev/ttyN, or all unused consoles.\n\n"
+
+#define HELP_openvt "usage: openvt [-c N] [-sw] [command [command_options]]\n\nstart a program on a new virtual terminal (VT)\n\n-c N Use VT N\n-s Switch to new VT\n-w Wait for command to exit\n\nif -sw used together, switch back to originating VT when command completes\n\n"
+
+#define HELP_more "usage: more [FILE...]\n\nView FILE(s) (or stdin) one screenful at a time.\n\n"
+
+#define HELP_modprobe "usage: modprobe [-alrqvsDb] [-d DIR] MODULE [symbol=value][...]\n\nmodprobe utility - inserts modules and dependencies.\n\n-a Load multiple MODULEs\n-d Load modules from DIR, option may be used multiple times\n-l List (MODULE is a pattern)\n-r Remove MODULE (stacks) or do autoclean\n-q Quiet\n-v Verbose\n-s Log to syslog\n-D Show dependencies\n-b Apply blacklist to module names too\n\n"
+
+#define HELP_mke2fs_extended "usage: mke2fs [-E stride=###] [-O option[,option]]\n\n-E stride= Set RAID stripe size (in blocks)\n-O [opts] Specify fewer ext2 option flags (for old kernels)\n All of these are on by default (as appropriate)\n none Clear default options (all but journaling)\n dir_index Use htree indexes for large directories\n filetype Store file type info in directory entry\n has_journal Set by -j\n journal_dev Set by -J device=XXX\n sparse_super Don't allocate huge numbers of redundant superblocks\n\n"
+
+#define HELP_mke2fs_label "usage: mke2fs [-L label] [-M path] [-o string]\n\n-L Volume label\n-M Path to mount point\n-o Created by\n\n"
+
+#define HELP_mke2fs_gen "usage: gene2fs [options] device filename\n\nThe [options] are the same as mke2fs.\n\n"
+
+#define HELP_mke2fs_journal "usage: mke2fs [-j] [-J size=###,device=XXX]\n\n-j Create journal (ext3)\n-J Journal options\n size: Number of blocks (1024-102400)\n device: Specify an external journal\n\n"
+
+#define HELP_mke2fs "usage: mke2fs [-Fnq] [-b ###] [-N|i ###] [-m ###] device\n\nCreate an ext2 filesystem on a block device or filesystem image.\n\n-F Force to run on a mounted device\n-n Don't write to device\n-q Quiet (no output)\n-b size Block size (1024, 2048, or 4096)\n-N inodes Allocate this many inodes\n-i bytes Allocate one inode for every XXX bytes of device\n-m percent Reserve this percent of filesystem space for root user\n\n"
+
+#define HELP_mdev_conf "The mdev config file (/etc/mdev.conf) contains lines that look like:\nhd[a-z][0-9]* 0:3 660\n(sd[a-z]) root:disk 660 =usb_storage\n\nEach line must contain three whitespace separated fields. The first\nfield is a regular expression matching one or more device names,\nthe second and third fields are uid:gid and file permissions for\nmatching devices. Fourth field is optional. It could be used to change\ndevice name (prefix '='), path (prefix '=' and postfix '/') or create a\nsymlink (prefix '>').\n\n"
+
+#define HELP_mdev "usage: mdev [-s]\n\nCreate devices in /dev using information from /sys.\n\n-s Scan all entries in /sys to populate /dev\n\n"
+
+#define HELP_lsof "usage: lsof [-lt] [-p PID1,PID2,...] [FILE...]\n\nList all open files belonging to all active processes, or processes using\nlisted FILE(s).\n\n-l list uids numerically\n-p for given comma-separated pids only (default all pids)\n-t terse (pid only) output\n\n"
+
+#define HELP_last "usage: last [-W] [-f FILE]\n\nShow listing of last logged in users.\n\n-W Display the information without host-column truncation\n-f FILE Read from file FILE instead of /var/log/wtmp\n\n"
+
+#define HELP_klogd "usage: klogd [-n] [-c N]\n\n-c N Print to console messages more urgent than prio N (1-8)\"\n-n Run in foreground\n\n"
+
+#define HELP_ipcs "usage: ipcs [[-smq] -i shmid] | [[-asmq] [-tcplu]]\n\n-i Show specific resource\nResource specification:\n-a All (default)\n-m Shared memory segments\n-q Message queues\n-s Semaphore arrays\nOutput format:\n-c Creator\n-l Limits\n-p Pid\n-t Time\n-u Summary\n\n"
+
+#define HELP_ipcrm "usage: ipcrm [ [-q msqid] [-m shmid] [-s semid]\n [-Q msgkey] [-M shmkey] [-S semkey] ... ]\n\n-mM Remove memory segment after last detach\n-qQ Remove message queue\n-sS Remove semaphore\n\n"
+
+#define HELP_ip "usage: ip [ OPTIONS ] OBJECT { COMMAND }\n\nShow / manipulate routing, devices, policy routing and tunnels.\n\nwhere OBJECT := {address | link | route | rule | tunnel}\nOPTIONS := { -f[amily] { inet | inet6 | link } | -o[neline] }\n\n"
+
+#define HELP_init "usage: init\n\nSystem V style init.\n\nFirst program to run (as PID 1) when the system comes up, reading\n/etc/inittab to determine actions.\n\n"
+
+#define HELP_host "usage: host [-av] [-t TYPE] NAME [SERVER]\n\nPerform DNS lookup on NAME, which can be a domain name to lookup,\nor an ipv4 dotted or ipv6 colon seprated address to reverse lookup.\nSERVER (if present) is the DNS server to use.\n\n-a no idea\n-t not a clue\n-v verbose\n\n"
+
+#define HELP_zcat "usage: zcat [FILE...]\n\nDecompress files to stdout. Like `gzip -dc`.\n\n-f Force: allow read from tty\n\n"
+
+#define HELP_gunzip "usage: gunzip [-cfk] [FILE...]\n\nDecompress files. With no files, decompresses stdin to stdout.\nOn success, the input files are removed and replaced by new\nfiles without the .gz suffix.\n\n-c Output to stdout (act as zcat)\n-f Force: allow read from tty\n-k Keep input files (default is to remove)\n\n"
+
+#define HELP_gzip "usage: gzip [-19cdfk] [FILE...]\n\nCompress files. With no files, compresses stdin to stdout.\nOn success, the input files are removed and replaced by new\nfiles with the .gz suffix.\n\n-c Output to stdout\n-d Decompress (act as gunzip)\n-f Force: allow overwrite of output file\n-k Keep input files (default is to remove)\n-# Compression level 1-9 (1:fastest, 6:default, 9:best)\n\n"
+
+#define HELP_groupdel "usage: groupdel [USER] GROUP\n\nDelete a group or remove a user from a group\n\n"
+
+#define HELP_groupadd "usage: groupadd [-S] [-g GID] [USER] GROUP\n\nAdd a group or add a user to a group\n\n -g GID Group id\n -S Create a system group\n\n"
+
+#define HELP_getty "usage: getty [OPTIONS] BAUD_RATE[,BAUD_RATE]... TTY [TERMTYPE]\n\n-h Enable hardware RTS/CTS flow control\n-L Set CLOCAL (ignore Carrier Detect state)\n-m Get baud rate from modem's CONNECT status message\n-n Don't prompt for login name\n-w Wait for CR or LF before sending /etc/issue\n-i Don't display /etc/issue\n-f ISSUE_FILE Display ISSUE_FILE instead of /etc/issue\n-l LOGIN Invoke LOGIN instead of /bin/login\n-t SEC Terminate after SEC if no login name is read\n-I INITSTR Send INITSTR before anything else\n-H HOST Log HOST into the utmp file as the hostname\n\n"
+
+#define HELP_getfattr "usage: getfattr [-d] [-h] [-n NAME] FILE...\n\nRead POSIX extended attributes.\n\n-d Show values as well as names\n-h Do not dereference symbolic links\n-n Show only attributes with the given name\n\n"
+
+#define HELP_fsck "usage: fsck [-ANPRTV] [-C FD] [-t FSTYPE] [FS_OPTS] [BLOCKDEV]...\n\nCheck and repair filesystems\n\n-A Walk /etc/fstab and check all filesystems\n-N Don't execute, just show what would be done\n-P With -A, check filesystems in parallel\n-R With -A, skip the root filesystem\n-T Don't show title on startup\n-V Verbose\n-C n Write status information to specified filedescriptor\n-t TYPE List of filesystem types to check\n\n\n"
+
+#define HELP_fold "usage: fold [-bsu] [-w WIDTH] [FILE...]\n\nFolds (wraps) or unfolds ascii text by adding or removing newlines.\nDefault line width is 80 columns for folding and infinite for unfolding.\n\n-b Fold based on bytes instead of columns\n-s Fold/unfold at whitespace boundaries if possible\n-u Unfold text (and refold if -w is given)\n-w Set lines to WIDTH columns or bytes\n\n"
+
+#define HELP_fdisk "usage: fdisk [-lu] [-C CYLINDERS] [-H HEADS] [-S SECTORS] [-b SECTSZ] DISK\n\nChange partition table\n\n-u Start and End are in sectors (instead of cylinders)\n-l Show partition table for each DISK, then exit\n-b size sector size (512, 1024, 2048 or 4096)\n-C CYLINDERS Set number of cylinders/heads/sectors\n-H HEADS\n-S SECTORS\n\n"
+
+#define HELP_expr "usage: expr ARG1 OPERATOR ARG2...\n\nEvaluate expression and print result. For example, \"expr 1 + 2\".\n\nThe supported operators are (grouped from highest to lowest priority):\n\n ( ) : * / % + - != <= < >= > = & |\n\nEach constant and operator must be a separate command line argument.\nAll operators are infix, meaning they expect a constant (or expression\nthat resolves to a constant) on each side of the operator. Operators of\nthe same priority (within each group above) are evaluated left to right.\nParentheses may be used (as separate arguments) to elevate the priority\nof expressions.\n\nCalling expr from a command shell requires a lot of \\( or '*' escaping\nto avoid interpreting shell control characters.\n\nThe & and | operators are logical (not bitwise) and may operate on\nstrings (a blank string is \"false\"). Comparison operators may also\noperate on strings (alphabetical sort).\n\nConstants may be strings or integers. Comparison, logical, and regex\noperators may operate on strings (a blank string is \"false\"), other\noperators require integers.\n\n"
+
+#define HELP_dumpleases "usage: dumpleases [-r|-a] [-f LEASEFILE]\n\nDisplay DHCP leases granted by udhcpd\n-f FILE, Lease file\n-r Show remaining time\n-a Show expiration time\n\n"
+
+#define HELP_diff "usage: diff [-abBdiNqrTstw] [-L LABEL] [-S FILE] [-U LINES] FILE1 FILE2\n\n-a Treat all files as text\n-b Ignore changes in the amount of whitespace\n-B Ignore changes whose lines are all blank\n-d Try hard to find a smaller set of changes\n-i Ignore case differences\n-L Use LABEL instead of the filename in the unified header\n-N Treat absent files as empty\n-q Output only whether files differ\n-r Recurse\n-S Start with FILE when comparing directories\n-T Make tabs line up by prefixing a tab when necessary\n-s Report when two files are the same\n-t Expand tabs to spaces in output\n-U Output LINES lines of context\n-w Ignore all whitespace\n\n--color Colored output\n\n"
+
+#define HELP_dhcpd "usage: dhcpd [-46fS] [-i IFACE] [-P N] [CONFFILE]\n\n -f Run in foreground\n -i Interface to use\n -S Log to syslog too\n -P N Use port N (default ipv4 67, ipv6 547)\n -4, -6 Run as a DHCPv4 or DHCPv6 server\n\n"
+
+#define HELP_dhcp6 "usage: dhcp6 [-fbnqvR] [-i IFACE] [-r IP] [-s PROG] [-p PIDFILE]\n\n Configure network dynamicaly using DHCP.\n\n -i Interface to use (default eth0)\n -p Create pidfile\n -s Run PROG at DHCP events\n -t Send up to N Solicit packets\n -T Pause between packets (default 3 seconds)\n -A Wait N seconds after failure (default 20)\n -f Run in foreground\n -b Background if lease is not obtained\n -n Exit if lease is not obtained\n -q Exit after obtaining lease\n -R Release IP on exit\n -S Log to syslog too\n -r Request this IP address\n -v Verbose\n\n Signals:\n USR1 Renew current lease\n USR2 Release current lease\n\n"
+
+#define HELP_dhcp "usage: dhcp [-fbnqvoCRB] [-i IFACE] [-r IP] [-s PROG] [-p PIDFILE]\n [-H HOSTNAME] [-V VENDOR] [-x OPT:VAL] [-O OPT]\n\n Configure network dynamicaly using DHCP.\n\n -i Interface to use (default eth0)\n -p Create pidfile\n -s Run PROG at DHCP events (default /usr/share/dhcp/default.script)\n -B Request broadcast replies\n -t Send up to N discover packets\n -T Pause between packets (default 3 seconds)\n -A Wait N seconds after failure (default 20)\n -f Run in foreground\n -b Background if lease is not obtained\n -n Exit if lease is not obtained\n -q Exit after obtaining lease\n -R Release IP on exit\n -S Log to syslog too\n -a Use arping to validate offered address\n -O Request option OPT from server (cumulative)\n -o Don't request any options (unless -O is given)\n -r Request this IP address\n -x OPT:VAL Include option OPT in sent packets (cumulative)\n -F Ask server to update DNS mapping for NAME\n -H Send NAME as client hostname (default none)\n -V VENDOR Vendor identifier (default 'toybox VERSION')\n -C Don't send MAC as client identifier\n -v Verbose\n\n Signals:\n USR1 Renew current lease\n USR2 Release current lease\n\n\n"
+
+#define HELP_dd "usage: dd [if=FILE] [of=FILE] [ibs=N] [obs=N] [bs=N] [count=N] [skip=N]\n [seek=N] [conv=notrunc|noerror|sync|fsync] [status=noxfer|none]\n\nCopy/convert files.\n\nif=FILE Read from FILE instead of stdin\nof=FILE Write to FILE instead of stdout\nbs=N Read and write N bytes at a time\nibs=N Read N bytes at a time\nobs=N Write N bytes at a time\ncount=N Copy only N input blocks\nskip=N Skip N input blocks\nseek=N Skip N output blocks\nconv=notrunc Don't truncate output file\nconv=noerror Continue after read errors\nconv=sync Pad blocks with zeros\nconv=fsync Physically write data out before finishing\nstatus=noxfer Don't show transfer rate\nstatus=none Don't show transfer rate or records in/out\n\nNumbers may be suffixed by c (*1), w (*2), b (*512), kD (*1000), k (*1024),\nMD (*1000*1000), M (*1024*1024), GD (*1000*1000*1000) or G (*1024*1024*1024).\n\n"
+
+#define HELP_crontab "usage: crontab [-u user] FILE\n [-u user] [-e | -l | -r]\n [-c dir]\n\nFiles used to schedule the execution of programs.\n\n-c crontab dir\n-e edit user's crontab\n-l list user's crontab\n-r delete user's crontab\n-u user\nFILE Replace crontab by FILE ('-': stdin)\n\n"
+
+#define HELP_crond "usage: crond [-fbS] [-l N] [-d N] [-L LOGFILE] [-c DIR]\n\nA daemon to execute scheduled commands.\n\n-b Background (default)\n-c crontab dir\n-d Set log level, log to stderr\n-f Foreground\n-l Set log level. 0 is the most verbose, default 8\n-S Log to syslog (default)\n-L Log to file\n\n"
+
+#define HELP_brctl "usage: brctl COMMAND [BRIDGE [INTERFACE]]\n\nManage ethernet bridges\n\nCommands:\nshow Show a list of bridges\naddbr BRIDGE Create BRIDGE\ndelbr BRIDGE Delete BRIDGE\naddif BRIDGE IFACE Add IFACE to BRIDGE\ndelif BRIDGE IFACE Delete IFACE from BRIDGE\nsetageing BRIDGE TIME Set ageing time\nsetfd BRIDGE TIME Set bridge forward delay\nsethello BRIDGE TIME Set hello time\nsetmaxage BRIDGE TIME Set max message age\nsetpathcost BRIDGE PORT COST Set path cost\nsetportprio BRIDGE PORT PRIO Set port priority\nsetbridgeprio BRIDGE PRIO Set bridge priority\nstp BRIDGE [1/yes/on|0/no/off] STP on/off\n\n"
+
+#define HELP_bootchartd "usage: bootchartd {start [PROG ARGS]}|stop|init\n\nCreate /var/log/bootlog.tgz with boot chart data\n\nstart: start background logging; with PROG, run PROG,\n then kill logging with USR1\nstop: send USR1 to all bootchartd processes\ninit: start background logging; stop when getty/xdm is seen\n (for init scripts)\n\nUnder PID 1: as init, then exec $bootchart_init, /init, /sbin/init\n\n"
+
+#define HELP_bc "usage: bc [-ilqsw] [file ...]\n\nbc is a command-line calculator with a Turing-complete language.\n\noptions:\n\n -i --interactive force interactive mode\n -l --mathlib use predefined math routines:\n\n s(expr) = sine of expr in radians\n c(expr) = cosine of expr in radians\n a(expr) = arctangent of expr, returning radians\n l(expr) = natural log of expr\n e(expr) = raises e to the power of expr\n j(n, x) = Bessel function of integer order n of x\n\n -q --quiet don't print version and copyright\n -s --standard error if any non-POSIX extensions are used\n -w --warn warn if any non-POSIX extensions are used\n\n\n"
+
+#define HELP_arping "usage: arping [-fqbDUA] [-c CNT] [-w TIMEOUT] [-I IFACE] [-s SRC_IP] DST_IP\n\nSend ARP requests/replies\n\n-f Quit on first ARP reply\n-q Quiet\n-b Keep broadcasting, don't go unicast\n-D Duplicated address detection mode\n-U Unsolicited ARP mode, update your neighbors\n-A ARP answer mode, update your neighbors\n-c N Stop after sending N ARP requests\n-w TIMEOUT Time to wait for ARP reply, seconds\n-I IFACE Interface to use (default eth0)\n-s SRC_IP Sender IP address\nDST_IP Target IP address\n\n"
+
+#define HELP_arp "Usage: arp\n[-vn] [-H HWTYPE] [-i IF] -a [HOSTNAME]\n[-v] [-i IF] -d HOSTNAME [pub]\n[-v] [-H HWTYPE] [-i IF] -s HOSTNAME HWADDR [temp]\n[-v] [-H HWTYPE] [-i IF] -s HOSTNAME HWADDR [netmask MASK] pub\n[-v] [-H HWTYPE] [-i IF] -Ds HOSTNAME IFACE [netmask MASK] pub\n\nManipulate ARP cache\n\n-a Display (all) hosts\n-s Set new ARP entry\n-d Delete a specified entry\n-v Verbose\n-n Don't resolve names\n-i IF Network interface\n-D Read <hwaddr> from given device\n-A,-p AF Protocol family\n-H HWTYPE Hardware address type\n\n\n"
+
+#define HELP_xargs_pedantic "This version supports insane posix whitespace handling rendered obsolete\nby -0 mode.\n\n\n"
+
+#define HELP_xargs "usage: xargs [-ptxr0] [-s NUM] [-n NUM] [-L NUM] [-E STR] COMMAND...\n\nRun command line one or more times, appending arguments from stdin.\n\nIf command exits with 255, don't launch another even if arguments remain.\n\n-s Size in bytes per command line\n-n Max number of arguments per command\n-0 Each argument is NULL terminated, no whitespace or quote processing\n#-p Prompt for y/n from tty before running each command\n#-t Trace, print command line to stderr\n#-x Exit if can't fit everything in one command\n#-r Don't run command with empty input\n#-L Max number of lines of input per command\n-E stop at line matching string\n\n"
+
+#define HELP_who "usage: who\n\nPrint logged user information on system\n\n"
+
+#define HELP_wc "usage: wc -lwcm [FILE...]\n\nCount lines, words, and characters in input.\n\n-l show lines\n-w show words\n-c show bytes\n-m show characters\n\nBy default outputs lines, words, bytes, and filename for each\nargument (or from stdin if none). Displays only either bytes\nor characters.\n\n"
+
+#define HELP_uuencode "usage: uuencode [-m] [file] encode-filename\n\nUuencode stdin (or file) to stdout, with encode-filename in the output.\n\n-m base64-encode\n\n"
+
+#define HELP_uudecode "usage: uudecode [-o OUTFILE] [INFILE]\n\nDecode file from stdin (or INFILE).\n\n-o write to OUTFILE instead of filename in header\n\n"
+
+#define HELP_unlink "usage: unlink FILE\n\nDeletes one file.\n\n"
+
+#define HELP_uniq "usage: uniq [-cduiz] [-w maxchars] [-f fields] [-s char] [input_file [output_file]]\n\nReport or filter out repeated lines in a file\n\n-c show counts before each line\n-d show only lines that are repeated\n-u show only lines that are unique\n-i ignore case when comparing lines\n-z lines end with \\0 not \\n\n-w compare maximum X chars per line\n-f ignore first X fields\n-s ignore first X chars\n\n"
+
+#define HELP_uname "usage: uname [-asnrvm]\n\nPrint system information.\n\n-s System name\n-n Network (domain) name\n-r Kernel Release number\n-v Kernel Version\n-m Machine (hardware) name\n-a All of the above\n\n"
+
+#define HELP_ulimit "usage: ulimit [-P PID] [-SHRacdefilmnpqrstuv] [LIMIT]\n\nPrint or set resource limits for process number PID. If no LIMIT specified\n(or read-only -ap selected) display current value (sizes in bytes).\nDefault is ulimit -P $PPID -Sf\" (show soft filesize of your shell).\n\n-S Set/show soft limit -H Set/show hard (maximum) limit\n-a Show all limits -c Core file size\n-d Process data segment -e Max scheduling priority\n-f Output file size -i Pending signal count\n-l Locked memory -m Resident Set Size\n-n Number of open files -p Pipe buffer\n-q Posix message queue -r Max Real-time priority\n-R Realtime latency (usec) -s Stack size\n-t Total CPU time (in seconds) -u Maximum processes (under this UID)\n-v Virtual memory size -P PID to affect (default $PPID)\n\n"
+
+#define HELP_tty "usage: tty [-s]\n\nShow filename of terminal connected to stdin.\n\nPrints \"not a tty\" and exits with nonzero status if no terminal\nis connected to stdin.\n\n-s silent, exit code only\n\n"
+
+#define HELP_true "Return zero.\n\n"
+
+#define HELP_touch "usage: touch [-amch] [-d DATE] [-t TIME] [-r FILE] FILE...\n\nUpdate the access and modification times of each FILE to the current time.\n\n-a change access time\n-m change modification time\n-c don't create file\n-h change symlink\n-d set time to DATE (in YYYY-MM-DDThh:mm:SS[.frac][tz] format)\n-t set time to TIME (in [[CC]YY]MMDDhhmm[.ss][frac] format)\n-r set time same as reference FILE\n\n"
+
+#define HELP_time "usage: time [-pv] COMMAND [ARGS...]\n\nRun command line and report real, user, and system time elapsed in seconds.\n(real = clock on the wall, user = cpu used by command's code,\nsystem = cpu used by OS on behalf of command.)\n\n-p posix mode (default)\n-v verbose mode\n\n"
+
+#define HELP_tee "usage: tee [-ai] [file...]\n\nCopy stdin to each listed file, and also to stdout.\nFilename \"-\" is a synonym for stdout.\n\n-a append to files\n-i ignore SIGINT\n\n"
+
+#define HELP_tail_seek "This version uses lseek, which is faster on large files.\n\n"
+
+#define HELP_tail "usage: tail [-n|c NUMBER] [-f] [FILE...]\n\nCopy last lines from files to stdout. If no files listed, copy from\nstdin. Filename \"-\" is a synonym for stdin.\n\n-n output the last NUMBER lines (default 10), +X counts from start\n-c output the last NUMBER bytes, +NUMBER counts from start\n-f follow FILE(s), waiting for more data to be appended\n\n"
+
+#define HELP_strings "usage: strings [-fo] [-t oxd] [-n LEN] [FILE...]\n\nDisplay printable strings in a binary file\n\n-f Show filename\n-n At least LEN characters form a string (default 4)\n-o Show offset (ala -t d)\n-t Show offset type (o=octal, d=decimal, x=hexadecimal)\n\n"
+
+#define HELP_split "usage: split [-a SUFFIX_LEN] [-b BYTES] [-l LINES] [INPUT [OUTPUT]]\n\nCopy INPUT (or stdin) data to a series of OUTPUT (or \"x\") files with\nalphabetically increasing suffix (aa, ab, ac... az, ba, bb...).\n\n-a Suffix length (default 2)\n-b BYTES/file (10, 10k, 10m, 10g...)\n-l LINES/file (default 1000)\n\n"
+
+#define HELP_sort_float "usage: sort [-g]\n\n-g general numeric sort (double precision with nan and inf)\n\n"
+
+#define HELP_sort_big "usage: sort [-bcdfiMsz] [-k#[,#[x]] [-t X]] [-o FILE]\n\n-b ignore leading blanks (or trailing blanks in second part of key)\n-c check whether input is sorted\n-d dictionary order (use alphanumeric and whitespace chars only)\n-f force uppercase (case insensitive sort)\n-i ignore nonprinting characters\n-M month sort (jan, feb, etc)\n-x Hexadecimal numerical sort\n-s skip fallback sort (only sort with keys)\n-z zero (null) terminated lines\n-k sort by \"key\" (see below)\n-t use a key separator other than whitespace\n-o output to FILE instead of stdout\n\nSorting by key looks at a subset of the words on each line. -k2\nuses the second word to the end of the line, -k2,2 looks at only\nthe second word, -k2,4 looks from the start of the second to the end\nof the fourth word. Specifying multiple keys uses the later keys as\ntie breakers, in order. A type specifier appended to a sort key\n(such as -2,2n) applies only to sorting that key.\n\n"
+
+#define HELP_sort "usage: sort [-run] [FILE...]\n\nSort all lines of text from input files (or stdin) to stdout.\n\n-r reverse\n-u unique lines only\n-n numeric order (instead of alphabetical)\n\n"
+
+#define HELP_sleep_float "Length can be a decimal fraction.\n\n"
+
+#define HELP_sleep "usage: sleep LENGTH\n\nWait before exiting. An optional suffix can be \"m\" (minutes), \"h\" (hours),\n\"d\" (days), or \"s\" (seconds, the default).\n\n\n"
+
+#define HELP_sed "usage: sed [-inrE] [-e SCRIPT]...|SCRIPT [-f SCRIPT_FILE]... [FILE...]\n\nStream editor. Apply one or more editing SCRIPTs to each line of input\n(from FILE or stdin) producing output (by default to stdout).\n\n-e add SCRIPT to list\n-f add contents of SCRIPT_FILE to list\n-i Edit each file in place\n-n No default output (use the p command to output matched lines)\n-r Use extended regular expression syntax\n-E Alias for -r\n-s Treat input files separately (implied by -i)\n\nA SCRIPT is a series of one or more COMMANDs separated by newlines or\nsemicolons. All -e SCRIPTs are concatenated together as if separated\nby newlines, followed by all lines from -f SCRIPT_FILEs, in order.\nIf no -e or -f SCRIPTs are specified, the first argument is the SCRIPT.\n\nEach COMMAND may be preceded by an address which limits the command to\napply only to the specified line(s). Commands without an address apply to\nevery line. Addresses are of the form:\n\n [ADDRESS[,ADDRESS]]COMMAND\n\nThe ADDRESS may be a decimal line number (starting at 1), a /regular\nexpression/ within a pair of forward slashes, or the character \"$\" which\nmatches the last line of input. (In -s or -i mode this matches the last\nline of each file, otherwise just the last line of the last file.) A single\naddress matches one line, a pair of comma separated addresses match\neverything from the first address to the second address (inclusive). If\nboth addresses are regular expressions, more than one range of lines in\neach file can match.\n\nREGULAR EXPRESSIONS in sed are started and ended by the same character\n(traditionally / but anything except a backslash or a newline works).\nBackslashes may be used to escape the delimiter if it occurs in the\nregex, and for the usual printf escapes (\\abcefnrtv and octal, hex,\nand unicode). An empty regex repeats the previous one. ADDRESS regexes\n(above) require the first delimeter to be escaped with a backslash when\nit isn't a forward slash (to distinguish it from the COMMANDs below).\n\nSed mostly operates on individual lines one at a time. It reads each line,\nprocesses it, and either writes it to the output or discards it before\nreading the next line. Sed can remember one additional line in a separate\nbuffer (using the h, H, g, G, and x commands), and can read the next line\nof input early (using the n and N command), but other than that command\nscripts operate on individual lines of text.\n\nEach COMMAND starts with a single character. The following commands take\nno arguments:\n\n { Start a new command block, continuing until a corresponding \"}\".\n Command blocks may nest. If the block has an address, commands within\n the block are only run for lines within the block's address range.\n\n } End command block (this command cannot have an address)\n\n d Delete this line and move on to the next one\n (ignores remaining COMMANDs)\n\n D Delete one line of input and restart command SCRIPT (same as \"d\"\n unless you've glued lines together with \"N\" or similar)\n\n g Get remembered line (overwriting current line)\n\n G Get remembered line (appending to current line)\n\n h Remember this line (overwriting remembered line)\n\n H Remember this line (appending to remembered line, if any)\n\n l Print line, escaping \\abfrtv (but not newline), octal escaping other\n nonprintable characters, wrapping lines to terminal width with a\n backslash, and appending $ to actual end of line.\n\n n Print default output and read next line, replacing current line\n (If no next line available, quit processing script)\n\n N Append next line of input to this line, separated by a newline\n (This advances the line counter for address matching and \"=\", if no\n next line available quit processing script without default output)\n\n p Print this line\n\n P Print this line up to first newline (from \"N\")\n\n q Quit (print default output, no more commands processed or lines read)\n\n x Exchange this line with remembered line (overwrite in both directions)\n\n = Print the current line number (followed by a newline)\n\nThe following commands (may) take an argument. The \"text\" arguments (to\nthe \"a\", \"b\", and \"c\" commands) may end with an unescaped \"\\\" to append\nthe next line (for which leading whitespace is not skipped), and also\ntreat \";\" as a literal character (use \"\\;\" instead).\n\n a [text] Append text to output before attempting to read next line\n\n b [label] Branch, jumps to :label (or with no label, to end of SCRIPT)\n\n c [text] Delete line, output text at end of matching address range\n (ignores remaining COMMANDs)\n\n i [text] Print text\n\n r [file] Append contents of file to output before attempting to read\n next line.\n\n s/S/R/F Search for regex S, replace matched text with R using flags F.\n The first character after the \"s\" (anything but newline or\n backslash) is the delimiter, escape with \\ to use normally.\n\n The replacement text may contain \"&\" to substitute the matched\n text (escape it with backslash for a literal &), or \\1 through\n \\9 to substitute a parenthetical subexpression in the regex.\n You can also use the normal backslash escapes such as \\n and\n a backslash at the end of the line appends the next line.\n\n The flags are:\n\n [0-9] A number, substitute only that occurrence of pattern\n g Global, substitute all occurrences of pattern\n i Ignore case when matching\n p Print the line if match was found and replaced\n w [file] Write (append) line to file if match replaced\n\n t [label] Test, jump to :label only if an \"s\" command found a match in\n this line since last test (replacing with same text counts)\n\n T [label] Test false, jump only if \"s\" hasn't found a match.\n\n w [file] Write (append) line to file\n\n y/old/new/ Change each character in 'old' to corresponding character\n in 'new' (with standard backslash escapes, delimiter can be\n any repeated character except \\ or \\n)\n\n : [label] Labeled target for jump commands\n\n # Comment, ignore rest of this line of SCRIPT\n\nDeviations from posix: allow extended regular expressions with -r,\nediting in place with -i, separate with -s, printf escapes in text, line\ncontinuations, semicolons after all commands, 2-address anywhere an\naddress is allowed, \"T\" command, multiline continuations for [abc],\n\\; to end [abc] argument before end of line.\n\n"
+
+#define HELP_rmdir "usage: rmdir [-p] [dirname...]\n\nRemove one or more directories.\n\n-p Remove path\n\n"
+
+#define HELP_rm "usage: rm [-fiRr] FILE...\n\nRemove each argument from the filesystem.\n\n-f force: remove without confirmation, no error if it doesn't exist\n-i interactive: prompt for confirmation\n-rR recursive: remove directory contents\n\n"
+
+#define HELP_renice "usage: renice [-gpu] -n increment ID ...\n\n"
+
+#define HELP_pwd "usage: pwd [-L|-P]\n\nPrint working (current) directory.\n\n-L Use shell's path from $PWD (when applicable)\n-P Print cannonical absolute path\n\n"
+
+#define HELP_pkill "usage: pkill [-fnovx] [-SIGNAL|-l SIGNAL] [PATTERN] [-G GID,] [-g PGRP,] [-P PPID,] [-s SID,] [-t TERM,] [-U UID,] [-u EUID,]\n\n-l Send SIGNAL (default SIGTERM)\n-V verbose\n-f Check full command line for PATTERN\n-G Match real Group ID(s)\n-g Match Process Group(s) (0 is current user)\n-n Newest match only\n-o Oldest match only\n-P Match Parent Process ID(s)\n-s Match Session ID(s) (0 for current)\n-t Match Terminal(s)\n-U Match real User ID(s)\n-u Match effective User ID(s)\n-v Negate the match\n-x Match whole command (not substring)\n\n"
+
+#define HELP_pgrep "usage: pgrep [-clfnovx] [-d DELIM] [-L SIGNAL] [PATTERN] [-G GID,] [-g PGRP,] [-P PPID,] [-s SID,] [-t TERM,] [-U UID,] [-u EUID,]\n\nSearch for process(es). PATTERN is an extended regular expression checked\nagainst command names.\n\n-c Show only count of matches\n-d Use DELIM instead of newline\n-L Send SIGNAL instead of printing name\n-l Show command name\n-f Check full command line for PATTERN\n-G Match real Group ID(s)\n-g Match Process Group(s) (0 is current user)\n-n Newest match only\n-o Oldest match only\n-P Match Parent Process ID(s)\n-s Match Session ID(s) (0 for current)\n-t Match Terminal(s)\n-U Match real User ID(s)\n-u Match effective User ID(s)\n-v Negate the match\n-x Match whole command (not substring)\n\n"
+
+#define HELP_iotop "usage: iotop [-AaKObq] [-n NUMBER] [-d SECONDS] [-p PID,] [-u USER,]\n\nRank processes by I/O.\n\n-A All I/O, not just disk\n-a Accumulated I/O (not percentage)\n-H Show threads\n-K Kilobytes\n-k Fallback sort FIELDS (default -[D]IO,-ETIME,-PID)\n-m Maximum number of tasks to show\n-O Only show processes doing I/O\n-o Show FIELDS (default PID,PR,USER,[D]READ,[D]WRITE,SWAP,[D]IO,COMM)\n-s Sort by field number (0-X, default 6)\n-b Batch mode (no tty)\n-d Delay SECONDS between each cycle (default 3)\n-n Exit after NUMBER iterations\n-p Show these PIDs\n-u Show these USERs\n-q Quiet (no header lines)\n\nCursor LEFT/RIGHT to change sort, UP/DOWN move list, space to force\nupdate, R to reverse sort, Q to exit.\n\n"
+
+#define HELP_top "usage: top [-Hbq] [-k FIELD,] [-o FIELD,] [-s SORT] [-n NUMBER] [-m LINES] [-d SECONDS] [-p PID,] [-u USER,]\n\nShow process activity in real time.\n\n-H Show threads\n-k Fallback sort FIELDS (default -S,-%CPU,-ETIME,-PID)\n-o Show FIELDS (def PID,USER,PR,NI,VIRT,RES,SHR,S,%CPU,%MEM,TIME+,CMDLINE)\n-O Add FIELDS (replacing PR,NI,VIRT,RES,SHR,S from default)\n-s Sort by field number (1-X, default 9)\n-b Batch mode (no tty)\n-d Delay SECONDS between each cycle (default 3)\n-m Maximum number of tasks to show\n-n Exit after NUMBER iterations\n-p Show these PIDs\n-u Show these USERs\n-q Quiet (no header lines)\n\nCursor LEFT/RIGHT to change sort, UP/DOWN move list, space to force\nupdate, R to reverse sort, Q to exit.\n\n"
+
+#define HELP_ps "usage: ps [-AadefLlnwZ] [-gG GROUP,] [-k FIELD,] [-o FIELD,] [-p PID,] [-t TTY,] [-uU USER,]\n\nList processes.\n\nWhich processes to show (-gGuUpPt selections may be comma separated lists):\n\n-A all -a has terminal not session leader\n-d All but session leaders -e synonym for -A\n-g in GROUPs -G in real GROUPs (before sgid)\n-p PIDs (--pid) -P Parent PIDs (--ppid)\n-s In session IDs -t Attached to selected TTYs\n-T Show threads also -u Owned by selected USERs\n-U real USERs (before suid)\n\nOutput modifiers:\n\n-k Sort FIELDs (-FIELD to reverse) -M Measure/pad future field widths\n-n Show numeric USER and GROUP -w Wide output (don't truncate fields)\n\nWhich FIELDs to show. (-o HELP for list, default = -o PID,TTY,TIME,CMD)\n\n-f Full listing (-o USER:12=UID,PID,PPID,C,STIME,TTY,TIME,ARGS=CMD)\n-l Long listing (-o F,S,UID,PID,PPID,C,PRI,NI,ADDR,SZ,WCHAN,TTY,TIME,CMD)\n-o Output FIELDs instead of defaults, each with optional :size and =title\n-O Add FIELDS to defaults\n-Z Include LABEL\n\n"
+
+#define HELP_printf "usage: printf FORMAT [ARGUMENT...]\n\nFormat and print ARGUMENT(s) according to FORMAT, using C printf syntax\n(% escapes for cdeEfgGiosuxX, \\ escapes for abefnrtv0 or \\OCTAL or \\xHEX).\n\n"
+
+#define HELP_patch "usage: patch [-d DIR] [-i file] [-p depth] [-Rlu] [--dry-run]\n\nApply a unified diff to one or more files.\n\n-d modify files in DIR\n-i Input file (defaults=stdin)\n-l Loose match (ignore whitespace)\n-p Number of '/' to strip from start of file paths (default=all)\n-R Reverse patch.\n-u Ignored (only handles \"unified\" diffs)\n--dry-run Don't change files, just confirm patch applies\n\nThis version of patch only handles unified diffs, and only modifies\na file when all all hunks to that file apply. Patch prints failed\nhunks to stderr, and exits with nonzero status if any hunks fail.\n\nA file compared against /dev/null (or with a date <= the epoch) is\ncreated/deleted as appropriate.\n\n"
+
+#define HELP_paste "usage: paste [-s] [-d DELIMITERS] [FILE...]\n\nMerge corresponding lines from each input file.\n\n-d list of delimiter characters to separate fields with (default is \\t)\n-s sequential mode: turn each input file into one line of output\n\n"
+
+#define HELP_od "usage: od [-bcdosxv] [-j #] [-N #] [-w #] [-A doxn] [-t acdfoux[#]]\n\n-A Address base (decimal, octal, hexdecimal, none)\n-j Skip this many bytes of input\n-N Stop dumping after this many bytes\n-t Output type a(scii) c(har) d(ecimal) f(loat) o(ctal) u(nsigned) (he)x\n plus optional size in bytes\n aliases: -b=-t o1, -c=-t c, -d=-t u2, -o=-t o2, -s=-t d2, -x=-t x2\n-v Don't collapse repeated lines together\n-w Total line width in bytes (default 16)\n\n"
+
+#define HELP_nohup "usage: nohup COMMAND [ARGS...]\n\nRun a command that survives the end of its terminal.\n\nRedirect tty on stdin to /dev/null, tty on stdout to \"nohup.out\".\n\n"
+
+#define HELP_nl "usage: nl [-E] [-l #] [-b MODE] [-n STYLE] [-s SEPARATOR] [-w WIDTH] [FILE...]\n\nNumber lines of input.\n\n-E Use extended regex syntax (when doing -b pREGEX)\n-b which lines to number: a (all) t (non-empty, default) pREGEX (pattern)\n-l Only count last of this many consecutive blank lines\n-n number STYLE: ln (left justified) rn (right justified) rz (zero pad)\n-s Separator to use between number and line (instead of TAB)\n-w Width of line numbers (default 6)\n\n"
+
+#define HELP_nice "usage: nice [-n PRIORITY] command [args...]\n\nRun a command line at an increased or decreased scheduling priority.\n\nHigher numbers make a program yield more CPU time, from -20 (highest\npriority) to 19 (lowest). By default processes inherit their parent's\nniceness (usually 0). By default this command adds 10 to the parent's\npriority. Only root can set a negative niceness level.\n\n"
+
+#define HELP_mkfifo_z "usage: mkfifo [-Z CONTEXT]\n\n-Z Security context\n\n"
+
+#define HELP_mkfifo "usage: mkfifo [NAME...]\n\nCreate FIFOs (named pipes).\n\n"
+
+#define HELP_mkdir_z "usage: [-Z context]\n\n-Z set security context\n\n"
+
+#define HELP_mkdir "usage: mkdir [-vp] [-m mode] [dirname...]\n\nCreate one or more directories.\n\n-m set permissions of directory to mode\n-p make parent directories as needed\n-v verbose\n\n"
+
+#define HELP_ls "usage: ls [-ACFHLRSZacdfhiklmnpqrstux1] [--color[=auto]] [directory...]\n\nlist files\n\nwhat to show:\n-a all files including .hidden -b escape nongraphic chars\n-c use ctime for timestamps -d directory, not contents\n-i inode number -p put a '/' after dir names\n-q unprintable chars as '?' -s storage used (1024 byte units)\n-u use access time for timestamps -A list all files but . and ..\n-H follow command line symlinks -L follow symlinks\n-R recursively list in subdirs -F append /dir *exe @sym |FIFO\n-Z security context\n\noutput formats:\n-1 list one file per line -C columns (sorted vertically)\n-g like -l but no owner -h human readable sizes\n-l long (show full details) -m comma separated\n-n like -l but numeric uid/gid -o like -l but no group\n-x columns (horizontal sort) -ll long with nanoseconds (--full-time)\n--color device=yellow symlink=turquoise/red dir=blue socket=purple\n files: exe=green suid=red suidfile=redback stickydir=greenback\n =auto means detect if output is a tty.\n\nsorting (default is alphabetical):\n-f unsorted -r reverse -t timestamp -S size\n\n"
+
+#define HELP_logger "usage: logger [-s] [-t TAG] [-p [FACILITY.]PRIORITY] [message...]\n\nLog message (or stdin) to syslog.\n\n-s Also write message to stderr\n-t Use TAG instead of username to identify message source\n-p Specify PRIORITY with optional FACILITY. Default is \"user.notice\"\n\n"
+
+#define HELP_ln "usage: ln [-sfnv] [FROM...] TO\n\nCreate a link between FROM and TO.\nWith only one argument, create link in current directory.\n\n-s Create a symbolic link\n-f Force the creation of the link, even if TO already exists\n-n Symlink at destination treated as file\n-v Verbose\n\n"
+
+#define HELP_link "usage: link FILE NEWLINK\n\nCreate hardlink to a file.\n\n"
+
+#define HELP_killall5 "usage: killall5 [-l [SIGNAL]] [-SIGNAL|-s SIGNAL] [-o PID]...\n\nSend a signal to all processes outside current session.\n\n-l List signal name(s) and number(s)\n-o PID Omit PID\n-s send SIGNAL (default SIGTERM)\n\n"
+
+#define HELP_kill "usage: kill [-l [SIGNAL] | -s SIGNAL | -SIGNAL] pid...\n\nSend signal to process(es).\n\n-l List signal name(s) and number(s)\n-s Send SIGNAL (default SIGTERM)\n\n"
+
+#define HELP_whoami "usage: whoami\n\nPrint the current user name.\n\n"
+
+#define HELP_logname "usage: logname\n\nPrint the current user name.\n\n"
+
+#define HELP_groups "usage: groups [user]\n\nPrint the groups a user is in.\n\n"
+
+#define HELP_id_z "usage: id [-Z]\n\n-Z Show only security context\n\n"
+
+#define HELP_id "usage: id [-nGgru]\n\nPrint user and group ID.\n\n-n print names instead of numeric IDs (to be used with -Ggu)\n-G Show only the group IDs\n-g Show only the effective group ID\n-r Show real ID instead of effective ID\n-u Show only the effective user ID\n\n"
+
+#define HELP_iconv "usage: iconv [-f FROM] [-t TO] [FILE...]\n\nConvert character encoding of files.\n\n-c Omit invalid chars\n-f convert from (default utf8)\n-t convert to (default utf8)\n\n"
+
+#define HELP_head "usage: head [-n number] [file...]\n\nCopy first lines from files to stdout. If no files listed, copy from\nstdin. Filename \"-\" is a synonym for stdin.\n\n-n Number of lines to copy\n-c Number of bytes to copy\n-q Never print headers\n-v Always print headers\n\n"
+
+#define HELP_grep "usage: grep [-EFrivwcloqsHbhn] [-ABC NUM] [-m MAX] [-e REGEX]... [-MS PATTERN]... [-f REGFILE] [FILE]...\n\nShow lines matching regular expressions. If no -e, first argument is\nregular expression to match. With no files (or \"-\" filename) read stdin.\nReturns 0 if matched, 1 if no match found.\n\n-e Regex to match. (May be repeated.)\n-f File listing regular expressions to match.\n\nfile search:\n-r Recurse into subdirectories (defaults FILE to \".\")\n-M Match filename pattern (--include)\n-S Skip filename pattern (--exclude)\n-I Ignore binary files\n\nmatch type:\n-A Show NUM lines after -B Show NUM lines before match\n-C NUM lines context (A+B) -E extended regex syntax\n-F fixed (literal match) -a always text (not binary)\n-i case insensitive -m match MAX many lines\n-v invert match -w whole word (implies -E)\n-x whole line -z input NUL terminated\n\ndisplay modes: (default: matched line)\n-c count of matching lines -l show matching filenames\n-o only matching part -q quiet (errors only)\n-s silent (no error msg) -Z output NUL terminated\n\noutput prefix (default: filename if checking more than 1 file)\n-H force filename -b byte offset of match\n-h hide filename -n line number of match\n\n"
+
+#define HELP_getconf "usage: getconf -a [PATH] | -l | NAME [PATH]\n\nGet system configuration values. Values from pathconf(3) require a path.\n\n-a Show all (defaults to \"/\" if no path given)\n-l List available value names (grouped by source)\n\n"
+
+#define HELP_find "usage: find [-HL] [DIR...] [<options>]\n\nSearch directories for matching files.\nDefault: search \".\" match all -print all matches.\n\n-H Follow command line symlinks -L Follow all symlinks\n\nMatch filters:\n-name PATTERN filename with wildcards -iname case insensitive -name\n-path PATTERN path name with wildcards -ipath case insensitive -path\n-user UNAME belongs to user UNAME -nouser user ID not known\n-group GROUP belongs to group GROUP -nogroup group ID not known\n-perm [-/]MODE permissions (-=min /=any) -prune ignore contents of dir\n-size N[c] 512 byte blocks (c=bytes) -xdev only this filesystem\n-links N hardlink count -atime N[u] accessed N units ago\n-ctime N[u] created N units ago -mtime N[u] modified N units ago\n-newer FILE newer mtime than FILE -mindepth # at least # dirs down\n-depth ignore contents of dir -maxdepth # at most # dirs down\n-inum N inode number N -empty empty files and dirs\n-type [bcdflps] (block, char, dir, file, symlink, pipe, socket)\n\nNumbers N may be prefixed by a - (less than) or + (greater than). Units for\n-Xtime are d (days, default), h (hours), m (minutes), or s (seconds).\n\nCombine matches with:\n!, -a, -o, ( ) not, and, or, group expressions\n\nActions:\n-print Print match with newline -print0 Print match with null\n-exec Run command with path -execdir Run command in file's dir\n-ok Ask before exec -okdir Ask before execdir\n-delete Remove matching file/dir\n\nCommands substitute \"{}\" with matched file. End with \";\" to run each file,\nor \"+\" (next argument after \"{}\") to collect and run with multiple files.\n\n"
+
+#define HELP_file "usage: file [-hL] [file...]\n\nExamine the given files and describe their content types.\n\n-h don't follow symlinks (default)\n-L follow symlinks\n\n"
+
+#define HELP_false "Return nonzero.\n\n"
+
+#define HELP_expand "usage: expand [-t TABLIST] [FILE...]\n\nExpand tabs to spaces according to tabstops.\n\n-t TABLIST\n\nSpecify tab stops, either a single number instead of the default 8,\nor a comma separated list of increasing numbers representing tabstop\npositions (absolute, not increments) with each additional tab beyound\nthat becoming one space.\n\n"
+
+#define HELP_env "usage: env [-i] [-u NAME] [NAME=VALUE...] [command [option...]]\n\nSet the environment for command invocation, or list environment variables.\n\n-i Clear existing environment\n-u NAME Remove NAME from the environment\n-0 Use null instead of newline in output\n\n"
+
+#define HELP_echo "usage: echo [-ne] [args...]\n\nWrite each argument to stdout, with one space between each, followed\nby a newline.\n\n-n No trailing newline\n-e Process the following escape sequences:\n \\\\ backslash\n \\0NNN octal values (1 to 3 digits)\n \\a alert (beep/flash)\n \\b backspace\n \\c stop output here (avoids trailing newline)\n \\f form feed\n \\n newline\n \\r carriage return\n \\t horizontal tab\n \\v vertical tab\n \\xHH hexadecimal values (1 to 2 digits)\n\n"
+
+#define HELP_du "usage: du [-d N] [-askxHLlmc] [file...]\n\nShow disk usage, space consumed by files and directories.\n\nSize in:\n-k 1024 byte blocks (default)\n-K 512 byte blocks (posix)\n-m megabytes\n-h human readable format (e.g., 1K 243M 2G )\n\nWhat to show:\n-a all files, not just directories\n-H follow symlinks on cmdline\n-L follow all symlinks\n-s only total size of each argument\n-x don't leave this filesystem\n-c cumulative total\n-d N only depth < N\n-l disable hardlink filter\n\n"
+
+#define HELP_dirname "usage: dirname PATH...\n\nShow directory portion of path.\n\n"
+
+#define HELP_df "usage: df [-HPkhi] [-t type] [FILESYSTEM ...]\n\nThe \"disk free\" command shows total/used/available disk space for\neach filesystem listed on the command line, or all currently mounted\nfilesystems.\n\n-a Show all (including /proc and friends)\n-P The SUSv3 \"Pedantic\" option\n-k Sets units back to 1024 bytes (the default without -P)\n-h Human readable output (K=1024)\n-H Human readable output (k=1000)\n-i Show inodes instead of blocks\n-t type Display only filesystems of this type\n\nPedantic provides a slightly less useful output format dictated by Posix,\nand sets the units to 512 bytes instead of the default 1024 bytes.\n\n"
+
+#define HELP_date "usage: date [-u] [-r FILE] [-d DATE] [+DISPLAY_FORMAT] [-D SET_FORMAT] [SET]\n\nSet/get the current date/time. With no SET shows the current date.\n\nDefault SET format is \"MMDDhhmm[[CC]YY][.ss]\", that's (2 digits each)\nmonth, day, hour (0-23), and minute. Optionally century, year, and second.\nAlso accepts \"@UNIXTIME[.FRACTION]\" as seconds since midnight Jan 1 1970.\n\n-d Show DATE instead of current time (convert date format)\n-D +FORMAT for SET or -d (instead of MMDDhhmm[[CC]YY][.ss])\n-r Use modification time of FILE instead of current date\n-u Use UTC instead of current timezone\n\n+FORMAT specifies display format string using strftime(3) syntax:\n\n%% literal % %n newline %t tab\n%S seconds (00-60) %M minute (00-59) %m month (01-12)\n%H hour (0-23) %I hour (01-12) %p AM/PM\n%y short year (00-99) %Y year %C century\n%a short weekday name %A weekday name %u day of week (1-7, 1=mon)\n%b short month name %B month name %Z timezone name\n%j day of year (001-366) %d day of month (01-31) %e day of month ( 1-31)\n%N nanosec (output only)\n\n%U Week of year (0-53 start sunday) %W Week of year (0-53 start monday)\n%V Week of year (1-53 start monday, week < 4 days not part of this year)\n\n%D = \"%m/%d/%y\" %r = \"%I : %M : %S %p\" %T = \"%H:%M:%S\" %h = \"%b\"\n%x locale date %X locale time %c locale date/time\n\n"
+
+#define HELP_cut "usage: cut [-Ds] [-bcfF LIST] [-dO DELIM] [FILE...]\n\nPrint selected parts of lines from each FILE to standard output.\n\nEach selection LIST is comma separated, either numbers (counting from 1)\nor dash separated ranges (inclusive, with X- meaning to end of line and -X\nfrom start). By default selection ranges are sorted and collated, use -D\nto prevent that.\n\n-b select bytes\n-c select UTF-8 characters\n-C select unicode columns\n-d use DELIM (default is TAB for -f, run of whitespace for -F)\n-D Don't sort/collate selections or match -fF lines without delimiter\n-f select fields (words) separated by single DELIM character\n-F select fields separated by DELIM regex\n-O output delimiter (default one space for -F, input delim for -f)\n-s skip lines without delimiters\n\n"
+
+#define HELP_cpio "usage: cpio -{o|t|i|p DEST} [-v] [--verbose] [-F FILE] [--no-preserve-owner]\n [ignored: -mdu -H newc]\n\ncopy files into and out of a \"newc\" format cpio archive\n\n-F FILE use archive FILE instead of stdin/stdout\n-p DEST copy-pass mode, copy stdin file list to directory DEST\n-i extract from archive into file system (stdin=archive)\n-o create archive (stdin=list of files, stdout=archive)\n-t test files (list only, stdin=archive, stdout=list of files)\n-v verbose (list files during create/extract)\n--no-preserve-owner (don't set ownership during extract)\n--trailer Add legacy trailer (prevents concatenation).\n\n"
+
+#define HELP_install "usage: install [-dDpsv] [-o USER] [-g GROUP] [-m MODE] [SOURCE...] DEST\n\nCopy files and set attributes.\n\n-d Act like mkdir -p\n-D Create leading directories for DEST\n-g Make copy belong to GROUP\n-m Set permissions to MODE\n-o Make copy belong to USER\n-p Preserve timestamps\n-s Call \"strip -p\"\n-v Verbose\n\n"
+
+#define HELP_mv "usage: mv [-fivn] SOURCE... DEST\"\n\n-f force copy by deleting destination file\n-i interactive, prompt before overwriting existing DEST\n-v verbose\n-n no clobber (don't overwrite DEST)\n\n"
+
+#define HELP_cp_preserve "usage: cp [--preserve=motcxa]\n\n--preserve takes either a comma separated list of attributes, or the first\nletter(s) of:\n\n mode - permissions (ignore umask for rwx, copy suid and sticky bit)\n ownership - user and group\n timestamps - file creation, modification, and access times.\n context - security context\n xattr - extended attributes\n all - all of the above\n\n"
+
+#define HELP_cp "usage: cp [-adlnrsvfipRHLP] SOURCE... DEST\n\nCopy files from SOURCE to DEST. If more than one SOURCE, DEST must\nbe a directory.\n\n-D create leading dirs under DEST (--parents)\n-f delete destination files we can't write to\n-F delete any existing destination file first (--remove-destination)\n-i interactive, prompt before overwriting existing DEST\n-p preserve timestamps, ownership, and mode\n-R recurse into subdirectories (DEST must be a directory)\n-H Follow symlinks listed on command line\n-L Follow all symlinks\n-P Do not follow symlinks [default]\n-a same as -dpr\n-d don't dereference symlinks\n-l hard link instead of copy\n-n no clobber (don't overwrite DEST)\n-r synonym for -R\n-s symlink instead of copy\n-v verbose\n\n"
+
+#define HELP_comm "usage: comm [-123] FILE1 FILE2\n\nReads FILE1 and FILE2, which should be ordered, and produces three text\ncolumns as output: lines only in FILE1; lines only in FILE2; and lines\nin both files. Filename \"-\" is a synonym for stdin.\n\n-1 suppress the output column of lines unique to FILE1\n-2 suppress the output column of lines unique to FILE2\n-3 suppress the output column of lines duplicated in FILE1 and FILE2\n\n"
+
+#define HELP_cmp "usage: cmp [-l] [-s] FILE1 FILE2\n\nCompare the contents of two files.\n\n-l show all differing bytes\n-s silent\n\n"
+
+#define HELP_crc32 "usage: crc32 [file...]\n\nOutput crc32 checksum for each file.\n\n"
+
+#define HELP_cksum "usage: cksum [-IPLN] [file...]\n\nFor each file, output crc32 checksum value, length and name of file.\nIf no files listed, copy from stdin. Filename \"-\" is a synonym for stdin.\n\n-H Hexadecimal checksum (defaults to decimal)\n-L Little endian (defaults to big endian)\n-P Pre-inversion\n-I Skip post-inversion\n-N Do not include length in CRC calculation (or output)\n\n"
+
+#define HELP_chmod "usage: chmod [-R] MODE FILE...\n\nChange mode of listed file[s] (recursively with -R).\n\nMODE can be (comma-separated) stanzas: [ugoa][+-=][rwxstXugo]\n\nStanzas are applied in order: For each category (u = user,\ng = group, o = other, a = all three, if none specified default is a),\nset (+), clear (-), or copy (=), r = read, w = write, x = execute.\ns = u+s = suid, g+s = sgid, o+s = sticky. (+t is an alias for o+s).\nsuid/sgid: execute as the user/group who owns the file.\nsticky: can't delete files you don't own out of this directory\nX = x for directories or if any category already has x set.\n\nOr MODE can be an octal value up to 7777 ug uuugggooo top +\nbit 1 = o+x, bit 1<<8 = u+w, 1<<11 = g+1 sstrwxrwxrwx bottom\n\nExamples:\nchmod u+w file - allow owner of \"file\" to write to it.\nchmod 744 file - user can read/write/execute, everyone else read only\n\n"
+
+#define HELP_chown "see: chgrp\n\n"
+
+#define HELP_chgrp "usage: chgrp/chown [-RHLP] [-fvh] group file...\n\nChange group of one or more files.\n\n-f suppress most error messages.\n-h change symlinks instead of what they point to\n-R recurse into subdirectories (implies -h)\n-H with -R change target of symlink, follow command line symlinks\n-L with -R change target of symlink, follow all symlinks\n-P with -R change symlink, do not follow symlinks (default)\n-v verbose output\n\n"
+
+#define HELP_catv "usage: catv [-evt] [filename...]\n\nDisplay nonprinting characters as escape sequences. Use M-x for\nhigh ascii characters (>127), and ^x for other nonprinting chars.\n\n-e Mark each newline with $\n-t Show tabs as ^I\n-v Don't use ^x or M-x escapes\n\n"
+
+#define HELP_cat_v "usage: cat [-evt]\n\n-e Mark each newline with $\n-t Show tabs as ^I\n-v Display nonprinting characters as escape sequences with M-x for\n high ascii characters (>127), and ^x for other nonprinting chars\n\n"
+
+#define HELP_cat "usage: cat [-u] [file...]\n\nCopy (concatenate) files to stdout. If no files listed, copy from stdin.\nFilename \"-\" is a synonym for stdin.\n\n-u Copy one byte at a time (slow)\n\n"
+
+#define HELP_cal "usage: cal [[month] year]\n\nPrint a calendar.\n\nWith one argument, prints all months of the specified year.\nWith two arguments, prints calendar for month and year.\n\n"
+
+#define HELP_basename "usage: basename [-a] [-s SUFFIX] NAME... | NAME [SUFFIX]\n\nReturn non-directory portion of a pathname removing suffix.\n\n-a All arguments are names.\n-s SUFFIX Remove suffix (implies -a).\n\n"
+
diff --git a/login/lib/args.c b/login/lib/args.c
@@ -0,0 +1,497 @@
+/* args.c - Command line argument parsing.
+ *
+ * Copyright 2006 Rob Landley <rob@landley.net>
+ */
+
+// NOTE: If option parsing segfaults, switch on TOYBOX_DEBUG in menuconfig.
+
+// Enabling TOYBOX_DEBUG in .config adds syntax checks to option string parsing
+// which aren't needed in the final code (your option string is hardwired and
+// should be correct when you ship), but are useful for development.
+
+#include "toys.h"
+
+// Design goals:
+// Don't use getopt() out of libc.
+// Don't permute original arguments (screwing up ps/top output).
+// Integrated --long options "(noshort)a(along)b(blong1)(blong2)"
+
+/* This uses a getopt-like option string, but not getopt() itself. We call
+ * it the get_opt string.
+ *
+ * Each option in the get_opt string corresponds to a bit position in the
+ * return value. The rightmost argument is (1<<0), the next to last is (1<<1)
+ * and so on. If the option isn't seen in argv[], its bit remains 0.
+ *
+ * Options which have an argument fill in the corresponding slot in the global
+ * union "this" (see generated/globals.h), which it treats as an array of longs
+ * (note that sizeof(long)==sizeof(pointer) is guaranteed by LP64).
+ *
+ * You don't have to free the option strings, which point into the environment
+ * space. List objects should be freed by main() when command_main() returns.
+ *
+ * Example:
+ * Calling get_optflags() when toys.which->options="ab:c:d" and
+ * argv = ["command", "-b", "fruit", "-d", "walrus"] results in:
+ *
+ * Changes to struct toys:
+ * toys.optflags = 5 (I.E. 0101 so -b = 4 | -d = 1)
+ * toys.optargs[0] = "walrus" (leftover argument)
+ * toys.optargs[1] = NULL (end of list)
+ * toys.optc = 1 (there was 1 leftover argument)
+ *
+ * Changes to union this:
+ * this[0]=NULL (because -c didn't get an argument this time)
+ * this[1]="fruit" (argument to -b)
+ */
+
+// What you can put in a get_opt string:
+// Any otherwise unused character (all letters, unprefixed numbers) specify
+// an option that sets a flag. The bit value is the same as the binary digit
+// if you string the option characters together in order.
+// So in "abcdefgh" a = 128, h = 1
+//
+// Suffixes specify that this option takes an argument (stored in GLOBALS):
+// Note that pointer and long are always the same size, even on 64 bit.
+// : string argument, keep most recent if more than one
+// * string argument, appended to a struct arg_list linked list.
+// # signed long argument
+// <LOW - die if less than LOW
+// >HIGH - die if greater than HIGH
+// =DEFAULT - value if not specified
+// - signed long argument defaulting to negative (say + for positive)
+// . double precision floating point argument (with CFG_TOYBOX_FLOAT)
+// Chop this option out with USE_TOYBOX_FLOAT() in option string
+// Same <LOW>HIGH=DEFAULT as #
+// @ occurrence counter (which is a long)
+// % time offset in milliseconds with optional s/m/h/d suffix
+// (longopt)
+// | this is required. If more than one marked, only one required.
+// ; long option's argument is optional (can only be supplied with --opt=)
+// ^ Stop parsing after encountering this argument
+// " " (space char) the "plus an argument" must be separate
+// I.E. "-j 3" not "-j3". So "kill -stop" != "kill -s top"
+//
+// At the beginning of the get_opt string (before any options):
+// ^ stop at first nonoption argument
+// <0 die if less than # leftover arguments (default 0)
+// >9 die if > # leftover arguments (default MAX_INT)
+// ? Allow unknown arguments (pass them through to command).
+// & first arg has imaginary dash (ala tar/ps/ar) which sets FLAGS_NODASH
+//
+// At the end: [groups] of previously seen options
+// - Only one in group (switch off) [-abc] means -ab=-b, -ba=-a, -abc=-c
+// + Synonyms (switch on all) [+abc] means -ab=-abc, -c=-abc
+// ! More than one in group is error [!abc] means -ab calls error_exit()
+// primarily useful if you can switch things back off again.
+
+// Notes from getopt man page
+// - and -- cannot be arguments.
+// -- force end of arguments
+// - is a synonym for stdin in file arguments
+// -abcd means -a -b -c -d (but if -b takes an argument, then it's -a -b cd)
+
+// Linked list of all known options (option string parsed into this).
+// Hangs off getoptflagstate, freed at end of option parsing.
+struct opts {
+ struct opts *next;
+ long *arg; // Pointer into union "this" to store arguments at.
+ int c; // Argument character to match
+ int flags; // |=1, ^=2, " "=4, ;=8
+ unsigned long long dex[3]; // bits to disable/enable/exclude in toys.optflags
+ char type; // Type of arguments to store union "this"
+ union {
+ long l;
+ FLOAT f;
+ } val[3]; // low, high, default - range of allowed values
+};
+
+// linked list of long options. (Hangs off getoptflagstate, free at end of
+// option parsing, details about flag to set and global slot to fill out
+// stored in related short option struct, but if opt->c = -1 the long option
+// is "bare" (has no corresponding short option).
+struct longopts {
+ struct longopts *next;
+ struct opts *opt;
+ char *str;
+ int len;
+};
+
+// State during argument parsing.
+struct getoptflagstate
+{
+ int argc, minargs, maxargs;
+ char *arg;
+ struct opts *opts;
+ struct longopts *longopts;
+ int noerror, nodash_now, stopearly;
+ unsigned excludes, requires;
+};
+
+// Use getoptflagstate to parse parse one command line option from argv
+static int gotflag(struct getoptflagstate *gof, struct opts *opt)
+{
+ int type;
+
+ // Did we recognize this option?
+ if (!opt) {
+ if (gof->noerror) return 1;
+ help_exit("Unknown option %s", gof->arg);
+ }
+
+ // Might enabling this switch off something else?
+ if (toys.optflags & opt->dex[0]) {
+ struct opts *clr;
+ unsigned long long i = 1;
+
+ // Forget saved argument for flag we switch back off
+ for (clr=gof->opts, i=1; clr; clr = clr->next, i<<=1)
+ if (clr->arg && (i & toys.optflags & opt->dex[0])) *clr->arg = 0;
+ toys.optflags &= ~opt->dex[0];
+ }
+
+ // Set flags
+ toys.optflags |= opt->dex[1];
+ gof->excludes |= opt->dex[2];
+ if (opt->flags&2) gof->stopearly=2;
+
+ if (toys.optflags & gof->excludes) {
+ struct opts *bad;
+ unsigned i = 1;
+
+ for (bad=gof->opts, i=1; bad ;bad = bad->next, i<<=1) {
+ if (opt == bad || !(i & toys.optflags)) continue;
+ if (toys.optflags & bad->dex[2]) break;
+ }
+ if (bad) help_exit("No '%c' with '%c'", opt->c, bad->c);
+ }
+
+ // Does this option take an argument?
+ if (!gof->arg) {
+ if (opt->flags & 8) return 0;
+ gof->arg = "";
+ } else gof->arg++;
+ type = opt->type;
+
+ if (type == '@') ++*(opt->arg);
+ else if (type) {
+ char *arg = gof->arg;
+
+ // Handle "-xblah" and "-x blah", but also a third case: "abxc blah"
+ // to make "tar xCjfv blah1 blah2 thingy" work like
+ // "tar -x -C blah1 -j -f blah2 -v thingy"
+
+ if (gof->nodash_now || (!arg[0] && !(opt->flags & 8)))
+ arg = toys.argv[++gof->argc];
+ if (!arg) {
+ char *s = "Missing argument to ";
+ struct longopts *lo;
+
+ if (opt->c != -1) help_exit("%s-%c", s, opt->c);
+
+ for (lo = gof->longopts; lo->opt != opt; lo = lo->next);
+ help_exit("%s--%.*s", s, lo->len, lo->str);
+ }
+
+ if (type == ':') *(opt->arg) = (long)arg;
+ else if (type == '*') {
+ struct arg_list **list;
+
+ list = (struct arg_list **)opt->arg;
+ while (*list) list=&((*list)->next);
+ *list = xzalloc(sizeof(struct arg_list));
+ (*list)->arg = arg;
+ } else if (type == '#' || type == '-') {
+ long l = atolx(arg);
+ if (type == '-' && !ispunct(*arg)) l*=-1;
+ if (l < opt->val[0].l) help_exit("-%c < %ld", opt->c, opt->val[0].l);
+ if (l > opt->val[1].l) help_exit("-%c > %ld", opt->c, opt->val[1].l);
+
+ *(opt->arg) = l;
+ } else if (CFG_TOYBOX_FLOAT && type == '.') {
+ FLOAT *f = (FLOAT *)(opt->arg);
+
+ *f = strtod(arg, &arg);
+ if (opt->val[0].l != LONG_MIN && *f < opt->val[0].f)
+ help_exit("-%c < %lf", opt->c, (double)opt->val[0].f);
+ if (opt->val[1].l != LONG_MAX && *f > opt->val[1].f)
+ help_exit("-%c > %lf", opt->c, (double)opt->val[1].f);
+ } else if (type=='%') *(opt->arg) = xparsemillitime(arg);
+
+ if (!gof->nodash_now) gof->arg = "";
+ }
+
+ return 0;
+}
+
+// Parse this command's options string into struct getoptflagstate, which
+// includes a struct opts linked list in reverse order (I.E. right-to-left)
+void parse_optflaglist(struct getoptflagstate *gof)
+{
+ char *options = toys.which->options;
+ long *nextarg = (long *)&this;
+ struct opts *new = 0;
+ int idx;
+
+ // Parse option format string
+ memset(gof, 0, sizeof(struct getoptflagstate));
+ gof->maxargs = INT_MAX;
+ if (!options) return;
+
+ // Parse leading special behavior indicators
+ for (;;) {
+ if (*options == '^') gof->stopearly++;
+ else if (*options == '<') gof->minargs=*(++options)-'0';
+ else if (*options == '>') gof->maxargs=*(++options)-'0';
+ else if (*options == '?') gof->noerror++;
+ else if (*options == '&') toys.optflags |= FLAGS_NODASH;
+ else break;
+ options++;
+ }
+
+ // Parse option string into a linked list of options with attributes.
+
+ if (!*options) gof->stopearly++;
+ while (*options) {
+ char *temp;
+
+ // Option groups come after all options are defined
+ if (*options == '[') break;
+
+ // Allocate a new list entry when necessary
+ if (!new) {
+ new = xzalloc(sizeof(struct opts));
+ new->next = gof->opts;
+ gof->opts = new;
+ new->val[0].l = LONG_MIN;
+ new->val[1].l = LONG_MAX;
+ }
+ // Each option must start with "(" or an option character. (Bare
+ // longopts only come at the start of the string.)
+ if (*options == '(' && new->c != -1) {
+ char *end;
+ struct longopts *lo;
+
+ // Find the end of the longopt
+ for (end = ++options; *end && *end != ')'; end++);
+ if (CFG_TOYBOX_DEBUG && !*end) error_exit("(longopt) didn't end");
+
+ // init a new struct longopts
+ lo = xmalloc(sizeof(struct longopts));
+ lo->next = gof->longopts;
+ lo->opt = new;
+ lo->str = options;
+ lo->len = end-options;
+ gof->longopts = lo;
+ options = ++end;
+
+ // Mark this struct opt as used, even when no short opt.
+ if (!new->c) new->c = -1;
+
+ continue;
+
+ // If this is the start of a new option that wasn't a longopt,
+
+ } else if (strchr(":*#@.-%", *options)) {
+ if (CFG_TOYBOX_DEBUG && new->type)
+ error_exit("multiple types %c:%c%c", new->c, new->type, *options);
+ new->type = *options;
+ } else if (-1 != (idx = stridx("|^ ;", *options))) new->flags |= 1<<idx;
+ // bounds checking
+ else if (-1 != (idx = stridx("<>=", *options))) {
+ if (new->type == '#' || new->type == '%') {
+ long l = strtol(++options, &temp, 10);
+ if (temp != options) new->val[idx].l = l;
+ } else if (CFG_TOYBOX_FLOAT && new->type == '.') {
+ FLOAT f = strtod(++options, &temp);
+ if (temp != options) new->val[idx].f = f;
+ } else error_exit("<>= only after .#%%");
+ options = --temp;
+
+ // At this point, we've hit the end of the previous option. The
+ // current character is the start of a new option. If we've already
+ // assigned an option to this struct, loop to allocate a new one.
+ // (It'll get back here afterwards and fall through to next else.)
+ } else if (new->c) {
+ new = 0;
+ continue;
+
+ // Claim this option, loop to see what's after it.
+ } else new->c = *options;
+
+ options++;
+ }
+
+ // Initialize enable/disable/exclude masks and pointers to store arguments.
+ // (This goes right to left so we need the whole list before we can start.)
+ idx = 0;
+ for (new = gof->opts; new; new = new->next) {
+ unsigned long long u = 1L<<idx++;
+
+ if (new->c == 1) new->c = 0;
+ new->dex[1] = u;
+ if (new->flags & 1) gof->requires |= u;
+ if (new->type) {
+ new->arg = (void *)nextarg;
+ *(nextarg++) = new->val[2].l;
+ }
+ }
+
+ // Parse trailing group indicators
+ while (*options) {
+ unsigned bits = 0;
+
+ if (CFG_TOYBOX_DEBUG && *options != '[') error_exit("trailing %s", options);
+
+ idx = stridx("-+!", *++options);
+ if (CFG_TOYBOX_DEBUG && idx == -1) error_exit("[ needs +-!");
+ if (CFG_TOYBOX_DEBUG && (options[1] == ']' || !options[1]))
+ error_exit("empty []");
+
+ // Don't advance past ] but do process it once in loop.
+ while (*options++ != ']') {
+ struct opts *opt;
+ int i;
+
+ if (CFG_TOYBOX_DEBUG && !*options) error_exit("[ without ]");
+ // Find this option flag (in previously parsed struct opt)
+ for (i=0, opt = gof->opts; ; i++, opt = opt->next) {
+ if (*options == ']') {
+ if (!opt) break;
+ if (bits&(1<<i)) opt->dex[idx] |= bits&~(1<<i);
+ } else {
+ if (*options==1) break;
+ if (CFG_TOYBOX_DEBUG && !opt)
+ error_exit("[] unknown target %c", *options);
+ if (opt->c == *options) {
+ bits |= 1<<i;
+ break;
+ }
+ }
+ }
+ }
+ }
+}
+
+// Fill out toys.optflags, toys.optargs, and this[] from toys.argv
+
+void get_optflags(void)
+{
+ struct getoptflagstate gof;
+ struct opts *catch;
+ unsigned long long saveflags;
+ char *letters[]={"s",""};
+
+ // Option parsing is a two stage process: parse the option string into
+ // a struct opts list, then use that list to process argv[];
+
+ // Allocate memory for optargs
+ saveflags = 0;
+ while (toys.argv[saveflags++]);
+ toys.optargs = xzalloc(sizeof(char *)*saveflags);
+
+ parse_optflaglist(&gof);
+
+ // Iterate through command line arguments, skipping argv[0]
+ for (gof.argc=1; toys.argv[gof.argc]; gof.argc++) {
+ gof.arg = toys.argv[gof.argc];
+ catch = NULL;
+
+ // Parse this argument
+ if (gof.stopearly>1) goto notflag;
+
+ gof.nodash_now = 0;
+
+ // Various things with dashes
+ if (*gof.arg == '-') {
+
+ // Handle -
+ if (!gof.arg[1]) goto notflag;
+ gof.arg++;
+ if (*gof.arg=='-') {
+ struct longopts *lo;
+
+ gof.arg++;
+ // Handle --
+ if (!*gof.arg) {
+ gof.stopearly += 2;
+ continue;
+ }
+
+ // do we match a known --longopt?
+ for (lo = gof.longopts; lo; lo = lo->next) {
+ if (!strncmp(gof.arg, lo->str, lo->len)) {
+ if (!gof.arg[lo->len]) gof.arg = 0;
+ else if (gof.arg[lo->len] == '=' && lo->opt->type)
+ gof.arg += lo->len;
+ else continue;
+ // It's a match.
+ catch = lo->opt;
+ break;
+ }
+ }
+
+ // Should we handle this --longopt as a non-option argument?
+ if (!lo && gof.noerror) {
+ gof.arg -= 2;
+ goto notflag;
+ }
+
+ // Long option parsed, handle option.
+ gotflag(&gof, catch);
+ continue;
+ }
+
+ // Handle things that don't start with a dash.
+ } else {
+ if ((toys.optflags & FLAGS_NODASH) && gof.argc == 1) gof.nodash_now = 1;
+ else goto notflag;
+ }
+
+ // At this point, we have the args part of -args. Loop through
+ // each entry (could be -abc meaning -a -b -c)
+ saveflags = toys.optflags;
+ while (*gof.arg) {
+
+ // Identify next option char.
+ for (catch = gof.opts; catch; catch = catch->next)
+ if (*gof.arg == catch->c)
+ if (!((catch->flags&4) && gof.arg[1])) break;
+
+ // Handle option char (advancing past what was used)
+ if (gotflag(&gof, catch) ) {
+ toys.optflags = saveflags;
+ gof.arg = toys.argv[gof.argc];
+ goto notflag;
+ }
+ }
+ continue;
+
+ // Not a flag, save value in toys.optargs[]
+notflag:
+ if (gof.stopearly) gof.stopearly++;
+ toys.optargs[toys.optc++] = toys.argv[gof.argc];
+ }
+
+ // Sanity check
+ if (toys.optc<gof.minargs)
+ help_exit("Need%s %d argument%s", letters[!!(gof.minargs-1)],
+ gof.minargs, letters[!(gof.minargs-1)]);
+ if (toys.optc>gof.maxargs)
+ help_exit("Max %d argument%s", gof.maxargs, letters[!(gof.maxargs-1)]);
+ if (gof.requires && !(gof.requires & toys.optflags)) {
+ struct opts *req;
+ char needs[32], *s = needs;
+
+ for (req = gof.opts; req; req = req->next)
+ if (req->flags & 1) *(s++) = req->c;
+ *s = 0;
+
+ help_exit("Needs %s-%s", s[1] ? "one of " : "", needs);
+ }
+
+ if (CFG_TOYBOX_FREE) {
+ llist_traverse(gof.opts, free);
+ llist_traverse(gof.longopts, free);
+ }
+}
diff --git a/login/lib/deflate.c b/login/lib/deflate.c
@@ -0,0 +1,485 @@
+/* deflate.c - deflate/inflate code for gzip and friends
+ *
+ * Copyright 2014 Rob Landley <rob@landley.net>
+ *
+ * See RFCs 1950 (zlib), 1951 (deflate), and 1952 (gzip)
+ * LSB 4.1 has gzip, gunzip, and zcat
+ *
+ * TODO: zip -d DIR -x LIST -list -quiet -no overwrite -overwrite -p to stdout
+ */
+
+#include "toys.h"
+
+struct deflate {
+ // Huffman codes: base offset and extra bits tables (length and distance)
+ char lenbits[29], distbits[30];
+ unsigned short lenbase[29], distbase[30];
+ void *fixdisthuff, *fixlithuff;
+
+ // CRC
+ void (*crcfunc)(struct deflate *dd, char *data, int len);
+ unsigned crctable[256], crc;
+
+
+ // Tables only used for deflation
+ unsigned short *hashhead, *hashchain;
+
+ // Compressed data buffer (extra space malloced at end)
+ unsigned pos, len;
+ int infd, outfd;
+ char data[];
+};
+
+// little endian bit buffer
+struct bitbuf {
+ int fd, bitpos, len, max;
+ char buf[];
+};
+
+// malloc a struct bitbuf
+struct bitbuf *bitbuf_init(int fd, int size)
+{
+ struct bitbuf *bb = xzalloc(sizeof(struct bitbuf)+size);
+
+ bb->max = size;
+ bb->fd = fd;
+
+ return bb;
+}
+
+// Advance bitpos without the overhead of recording bits
+// Loads more data when input buffer empty
+void bitbuf_skip(struct bitbuf *bb, int bits)
+{
+ int pos = bb->bitpos + bits, len = bb->len << 3;
+
+ while (pos >= len) {
+ pos -= len;
+ len = (bb->len = read(bb->fd, bb->buf, bb->max)) << 3;
+ if (bb->len < 1) perror_exit("inflate EOF");
+ }
+ bb->bitpos = pos;
+}
+
+// Optimized single bit inlined version
+static inline int bitbuf_bit(struct bitbuf *bb)
+{
+ int bufpos = bb->bitpos>>3;
+
+ if (bufpos == bb->len) {
+ bitbuf_skip(bb, 0);
+ bufpos = 0;
+ }
+
+ return (bb->buf[bufpos]>>(bb->bitpos++&7))&1;
+}
+
+// Fetch the next X bits from the bitbuf, little endian
+unsigned bitbuf_get(struct bitbuf *bb, int bits)
+{
+ int result = 0, offset = 0;
+
+ while (bits) {
+ int click = bb->bitpos >> 3, blow, blen;
+
+ // Load more data if buffer empty
+ if (click == bb->len) bitbuf_skip(bb, click = 0);
+
+ // grab bits from next byte
+ blow = bb->bitpos & 7;
+ blen = 8-blow;
+ if (blen > bits) blen = bits;
+ result |= ((bb->buf[click] >> blow) & ((1<<blen)-1)) << offset;
+ offset += blen;
+ bits -= blen;
+ bb->bitpos += blen;
+ }
+
+ return result;
+}
+
+void bitbuf_flush(struct bitbuf *bb)
+{
+ if (!bb->bitpos) return;
+
+ xwrite(bb->fd, bb->buf, (bb->bitpos+7)>>3);
+ memset(bb->buf, 0, bb->max);
+ bb->bitpos = 0;
+}
+
+void bitbuf_put(struct bitbuf *bb, int data, int len)
+{
+ while (len) {
+ int click = bb->bitpos >> 3, blow, blen;
+
+ // Flush buffer if necessary
+ if (click == bb->max) {
+ bitbuf_flush(bb);
+ click = 0;
+ }
+ blow = bb->bitpos & 7;
+ blen = 8-blow;
+ if (blen > len) blen = len;
+ bb->buf[click] |= data << blow;
+ bb->bitpos += blen;
+ data >>= blen;
+ len -= blen;
+ }
+}
+
+static void output_byte(struct deflate *dd, char sym)
+{
+ int pos = dd->pos++ & 32767;
+
+ dd->data[pos] = sym;
+
+ if (pos == 32767) {
+ xwrite(dd->outfd, dd->data, 32768);
+ if (dd->crcfunc) dd->crcfunc(dd, dd->data, 32768);
+ }
+}
+
+// Huffman coding uses bits to traverse a binary tree to a leaf node,
+// By placing frequently occurring symbols at shorter paths, frequently
+// used symbols may be represented in fewer bits than uncommon symbols.
+// (length[0] isn't used but code's clearer if it's there.)
+
+struct huff {
+ unsigned short length[16]; // How many symbols have this bit length?
+ unsigned short symbol[288]; // sorted by bit length, then ascending order
+};
+
+// Create simple huffman tree from array of bit lengths.
+
+// The symbols in the huffman trees are sorted (first by bit length
+// of the code to reach them, then by symbol number). This means that given
+// the bit length of each symbol, we can construct a unique tree.
+static void len2huff(struct huff *huff, char bitlen[], int len)
+{
+ int offset[16];
+ int i;
+
+ // Count number of codes at each bit length
+ memset(huff, 0, sizeof(struct huff));
+ for (i = 0; i<len; i++) huff->length[bitlen[i]]++;
+
+ // Sort symbols by bit length, then symbol. Get list of starting positions
+ // for each group, then write each symbol to next position within its group.
+ *huff->length = *offset = 0;
+ for (i = 1; i<16; i++) offset[i] = offset[i-1] + huff->length[i-1];
+ for (i = 0; i<len; i++) if (bitlen[i]) huff->symbol[offset[bitlen[i]]++] = i;
+}
+
+// Fetch and decode next huffman coded symbol from bitbuf.
+// This takes advantage of the sorting to navigate the tree as an array:
+// each time we fetch a bit we have all the codes at that bit level in
+// order with no gaps.
+static unsigned huff_and_puff(struct bitbuf *bb, struct huff *huff)
+{
+ unsigned short *length = huff->length;
+ int start = 0, offset = 0;
+
+ // Traverse through the bit lengths until our code is in this range
+ for (;;) {
+ offset = (offset << 1) | bitbuf_bit(bb);
+ start += *++length;
+ if ((offset -= *length) < 0) break;
+ if ((length - huff->length) & 16) error_exit("bad symbol");
+ }
+
+ return huff->symbol[start + offset];
+}
+
+// Decompress deflated data from bitbuf to dd->outfd.
+static void inflate(struct deflate *dd, struct bitbuf *bb)
+{
+ dd->crc = ~0;
+ // repeat until spanked
+ for (;;) {
+ int final, type;
+
+ final = bitbuf_get(bb, 1);
+ type = bitbuf_get(bb, 2);
+
+ if (type == 3) error_exit("bad type");
+
+ // Uncompressed block?
+ if (!type) {
+ int len, nlen;
+
+ // Align to byte, read length
+ bitbuf_skip(bb, (8-bb->bitpos)&7);
+ len = bitbuf_get(bb, 16);
+ nlen = bitbuf_get(bb, 16);
+ if (len != (0xffff & ~nlen)) error_exit("bad len");
+
+ // Dump literal output data
+ while (len) {
+ int pos = bb->bitpos >> 3, bblen = bb->len - pos;
+ char *p = bb->buf+pos;
+
+ // dump bytes until done or end of current bitbuf contents
+ if (bblen > len) bblen = len;
+ pos = bblen;
+ while (pos--) output_byte(dd, *(p++));
+ bitbuf_skip(bb, bblen << 3);
+ len -= bblen;
+ }
+
+ // Compressed block
+ } else {
+ struct huff *disthuff, *lithuff;
+
+ // Dynamic huffman codes?
+ if (type == 2) {
+ struct huff *h2 = ((struct huff *)toybuf)+1;
+ int i, litlen, distlen, hufflen;
+ char *hufflen_order = "\x10\x11\x12\0\x08\x07\x09\x06\x0a\x05\x0b"
+ "\x04\x0c\x03\x0d\x02\x0e\x01\x0f", *bits;
+
+ // The huffman trees are stored as a series of bit lengths
+ litlen = bitbuf_get(bb, 5)+257; // max 288
+ distlen = bitbuf_get(bb, 5)+1; // max 32
+ hufflen = bitbuf_get(bb, 4)+4; // max 19
+
+ // The literal and distance codes are themselves compressed, in
+ // a complicated way: an array of bit lengths (hufflen many
+ // entries, each 3 bits) is used to fill out an array of 19 entries
+ // in a magic order, leaving the rest 0. Then make a tree out of it:
+ memset(bits = toybuf+1, 0, 19);
+ for (i=0; i<hufflen; i++) bits[hufflen_order[i]] = bitbuf_get(bb, 3);
+ len2huff(h2, bits, 19);
+
+ // Use that tree to read in the literal and distance bit lengths
+ for (i = 0; i < litlen + distlen;) {
+ int sym = huff_and_puff(bb, h2);
+
+ // 0-15 are literals, 16 = repeat previous code 3-6 times,
+ // 17 = 3-10 zeroes (3 bit), 18 = 11-138 zeroes (7 bit)
+ if (sym < 16) bits[i++] = sym;
+ else {
+ int len = sym & 2;
+
+ len = bitbuf_get(bb, sym-14+len+(len>>1)) + 3 + (len<<2);
+ memset(bits+i, bits[i-1] * !(sym&3), len);
+ i += len;
+ }
+ }
+ if (i > litlen+distlen) error_exit("bad tree");
+
+ len2huff(lithuff = h2, bits, litlen);
+ len2huff(disthuff = ((struct huff *)toybuf)+2, bits+litlen, distlen);
+
+ // Static huffman codes
+ } else {
+ lithuff = dd->fixlithuff;
+ disthuff = dd->fixdisthuff;
+ }
+
+ // Use huffman tables to decode block of compressed symbols
+ for (;;) {
+ int sym = huff_and_puff(bb, lithuff);
+
+ // Literal?
+ if (sym < 256) output_byte(dd, sym);
+
+ // Copy range?
+ else if (sym > 256) {
+ int len, dist;
+
+ sym -= 257;
+ len = dd->lenbase[sym] + bitbuf_get(bb, dd->lenbits[sym]);
+ sym = huff_and_puff(bb, disthuff);
+ dist = dd->distbase[sym] + bitbuf_get(bb, dd->distbits[sym]);
+ sym = dd->pos & 32767;
+
+ while (len--) output_byte(dd, dd->data[(dd->pos-dist) & 32767]);
+
+ // End of block
+ } else break;
+ }
+ }
+
+ // Was that the last block?
+ if (final) break;
+ }
+
+ if (dd->pos & 32767) {
+ xwrite(dd->outfd, dd->data, dd->pos&32767);
+ if (dd->crcfunc) dd->crcfunc(dd, dd->data, dd->pos&32767);
+ }
+}
+
+// Deflate from dd->infd to bitbuf
+// For deflate, dd->len = input read, dd->pos = input consumed
+static void deflate(struct deflate *dd, struct bitbuf *bb)
+{
+ char *data = dd->data;
+ int len, final = 0;
+
+ dd->crc = ~0;
+
+ while (!final) {
+ // Read next half-window of data if we haven't hit EOF yet.
+ len = readall(dd->infd, data+(dd->len&32768), 32768);
+ if (len < 0) perror_exit("read"); // todo: add filename
+ if (len != 32768) final++;
+ if (dd->crcfunc) dd->crcfunc(dd, data+(dd->len&32768), len);
+ // dd->len += len; crcfunc advances len TODO
+
+ // store block as literal
+ bitbuf_put(bb, final, 1);
+ bitbuf_put(bb, 0, 1);
+
+ bitbuf_put(bb, 0, (8-bb->bitpos)&7);
+ bitbuf_put(bb, len, 16);
+ bitbuf_put(bb, 0xffff & ~len, 16);
+
+ // repeat until spanked
+ while (dd->pos != dd->len) {
+ unsigned pos = dd->pos&65535;
+
+ bitbuf_put(bb, data[pos], 8);
+
+ // need to refill buffer?
+ if (!(32767 & ++dd->pos) && !final) break;
+ }
+ }
+ bitbuf_flush(bb);
+}
+
+// Allocate memory for deflate/inflate.
+static struct deflate *init_deflate(int compress)
+{
+ int i, n = 1;
+ struct deflate *dd = xmalloc(sizeof(struct deflate)+32768*(compress ? 4 : 1));
+
+// TODO sizeof and order of these?
+ // decompress needs 32k history, compress adds 64k hashhead and 32k hashchain
+ if (compress) {
+ dd->hashhead = (unsigned short *)(dd->data+65536);
+ dd->hashchain = (unsigned short *)(dd->data+65536+32768);
+ }
+
+ // Calculate lenbits, lenbase, distbits, distbase
+ *dd->lenbase = 3;
+ for (i = 0; i<sizeof(dd->lenbits)-1; i++) {
+ if (i>4) {
+ if (!(i&3)) {
+ dd->lenbits[i]++;
+ n <<= 1;
+ }
+ if (i == 27) n--;
+ else dd->lenbits[i+1] = dd->lenbits[i];
+ }
+ dd->lenbase[i+1] = n + dd->lenbase[i];
+ }
+ n = 0;
+ for (i = 0; i<sizeof(dd->distbits); i++) {
+ dd->distbase[i] = 1<<n;
+ if (i) dd->distbase[i] += dd->distbase[i-1];
+ if (i>3 && !(i&1)) n++;
+ dd->distbits[i] = n;
+ }
+
+// TODO layout and lifetime of this?
+ // Init fixed huffman tables
+ for (i=0; i<288; i++) toybuf[i] = 8 + (i>143) - ((i>255)<<1) + (i>279);
+ len2huff(dd->fixlithuff = ((struct huff *)toybuf)+3, toybuf, 288);
+ memset(toybuf, 5, 30);
+ len2huff(dd->fixdisthuff = ((struct huff *)toybuf)+4, toybuf, 30);
+
+ return dd;
+}
+
+// Return true/false whether we consumed a gzip header.
+static int is_gzip(struct bitbuf *bb)
+{
+ int flags;
+
+ // Confirm signature
+ if (bitbuf_get(bb, 24) != 0x088b1f || (flags = bitbuf_get(bb, 8)) > 31)
+ return 0;
+ bitbuf_skip(bb, 6*8);
+
+ // Skip extra, name, comment, header CRC fields
+ if (flags & 4) bitbuf_skip(bb, 16);
+ if (flags & 8) while (bitbuf_get(bb, 8));
+ if (flags & 16) while (bitbuf_get(bb, 8));
+ if (flags & 2) bitbuf_skip(bb, 16);
+
+ return 1;
+}
+
+void gzip_crc(struct deflate *dd, char *data, int len)
+{
+ int i;
+ unsigned crc, *crc_table = dd->crctable;
+
+ crc = dd->crc;
+ for (i=0; i<len; i++) crc = crc_table[(crc^data[i])&0xff] ^ (crc>>8);
+ dd->crc = crc;
+ dd->len += len;
+}
+
+long long gzip_fd(int infd, int outfd)
+{
+ struct bitbuf *bb = bitbuf_init(outfd, 4096);
+ struct deflate *dd = init_deflate(1);
+ long long rc;
+
+ // Header from RFC 1952 section 2.2:
+ // 2 ID bytes (1F, 8b), gzip method byte (8=deflate), FLAG byte (none),
+ // 4 byte MTIME (zeroed), Extra Flags (2=maximum compression),
+ // Operating System (FF=unknown)
+
+ dd->infd = infd;
+ xwrite(bb->fd, "\x1f\x8b\x08\0\0\0\0\0\x02\xff", 10);
+
+ // Little endian crc table
+ crc_init(dd->crctable, 1);
+ dd->crcfunc = gzip_crc;
+
+ deflate(dd, bb);
+
+ // tail: crc32, len32
+
+ bitbuf_put(bb, 0, (8-bb->bitpos)&7);
+ bitbuf_put(bb, ~dd->crc, 32);
+ bitbuf_put(bb, dd->len, 32);
+ rc = dd->len;
+
+ bitbuf_flush(bb);
+ free(bb);
+ free(dd);
+
+ return rc;
+}
+
+long long gunzip_fd(int infd, int outfd)
+{
+ struct bitbuf *bb = bitbuf_init(infd, 4096);
+ struct deflate *dd = init_deflate(0);
+ long long rc;
+
+ if (!is_gzip(bb)) error_exit("not gzip");
+ dd->outfd = outfd;
+
+ // Little endian crc table
+ crc_init(dd->crctable, 1);
+ dd->crcfunc = gzip_crc;
+
+ inflate(dd, bb);
+
+ // tail: crc32, len32
+
+ bitbuf_skip(bb, (8-bb->bitpos)&7);
+ if (~dd->crc != bitbuf_get(bb, 32) || dd->len != bitbuf_get(bb, 32))
+ error_exit("bad crc");
+
+ rc = dd->len;
+ free(bb);
+ free(dd);
+
+ return rc;
+}
diff --git a/login/lib/help.c b/login/lib/help.c
@@ -0,0 +1,35 @@
+// Function to display help text
+
+#include "toys.h"
+
+#include "help.h"
+
+#undef NEWTOY
+#undef OLDTOY
+#define NEWTOY(name,opt,flags) HELP_##name "\0"
+#if CFG_TOYBOX
+#define OLDTOY(name,oldname,flags) "\xff" #oldname "\0"
+#else
+#define OLDTOY(name, oldname, flags) HELP_##oldname "\0"
+#endif
+static char *help_data =
+#include "newtoys.h"
+;
+
+void show_help(FILE *out)
+{
+ int i = toys.which-toy_list;
+ char *s;
+
+ if (CFG_TOYBOX_HELP) {
+ for (;;) {
+ s = help_data;
+ while (i--) s += strlen(s) + 1;
+ // If it's an alias, restart search for real name
+ if (*s != 255) break;
+ i = toy_find(++s)-toy_list;
+ }
+
+ fprintf(out, "%s", s);
+ }
+}
diff --git a/login/lib/lib.c b/login/lib/lib.c
@@ -0,0 +1,1414 @@
+/* lib.c - various reusable stuff.
+ *
+ * Copyright 2006 Rob Landley <rob@landley.net>
+ */
+
+#define SYSLOG_NAMES
+#include "toys.h"
+
+void verror_msg(char *msg, int err, va_list va)
+{
+ char *s = ": %s";
+
+ fprintf(stderr, "%s: ", toys.which->name);
+ if (msg) vfprintf(stderr, msg, va);
+ else s+=2;
+ if (err>0) fprintf(stderr, s, strerror(err));
+ if (err<0 && CFG_TOYBOX_HELP)
+ fprintf(stderr, " (see \"%s --help\")", toys.which->name);
+ if (msg || err) putc('\n', stderr);
+ if (!toys.exitval) toys.exitval++;
+}
+
+// These functions don't collapse together because of the va_stuff.
+
+void error_msg(char *msg, ...)
+{
+ va_list va;
+
+ va_start(va, msg);
+ verror_msg(msg, 0, va);
+ va_end(va);
+}
+
+void perror_msg(char *msg, ...)
+{
+ va_list va;
+
+ va_start(va, msg);
+ verror_msg(msg, errno, va);
+ va_end(va);
+}
+
+// Die with an error message.
+void error_exit(char *msg, ...)
+{
+ va_list va;
+
+ va_start(va, msg);
+ verror_msg(msg, 0, va);
+ va_end(va);
+
+ xexit();
+}
+
+// Die with an error message and strerror(errno)
+void perror_exit(char *msg, ...)
+{
+ va_list va;
+
+ va_start(va, msg);
+ verror_msg(msg, errno, va);
+ va_end(va);
+
+ xexit();
+}
+
+// Exit with an error message after showing help text.
+void help_exit(char *msg, ...)
+{
+ va_list va;
+
+ if (!msg) show_help(stdout);
+ else {
+ va_start(va, msg);
+ verror_msg(msg, -1, va);
+ va_end(va);
+ }
+
+ xexit();
+}
+
+// If you want to explicitly disable the printf() behavior (because you're
+// printing user-supplied data, or because android's static checker produces
+// false positives for 'char *s = x ? "blah1" : "blah2"; printf(s);' and it's
+// -Werror there for policy reasons).
+void error_msg_raw(char *msg)
+{
+ error_msg("%s", msg);
+}
+
+void perror_msg_raw(char *msg)
+{
+ perror_msg("%s", msg);
+}
+
+void error_exit_raw(char *msg)
+{
+ error_exit("%s", msg);
+}
+
+void perror_exit_raw(char *msg)
+{
+ perror_exit("%s", msg);
+}
+
+// Keep reading until full or EOF
+ssize_t readall(int fd, void *buf, size_t len)
+{
+ size_t count = 0;
+
+ while (count<len) {
+ int i = read(fd, (char *)buf+count, len-count);
+ if (!i) break;
+ if (i<0) return i;
+ count += i;
+ }
+
+ return count;
+}
+
+// Keep writing until done or EOF
+ssize_t writeall(int fd, void *buf, size_t len)
+{
+ size_t count = 0;
+ while (count<len) {
+ int i = write(fd, count+(char *)buf, len-count);
+ if (i<1) return i;
+ count += i;
+ }
+
+ return count;
+}
+
+// skip this many bytes of input. Return 0 for success, >0 means this much
+// left after input skipped.
+off_t lskip(int fd, off_t offset)
+{
+ off_t cur = lseek(fd, 0, SEEK_CUR);
+
+ if (cur != -1) {
+ off_t end = lseek(fd, 0, SEEK_END) - cur;
+
+ if (end > 0 && end < offset) return offset - end;
+ end = offset+cur;
+ if (end == lseek(fd, end, SEEK_SET)) return 0;
+ perror_exit("lseek");
+ }
+
+ while (offset>0) {
+ int try = offset>sizeof(libbuf) ? sizeof(libbuf) : offset, or;
+
+ or = readall(fd, libbuf, try);
+ if (or < 0) perror_exit("lskip to %lld", (long long)offset);
+ else offset -= or;
+ if (or < try) break;
+ }
+
+ return offset;
+}
+
+// flags: 1=make last dir (with mode lastmode, otherwise skips last component)
+// 2=make path (already exists is ok)
+// 4=verbose
+// returns 0 = path ok, 1 = error
+int mkpathat(int atfd, char *dir, mode_t lastmode, int flags)
+{
+ struct stat buf;
+ char *s;
+
+ // mkdir -p one/two/three is not an error if the path already exists,
+ // but is if "three" is a file. The others we dereference and catch
+ // not-a-directory along the way, but the last one we must explicitly
+ // test for. Might as well do it up front.
+
+ if (!fstatat(atfd, dir, &buf, 0) && !S_ISDIR(buf.st_mode)) {
+ errno = EEXIST;
+ return 1;
+ }
+
+ for (s = dir; ;s++) {
+ char save = 0;
+ mode_t mode = (0777&~toys.old_umask)|0300;
+
+ // find next '/', but don't try to mkdir "" at start of absolute path
+ if (*s == '/' && (flags&2) && s != dir) {
+ save = *s;
+ *s = 0;
+ } else if (*s) continue;
+
+ // Use the mode from the -m option only for the last directory.
+ if (!save) {
+ if (flags&1) mode = lastmode;
+ else break;
+ }
+
+ if (mkdirat(atfd, dir, mode)) {
+ if (!(flags&2) || errno != EEXIST) return 1;
+ } else if (flags&4)
+ fprintf(stderr, "%s: created directory '%s'\n", toys.which->name, dir);
+
+ if (!(*s = save)) break;
+ }
+
+ return 0;
+}
+
+// The common case
+int mkpath(char *dir)
+{
+ return mkpathat(AT_FDCWD, dir, 0, MKPATHAT_MAKE);
+}
+
+// Split a path into linked list of components, tracking head and tail of list.
+// Filters out // entries with no contents.
+struct string_list **splitpath(char *path, struct string_list **list)
+{
+ char *new = path;
+
+ *list = 0;
+ do {
+ int len;
+
+ if (*path && *path != '/') continue;
+ len = path-new;
+ if (len > 0) {
+ *list = xmalloc(sizeof(struct string_list) + len + 1);
+ (*list)->next = 0;
+ memcpy((*list)->str, new, len);
+ (*list)->str[len] = 0;
+ list = &(*list)->next;
+ }
+ new = path+1;
+ } while (*path++);
+
+ return list;
+}
+
+// Find all file in a colon-separated path with access type "type" (generally
+// X_OK or R_OK). Returns a list of absolute paths to each file found, in
+// order.
+
+struct string_list *find_in_path(char *path, char *filename)
+{
+ struct string_list *rlist = NULL, **prlist=&rlist;
+ char *cwd;
+
+ if (!path) return 0;
+
+ cwd = xgetcwd();
+ for (;;) {
+ char *next = strchr(path, ':');
+ int len = next ? next-path : strlen(path);
+ struct string_list *rnext;
+ struct stat st;
+
+ rnext = xmalloc(sizeof(void *) + strlen(filename)
+ + (len ? len : strlen(cwd)) + 2);
+ if (!len) sprintf(rnext->str, "%s/%s", cwd, filename);
+ else {
+ char *res = rnext->str;
+
+ memcpy(res, path, len);
+ res += len;
+ *(res++) = '/';
+ strcpy(res, filename);
+ }
+
+ // Confirm it's not a directory.
+ if (!stat(rnext->str, &st) && S_ISREG(st.st_mode)) {
+ *prlist = rnext;
+ rnext->next = NULL;
+ prlist = &(rnext->next);
+ } else free(rnext);
+
+ if (!next) break;
+ path += len;
+ path++;
+ }
+ free(cwd);
+
+ return rlist;
+}
+
+long long estrtol(char *str, char **end, int base)
+{
+ errno = 0;
+
+ return strtoll(str, end, base);
+}
+
+long long xstrtol(char *str, char **end, int base)
+{
+ long long l = estrtol(str, end, base);
+
+ if (errno) perror_exit_raw(str);
+
+ return l;
+}
+
+// atol() with the kilo/mega/giga/tera/peta/exa extensions, plus word and block.
+// (zetta and yotta don't fit in 64 bits.)
+long long atolx(char *numstr)
+{
+ char *c = numstr, *suffixes="cwbkmgtpe", *end;
+ long long val;
+
+ val = xstrtol(numstr, &c, 0);
+ if (c != numstr && *c && (end = strchr(suffixes, tolower(*c)))) {
+ int shift = end-suffixes-2;
+ ++c;
+ if (shift==-1) val *= 2;
+ else if (!shift) val *= 512;
+ else if (shift>0) {
+ if (*c && tolower(*c++)=='d') while (shift--) val *= 1000;
+ else val *= 1LL<<(shift*10);
+ }
+ }
+ while (isspace(*c)) c++;
+ if (c==numstr || *c) error_exit("not integer: %s", numstr);
+
+ return val;
+}
+
+long long atolx_range(char *numstr, long long low, long long high)
+{
+ long long val = atolx(numstr);
+
+ if (val < low) error_exit("%lld < %lld", val, low);
+ if (val > high) error_exit("%lld > %lld", val, high);
+
+ return val;
+}
+
+int stridx(char *haystack, char needle)
+{
+ char *off;
+
+ if (!needle) return -1;
+ off = strchr(haystack, needle);
+ if (!off) return -1;
+
+ return off-haystack;
+}
+
+// Convert utf8 sequence to a unicode wide character
+int utf8towc(wchar_t *wc, char *str, unsigned len)
+{
+ unsigned result, mask, first;
+ char *s, c;
+
+ // fast path ASCII
+ if (len && *str<128) return !!(*wc = *str);
+
+ result = first = *(s = str++);
+ if (result<0xc2 || result>0xf4) return -1;
+ for (mask = 6; (first&0xc0)==0xc0; mask += 5, first <<= 1) {
+ if (!--len) return -2;
+ if (((c = *(str++))&0xc0) != 0x80) return -1;
+ result = (result<<6)|(c&0x3f);
+ }
+ result &= (1<<mask)-1;
+ c = str-s;
+
+ // Avoid overlong encodings
+ if (result<(unsigned []){0x80,0x800,0x10000}[c-2]) return -1;
+
+ // Limit unicode so it can't encode anything UTF-16 can't.
+ if (result>0x10ffff || (result>=0xd800 && result<=0xdfff)) return -1;
+ *wc = result;
+
+ return str-s;
+}
+
+char *strlower(char *s)
+{
+ char *try, *new;
+
+ if (!CFG_TOYBOX_I18N) {
+ try = new = xstrdup(s);
+ for (; *s; s++) *(new++) = tolower(*s);
+ } else {
+ // I can't guarantee the string _won't_ expand during reencoding, so...?
+ try = new = xmalloc(strlen(s)*2+1);
+
+ while (*s) {
+ wchar_t c;
+ int len = utf8towc(&c, s, MB_CUR_MAX);
+
+ if (len < 1) *(new++) = *(s++);
+ else {
+ s += len;
+ // squash title case too
+ c = towlower(c);
+
+ // if we had a valid utf8 sequence, convert it to lower case, and can't
+ // encode back to utf8, something is wrong with your libc. But just
+ // in case somebody finds an exploit...
+ len = wcrtomb(new, c, 0);
+ if (len < 1) error_exit("bad utf8 %x", (int)c);
+ new += len;
+ }
+ }
+ *new = 0;
+ }
+
+ return try;
+}
+
+// strstr but returns pointer after match
+char *strafter(char *haystack, char *needle)
+{
+ char *s = strstr(haystack, needle);
+
+ return s ? s+strlen(needle) : s;
+}
+
+// Remove trailing \n
+char *chomp(char *s)
+{
+ char *p = strrchr(s, '\n');
+
+ if (p && !p[1]) *p = 0;
+ return s;
+}
+
+int unescape(char c)
+{
+ char *from = "\\abefnrtv", *to = "\\\a\b\033\f\n\r\t\v";
+ int idx = stridx(from, c);
+
+ return (idx == -1) ? 0 : to[idx];
+}
+
+// If string ends with suffix return pointer to start of suffix in string,
+// else NULL
+char *strend(char *str, char *suffix)
+{
+ long a = strlen(str), b = strlen(suffix);
+
+ if (a>b && !strcmp(str += a-b, suffix)) return str;
+
+ return 0;
+}
+
+// If *a starts with b, advance *a past it and return 1, else return 0;
+int strstart(char **a, char *b)
+{
+ int len = strlen(b), i = !strncmp(*a, b, len);
+
+ if (i) *a += len;
+
+ return i;
+}
+
+// Return how long the file at fd is, if there's any way to determine it.
+off_t fdlength(int fd)
+{
+ struct stat st;
+ off_t base = 0, range = 1, expand = 1, old;
+
+ if (!fstat(fd, &st) && S_ISREG(st.st_mode)) return st.st_size;
+
+ // If the ioctl works for this, return it.
+ // TODO: is blocksize still always 512, or do we stat for it?
+ // unsigned int size;
+ // if (ioctl(fd, BLKGETSIZE, &size) >= 0) return size*512L;
+
+ // If not, do a binary search for the last location we can read. (Some
+ // block devices don't do BLKGETSIZE right.) This should probably have
+ // a CONFIG option...
+
+ // If not, do a binary search for the last location we can read.
+
+ old = lseek(fd, 0, SEEK_CUR);
+ do {
+ char temp;
+ off_t pos = base + range / 2;
+
+ if (lseek(fd, pos, 0)>=0 && read(fd, &temp, 1)==1) {
+ off_t delta = (pos + 1) - base;
+
+ base += delta;
+ if (expand) range = (expand <<= 1) - base;
+ else range -= delta;
+ } else {
+ expand = 0;
+ range = pos - base;
+ }
+ } while (range > 0);
+
+ lseek(fd, old, SEEK_SET);
+
+ return base;
+}
+
+// Read contents of file as a single nul-terminated string.
+// measure file size if !len, allocate buffer if !buf
+// Existing buffers need len in *plen
+// Returns amount of data read in *plen
+char *readfileat(int dirfd, char *name, char *ibuf, off_t *plen)
+{
+ off_t len, rlen;
+ int fd;
+ char *buf, *rbuf;
+
+ // Unsafe to probe for size with a supplied buffer, don't ever do that.
+ if (CFG_TOYBOX_DEBUG && (ibuf ? !*plen : *plen)) error_exit("bad readfileat");
+
+ if (-1 == (fd = openat(dirfd, name, O_RDONLY))) return 0;
+
+ // If we dunno the length, probe it. If we can't probe, start with 1 page.
+ if (!*plen) {
+ if ((len = fdlength(fd))>0) *plen = len;
+ else len = 4096;
+ } else len = *plen-1;
+
+ if (!ibuf) buf = xmalloc(len+1);
+ else buf = ibuf;
+
+ for (rbuf = buf;;) {
+ rlen = readall(fd, rbuf, len);
+ if (*plen || rlen<len) break;
+
+ // If reading unknown size, expand buffer by 1.5 each time we fill it up.
+ rlen += rbuf-buf;
+ buf = xrealloc(buf, len = (rlen*3)/2);
+ rbuf = buf+rlen;
+ len -= rlen;
+ }
+ *plen = len = rlen+(rbuf-buf);
+ close(fd);
+
+ if (rlen<0) {
+ if (ibuf != buf) free(buf);
+ buf = 0;
+ } else buf[len] = 0;
+
+ return buf;
+}
+
+char *readfile(char *name, char *ibuf, off_t len)
+{
+ return readfileat(AT_FDCWD, name, ibuf, &len);
+}
+
+// Sleep for this many thousandths of a second
+void msleep(long miliseconds)
+{
+ struct timespec ts;
+
+ ts.tv_sec = miliseconds/1000;
+ ts.tv_nsec = (miliseconds%1000)*1000000;
+ nanosleep(&ts, &ts);
+}
+
+// return 1<<x of highest bit set
+int highest_bit(unsigned long l)
+{
+ int i;
+
+ for (i = 0; l; i++) l >>= 1;
+
+ return i-1;
+}
+
+// Inefficient, but deals with unaligned access
+int64_t peek_le(void *ptr, unsigned size)
+{
+ int64_t ret = 0;
+ char *c = ptr;
+ int i;
+
+ for (i=0; i<size; i++) ret |= ((int64_t)c[i])<<(i*8);
+ return ret;
+}
+
+int64_t peek_be(void *ptr, unsigned size)
+{
+ int64_t ret = 0;
+ char *c = ptr;
+ int i;
+
+ for (i=0; i<size; i++) ret = (ret<<8)|(c[i]&0xff);
+ return ret;
+}
+
+int64_t peek(void *ptr, unsigned size)
+{
+ return IS_BIG_ENDIAN ? peek_be(ptr, size) : peek_le(ptr, size);
+}
+
+void poke(void *ptr, uint64_t val, int size)
+{
+ if (size & 8) {
+ volatile uint64_t *p = (uint64_t *)ptr;
+ *p = val;
+ } else if (size & 4) {
+ volatile int *p = (int *)ptr;
+ *p = val;
+ } else if (size & 2) {
+ volatile short *p = (short *)ptr;
+ *p = val;
+ } else {
+ volatile char *p = (char *)ptr;
+ *p = val;
+ }
+}
+
+// Iterate through an array of files, opening each one and calling a function
+// on that filehandle and name. The special filename "-" means stdin if
+// flags is O_RDONLY, stdout otherwise. An empty argument list calls
+// function() on just stdin/stdout.
+//
+// Note: pass O_CLOEXEC to automatically close filehandles when function()
+// returns, otherwise filehandles must be closed by function().
+// pass WARN_ONLY to produce warning messages about files it couldn't
+// open/create, and skip them. Otherwise function is called with fd -1.
+void loopfiles_rw(char **argv, int flags, int permissions,
+ void (*function)(int fd, char *name))
+{
+ int fd, failok = !(flags&WARN_ONLY);
+
+ flags &= ~WARN_ONLY;
+
+ // If no arguments, read from stdin.
+ if (!*argv) function((flags & O_ACCMODE) != O_RDONLY ? 1 : 0, "-");
+ else do {
+ // Filename "-" means read from stdin.
+ // Inability to open a file prints a warning, but doesn't exit.
+
+ if (!strcmp(*argv, "-")) fd = 0;
+ else if (0>(fd = notstdio(open(*argv, flags, permissions))) && !failok) {
+ perror_msg_raw(*argv);
+ continue;
+ }
+ function(fd, *argv);
+ if ((flags & O_CLOEXEC) && fd) close(fd);
+ } while (*++argv);
+}
+
+// Call loopfiles_rw with O_RDONLY|O_CLOEXEC|WARN_ONLY (common case)
+void loopfiles(char **argv, void (*function)(int fd, char *name))
+{
+ loopfiles_rw(argv, O_RDONLY|O_CLOEXEC|WARN_ONLY, 0, function);
+}
+
+// glue to call dl_lines() from loopfiles
+static void (*do_lines_bridge)(char **pline, long len);
+static void loopfile_lines_bridge(int fd, char *name)
+{
+ do_lines(fd, do_lines_bridge);
+}
+
+void loopfiles_lines(char **argv, void (*function)(char **pline, long len))
+{
+ do_lines_bridge = function;
+ loopfiles(argv, loopfile_lines_bridge);
+}
+
+// Slow, but small.
+
+char *get_rawline(int fd, long *plen, char end)
+{
+ char c, *buf = NULL;
+ long len = 0;
+
+ for (;;) {
+ if (1>read(fd, &c, 1)) break;
+ if (!(len & 63)) buf=xrealloc(buf, len+65);
+ if ((buf[len++]=c) == end) break;
+ }
+ if (buf) buf[len]=0;
+ if (plen) *plen = len;
+
+ return buf;
+}
+
+char *get_line(int fd)
+{
+ long len;
+ char *buf = get_rawline(fd, &len, '\n');
+
+ if (buf && buf[--len]=='\n') buf[len]=0;
+
+ return buf;
+}
+
+int wfchmodat(int fd, char *name, mode_t mode)
+{
+ int rc = fchmodat(fd, name, mode, 0);
+
+ if (rc) {
+ perror_msg("chmod '%s' to %04o", name, mode);
+ toys.exitval=1;
+ }
+ return rc;
+}
+
+static char *tempfile2zap;
+static void tempfile_handler(void)
+{
+ if (1 < (long)tempfile2zap) unlink(tempfile2zap);
+}
+
+// Open a temporary file to copy an existing file into.
+int copy_tempfile(int fdin, char *name, char **tempname)
+{
+ struct stat statbuf;
+ int fd = xtempfile(name, tempname), ignored __attribute__((__unused__));
+
+ // Record tempfile for exit cleanup if interrupted
+ if (!tempfile2zap) sigatexit(tempfile_handler);
+ tempfile2zap = *tempname;
+
+ // Set permissions of output file.
+ if (!fstat(fdin, &statbuf)) fchmod(fd, statbuf.st_mode);
+
+ // We chmod before chown, which strips the suid bit. Caller has to explicitly
+ // switch it back on if they want to keep suid.
+
+ // Suppress warn-unused-result. Both gcc and clang clutch their pearls about
+ // this but it's _supposed_ to fail when we're not root.
+ ignored = fchown(fd, statbuf.st_uid, statbuf.st_gid);
+
+ return fd;
+}
+
+// Abort the copy and delete the temporary file.
+void delete_tempfile(int fdin, int fdout, char **tempname)
+{
+ close(fdin);
+ close(fdout);
+ if (*tempname) unlink(*tempname);
+ tempfile2zap = (char *)1;
+ free(*tempname);
+ *tempname = NULL;
+}
+
+// Copy the rest of the data and replace the original with the copy.
+void replace_tempfile(int fdin, int fdout, char **tempname)
+{
+ char *temp = xstrdup(*tempname);
+
+ temp[strlen(temp)-6]=0;
+ if (fdin != -1) {
+ xsendfile(fdin, fdout);
+ xclose(fdin);
+ }
+ xclose(fdout);
+ rename(*tempname, temp);
+ tempfile2zap = (char *)1;
+ free(*tempname);
+ free(temp);
+ *tempname = NULL;
+}
+
+// Create a 256 entry CRC32 lookup table.
+
+void crc_init(unsigned int *crc_table, int little_endian)
+{
+ unsigned int i;
+
+ // Init the CRC32 table (big endian)
+ for (i=0; i<256; i++) {
+ unsigned int j, c = little_endian ? i : i<<24;
+ for (j=8; j; j--)
+ if (little_endian) c = (c&1) ? (c>>1)^0xEDB88320 : c>>1;
+ else c=c&0x80000000 ? (c<<1)^0x04c11db7 : (c<<1);
+ crc_table[i] = c;
+ }
+}
+
+// Init base64 table
+
+void base64_init(char *p)
+{
+ int i;
+
+ for (i = 'A'; i != ':'; i++) {
+ if (i == 'Z'+1) i = 'a';
+ if (i == 'z'+1) i = '0';
+ *(p++) = i;
+ }
+ *(p++) = '+';
+ *(p++) = '/';
+}
+
+int yesno(int def)
+{
+ char buf;
+
+ fprintf(stderr, " (%c/%c):", def ? 'Y' : 'y', def ? 'n' : 'N');
+ fflush(stderr);
+ while (fread(&buf, 1, 1, stdin)) {
+ int new;
+
+ // The letter changes the value, the newline (or space) returns it.
+ if (isspace(buf)) break;
+ if (-1 != (new = stridx("ny", tolower(buf)))) def = new;
+ }
+
+ return def;
+}
+
+struct signame {
+ int num;
+ char *name;
+};
+
+// Signals required by POSIX 2008:
+// http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html
+
+#define SIGNIFY(x) {SIG##x, #x}
+
+static struct signame signames[] = {
+ SIGNIFY(ABRT), SIGNIFY(ALRM), SIGNIFY(BUS),
+ SIGNIFY(FPE), SIGNIFY(HUP), SIGNIFY(ILL), SIGNIFY(INT), SIGNIFY(KILL),
+ SIGNIFY(PIPE), SIGNIFY(QUIT), SIGNIFY(SEGV), SIGNIFY(TERM),
+ SIGNIFY(USR1), SIGNIFY(USR2), SIGNIFY(SYS), SIGNIFY(TRAP),
+ SIGNIFY(VTALRM), SIGNIFY(XCPU), SIGNIFY(XFSZ),
+
+ // Start of non-terminal signals
+
+ SIGNIFY(CHLD), SIGNIFY(CONT), SIGNIFY(STOP), SIGNIFY(TSTP),
+ SIGNIFY(TTIN), SIGNIFY(TTOU), SIGNIFY(URG)
+};
+
+// not in posix: SIGNIFY(STKFLT), SIGNIFY(WINCH), SIGNIFY(IO), SIGNIFY(PWR)
+// obsolete: SIGNIFY(PROF) SIGNIFY(POLL)
+
+// Handler that sets toys.signal, and writes to toys.signalfd if set
+void generic_signal(int sig)
+{
+ if (toys.signalfd) {
+ char c = sig;
+
+ writeall(toys.signalfd, &c, 1);
+ }
+ toys.signal = sig;
+}
+
+void exit_signal(int sig)
+{
+ if (sig) toys.exitval = sig|128;
+ xexit();
+}
+
+// Install the same handler on every signal that defaults to killing the
+// process, calling the handler on the way out. Calling multiple times
+// adds the handlers to a list, to be called in order.
+void sigatexit(void *handler)
+{
+ struct arg_list *al;
+ int i;
+
+ for (i=0; signames[i].num != SIGCHLD; i++)
+ if (signames[i].num != SIGKILL)
+ xsignal(signames[i].num, handler ? exit_signal : SIG_DFL);
+
+ if (handler) {
+ al = xmalloc(sizeof(struct arg_list));
+ al->next = toys.xexit;
+ al->arg = handler;
+ toys.xexit = al;
+ } else {
+ llist_traverse(toys.xexit, free);
+ toys.xexit = 0;
+ }
+}
+
+// Convert name to signal number. If name == NULL print names.
+int sig_to_num(char *pidstr)
+{
+ int i;
+
+ if (pidstr) {
+ char *s;
+
+ i = estrtol(pidstr, &s, 10);
+ if (!errno && !*s) return i;
+
+ if (!strncasecmp(pidstr, "sig", 3)) pidstr+=3;
+ }
+ for (i = 0; i < sizeof(signames)/sizeof(struct signame); i++)
+ if (!pidstr) xputs(signames[i].name);
+ else if (!strcasecmp(pidstr, signames[i].name)) return signames[i].num;
+
+ return -1;
+}
+
+char *num_to_sig(int sig)
+{
+ int i;
+
+ for (i=0; i<sizeof(signames)/sizeof(struct signame); i++)
+ if (signames[i].num == sig) return signames[i].name;
+ return NULL;
+}
+
+// premute mode bits based on posix mode strings.
+mode_t string_to_mode(char *modestr, mode_t mode)
+{
+ char *whos = "ogua", *hows = "=+-", *whats = "xwrstX", *whys = "ogu",
+ *s, *str = modestr;
+ mode_t extrabits = mode & ~(07777);
+
+ // Handle octal mode
+ if (isdigit(*str)) {
+ mode = estrtol(str, &s, 8);
+ if (errno || *s || (mode & ~(07777))) goto barf;
+
+ return mode | extrabits;
+ }
+
+ // Gaze into the bin of permission...
+ for (;;) {
+ int i, j, dowho, dohow, dowhat, amask;
+
+ dowho = dohow = dowhat = amask = 0;
+
+ // Find the who, how, and what stanzas, in that order
+ while (*str && (s = strchr(whos, *str))) {
+ dowho |= 1<<(s-whos);
+ str++;
+ }
+ // If who isn't specified, like "a" but honoring umask.
+ if (!dowho) {
+ dowho = 8;
+ umask(amask=umask(0));
+ }
+ if (!*str || !(s = strchr(hows, *str))) goto barf;
+ dohow = *(str++);
+
+ if (!dohow) goto barf;
+ while (*str && (s = strchr(whats, *str))) {
+ dowhat |= 1<<(s-whats);
+ str++;
+ }
+
+ // Convert X to x for directory or if already executable somewhere
+ if ((dowhat&32) && (S_ISDIR(mode) || (mode&0111))) dowhat |= 1;
+
+ // Copy mode from another category?
+ if (!dowhat && *str && (s = strchr(whys, *str))) {
+ dowhat = (mode>>(3*(s-whys)))&7;
+ str++;
+ }
+
+ // Are we ready to do a thing yet?
+ if (*str && *(str++) != ',') goto barf;
+
+ // Ok, apply the bits to the mode.
+ for (i=0; i<4; i++) {
+ for (j=0; j<3; j++) {
+ mode_t bit = 0;
+ int where = 1<<((3*i)+j);
+
+ if (amask & where) continue;
+
+ // Figure out new value at this location
+ if (i == 3) {
+ // suid/sticky bit.
+ if (j) {
+ if ((dowhat & 8) && (dowho&(8|(1<<i)))) bit++;
+ } else if (dowhat & 16) bit++;
+ } else {
+ if (!(dowho&(8|(1<<i)))) continue;
+ if (dowhat&(1<<j)) bit++;
+ }
+
+ // When selection active, modify bit
+
+ if (dohow == '=' || (bit && dohow == '-')) mode &= ~where;
+ if (bit && dohow != '-') mode |= where;
+ }
+ }
+
+ if (!*str) break;
+ }
+
+ return mode|extrabits;
+barf:
+ error_exit("bad mode '%s'", modestr);
+}
+
+// Format access mode into a drwxrwxrwx string
+void mode_to_string(mode_t mode, char *buf)
+{
+ char c, d;
+ int i, bit;
+
+ buf[10]=0;
+ for (i=0; i<9; i++) {
+ bit = mode & (1<<i);
+ c = i%3;
+ if (!c && (mode & (1<<((d=i/3)+9)))) {
+ c = "tss"[d];
+ if (!bit) c &= ~0x20;
+ } else c = bit ? "xwr"[c] : '-';
+ buf[9-i] = c;
+ }
+
+ if (S_ISDIR(mode)) c = 'd';
+ else if (S_ISBLK(mode)) c = 'b';
+ else if (S_ISCHR(mode)) c = 'c';
+ else if (S_ISLNK(mode)) c = 'l';
+ else if (S_ISFIFO(mode)) c = 'p';
+ else if (S_ISSOCK(mode)) c = 's';
+ else c = '-';
+ *buf = c;
+}
+
+// dirname() can modify its argument or return a pointer to a constant string
+// This always returns a malloc() copy of everyting before last (run of ) '/'.
+char *getdirname(char *name)
+{
+ char *s = xstrdup(name), *ss = strrchr(s, '/');
+
+ while (*ss && *ss == '/' && s != ss) *ss-- = 0;
+
+ return s;
+}
+
+// basename() can modify its argument or return a pointer to a constant string
+// This just gives after the last '/' or the whole stirng if no /
+char *getbasename(char *name)
+{
+ char *s = strrchr(name, '/');
+
+ if (s) return s+1;
+
+ return name;
+}
+
+// Is this file under this directory?
+int fileunderdir(char *file, char *dir)
+{
+ char *s1 = xabspath(dir, 1), *s2 = xabspath(file, -1), *ss = s2;
+ int rc = s1 && s2 && strstart(&ss, s1) && (!s1[1] || s2[strlen(s1)] == '/');
+
+ free(s1);
+ free(s2);
+
+ return rc;
+}
+
+// Execute a callback for each PID that matches a process name from a list.
+void names_to_pid(char **names, int (*callback)(pid_t pid, char *name))
+{
+ DIR *dp;
+ struct dirent *entry;
+
+ if (!(dp = opendir("/proc"))) perror_exit("no /proc");
+
+ while ((entry = readdir(dp))) {
+ unsigned u = atoi(entry->d_name);
+ char *cmd = 0, *comm, **cur;
+ off_t len;
+
+ if (!u) continue;
+
+ // Comm is original name of executable (argv[0] could be #! interpreter)
+ // but it's limited to 15 characters
+ sprintf(libbuf, "/proc/%u/comm", u);
+ len = sizeof(libbuf);
+ if (!(comm = readfileat(AT_FDCWD, libbuf, libbuf, &len)) || !len)
+ continue;
+ if (libbuf[len-1] == '\n') libbuf[--len] = 0;
+
+ for (cur = names; *cur; cur++) {
+ struct stat st1, st2;
+ char *bb = getbasename(*cur);
+ off_t len = strlen(bb);
+
+ // Fast path: only matching a filename (no path) that fits in comm.
+ // `len` must be 14 or less because with a full 15 bytes we don't
+ // know whether the name fit or was truncated.
+ if (len<=14 && bb==*cur && !strcmp(comm, bb)) goto match;
+
+ // If we have a path to existing file only match if same inode
+ if (bb!=*cur && !stat(*cur, &st1)) {
+ char buf[32];
+
+ sprintf(buf, "/proc/%u/exe", u);
+ if (stat(buf, &st2)) continue;
+ if (st1.st_dev != st2.st_dev || st1.st_ino != st2.st_ino) continue;
+ goto match;
+ }
+
+ // Nope, gotta read command line to confirm
+ if (!cmd) {
+ sprintf(cmd = libbuf+16, "/proc/%u/cmdline", u);
+ len = sizeof(libbuf)-17;
+ if (!(cmd = readfileat(AT_FDCWD, cmd, cmd, &len))) continue;
+ // readfile only guarantees one null terminator and we need two
+ // (yes the kernel should do this for us, don't care)
+ cmd[len] = 0;
+ }
+ if (!strcmp(bb, getbasename(cmd))) goto match;
+ if (bb!=*cur && !strcmp(bb, getbasename(cmd+strlen(cmd)+1))) goto match;
+ continue;
+match:
+ if (callback(u, *cur)) break;
+ }
+ }
+ closedir(dp);
+}
+
+// display first few digits of number with power of two units
+int human_readable(char *buf, unsigned long long num, int style)
+{
+ unsigned long long snap = 0;
+ int len, unit, divisor = (style&HR_1000) ? 1000 : 1024;
+
+ // Divide rounding up until we have 3 or fewer digits. Since the part we
+ // print is decimal, the test is 999 even when we divide by 1024.
+ // We can't run out of units because 2<<64 is 18 exabytes.
+ // test 5675 is 5.5k not 5.6k.
+ for (unit = 0; num > 999; unit++) num = ((snap = num)+(divisor/2))/divisor;
+ len = sprintf(buf, "%llu", num);
+ if (unit && len == 1) {
+ // Redo rounding for 1.2M case, this works with and without HR_1000.
+ num = snap/divisor;
+ snap -= num*divisor;
+ snap = ((snap*100)+50)/divisor;
+ snap /= 10;
+ len = sprintf(buf, "%llu.%llu", num, snap);
+ }
+ if (style & HR_SPACE) buf[len++] = ' ';
+ if (unit) {
+ unit = " kMGTPE"[unit];
+
+ if (!(style&HR_1000)) unit = toupper(unit);
+ buf[len++] = unit;
+ } else if (style & HR_B) buf[len++] = 'B';
+ buf[len] = 0;
+
+ return len;
+}
+
+// The qsort man page says you can use alphasort, the posix committee
+// disagreed, and doubled down: http://austingroupbugs.net/view.php?id=142
+// So just do our own. (The const is entirely to humor the stupid compiler.)
+int qstrcmp(const void *a, const void *b)
+{
+ return strcmp(*(char **)a, *(char **)b);
+}
+
+// See https://tools.ietf.org/html/rfc4122, specifically section 4.4
+// "Algorithms for Creating a UUID from Truly Random or Pseudo-Random
+// Numbers".
+void create_uuid(char *uuid)
+{
+ // "Set all the ... bits to randomly (or pseudo-randomly) chosen values".
+ xgetrandom(uuid, 16, 0);
+
+ // "Set the four most significant bits ... of the time_hi_and_version
+ // field to the 4-bit version number [4]".
+ uuid[6] = (uuid[6] & 0x0F) | 0x40;
+ // "Set the two most significant bits (bits 6 and 7) of
+ // clock_seq_hi_and_reserved to zero and one, respectively".
+ uuid[8] = (uuid[8] & 0x3F) | 0x80;
+}
+
+char *show_uuid(char *uuid)
+{
+ char *out = libbuf;
+ int i;
+
+ for (i=0; i<16; i++) out+=sprintf(out, "-%02x"+!(0x550&(1<<i)), uuid[i]);
+ *out = 0;
+
+ return libbuf;
+}
+
+// Returns pointer to letter at end, 0 if none. *start = initial %
+char *next_printf(char *s, char **start)
+{
+ for (; *s; s++) {
+ if (*s != '%') continue;
+ if (*++s == '%') continue;
+ if (start) *start = s-1;
+ while (0 <= stridx("0'#-+ ", *s)) s++;
+ while (isdigit(*s)) s++;
+ if (*s == '.') s++;
+ while (isdigit(*s)) s++;
+
+ return s;
+ }
+
+ return 0;
+}
+
+// Posix inexplicably hasn't got this, so find str in line.
+char *strnstr(char *line, char *str)
+{
+ long len = strlen(str);
+ char *s;
+
+ for (s = line; *s; s++) if (!strncasecmp(s, str, len)) break;
+
+ return *s ? s : 0;
+}
+
+int dev_minor(int dev)
+{
+ return ((dev&0xfff00000)>>12)|(dev&0xff);
+}
+
+int dev_major(int dev)
+{
+ return (dev&0xfff00)>>8;
+}
+
+int dev_makedev(int major, int minor)
+{
+ return (minor&0xff)|((major&0xfff)<<8)|((minor&0xfff00)<<12);
+}
+
+// Return cached passwd entries.
+struct passwd *bufgetpwuid(uid_t uid)
+{
+ struct pwuidbuf_list {
+ struct pwuidbuf_list *next;
+ struct passwd pw;
+ } *list = 0;
+ struct passwd *temp;
+ static struct pwuidbuf_list *pwuidbuf;
+ unsigned size = 256;
+
+ // If we already have this one, return it.
+ for (list = pwuidbuf; list; list = list->next)
+ if (list->pw.pw_uid == uid) return &(list->pw);
+
+ for (;;) {
+ list = xrealloc(list, size *= 2);
+ errno = getpwuid_r(uid, &list->pw, sizeof(*list)+(char *)list,
+ size-sizeof(*list), &temp);
+ if (errno != ERANGE) break;
+ }
+
+ if (!temp) {
+ free(list);
+
+ return 0;
+ }
+ list->next = pwuidbuf;
+ pwuidbuf = list;
+
+ return &list->pw;
+}
+
+// Return cached group entries.
+struct group *bufgetgrgid(gid_t gid)
+{
+ struct grgidbuf_list {
+ struct grgidbuf_list *next;
+ struct group gr;
+ } *list = 0;
+ struct group *temp;
+ static struct grgidbuf_list *grgidbuf;
+ unsigned size = 256;
+
+ for (list = grgidbuf; list; list = list->next)
+ if (list->gr.gr_gid == gid) return &(list->gr);
+
+ for (;;) {
+ list = xrealloc(list, size *= 2);
+ errno = getgrgid_r(gid, &list->gr, sizeof(*list)+(char *)list,
+ size-sizeof(*list), &temp);
+ if (errno != ERANGE) break;
+ }
+ if (!temp) {
+ free(list);
+
+ return 0;
+ }
+ list->next = grgidbuf;
+ grgidbuf = list;
+
+ return &list->gr;
+}
+
+// Always null terminates, returns 0 for failure, len for success
+int readlinkat0(int dirfd, char *path, char *buf, int len)
+{
+ if (!len) return 0;
+
+ len = readlinkat(dirfd, path, buf, len-1);
+ if (len<1) return 0;
+ buf[len] = 0;
+
+ return len;
+}
+
+int readlink0(char *path, char *buf, int len)
+{
+ return readlinkat0(AT_FDCWD, path, buf, len);
+}
+
+// Do regex matching handling embedded NUL bytes in string (hence extra len
+// argument). Note that neither the pattern nor the match can currently include
+// NUL bytes (even with wildcards) and string must be null terminated at
+// string[len]. But this can find a match after the first NUL.
+int regexec0(regex_t *preg, char *string, long len, int nmatch,
+ regmatch_t pmatch[], int eflags)
+{
+ char *s = string;
+
+ for (;;) {
+ long ll = 0;
+ int rc;
+
+ while (len && !*s) {
+ s++;
+ len--;
+ }
+ while (s[ll] && ll<len) ll++;
+
+ rc = regexec(preg, s, nmatch, pmatch, eflags);
+ if (!rc) {
+ for (rc = 0; rc<nmatch && pmatch[rc].rm_so!=-1; rc++) {
+ pmatch[rc].rm_so += s-string;
+ pmatch[rc].rm_eo += s-string;
+ }
+
+ return 0;
+ }
+ if (ll==len) return rc;
+
+ s += ll;
+ len -= ll;
+ }
+}
+
+// Return user name or string representation of number, returned buffer
+// lasts until next call.
+char *getusername(uid_t uid)
+{
+ struct passwd *pw = bufgetpwuid(uid);
+ static char unum[12];
+
+ sprintf(unum, "%u", (unsigned)uid);
+ return pw ? pw->pw_name : unum;
+}
+
+// Return group name or string representation of number, returned buffer
+// lasts until next call.
+char *getgroupname(gid_t gid)
+{
+ struct group *gr = bufgetgrgid(gid);
+ static char gnum[12];
+
+ sprintf(gnum, "%u", (unsigned)gid);
+ return gr ? gr->gr_name : gnum;
+}
+
+// Iterate over lines in file, calling function. Function can write 0 to
+// the line pointer if they want to keep it, or 1 to terminate processing,
+// otherwise line is freed. Passed file descriptor is closed at the end.
+// At EOF calls function(0, 0)
+void do_lines(int fd, void (*call)(char **pline, long len))
+{
+ FILE *fp = fd ? xfdopen(fd, "r") : stdin;
+
+ for (;;) {
+ char *line = 0;
+ ssize_t len;
+
+ len = getline(&line, (void *)&len, fp);
+ if (len > 0) {
+ call(&line, len);
+ if (line == (void *)1) break;
+ free(line);
+ } else break;
+ }
+ call(0, 0);
+
+ if (fd) fclose(fp);
+}
+
+// Returns the number of bytes taken by the environment variables. For use
+// when calculating the maximum bytes of environment+argument data that can
+// be passed to exec for find(1) and xargs(1).
+long environ_bytes()
+{
+ long bytes = sizeof(char *);
+ char **ev;
+
+ for (ev = environ; *ev; ev++) bytes += sizeof(char *) + strlen(*ev) + 1;
+
+ return bytes;
+}
+
+// Return unix time in milliseconds
+long long millitime(void)
+{
+ struct timespec ts;
+
+ clock_gettime(CLOCK_MONOTONIC, &ts);
+ return ts.tv_sec*1000+ts.tv_nsec/1000000;
+}
+
+// Formats `ts` in ISO format ("2018-06-28 15:08:58.846386216 -0700").
+char *format_iso_time(char *buf, size_t len, struct timespec *ts)
+{
+ char *s = buf;
+
+ s += strftime(s, len, "%F %T", localtime(&(ts->tv_sec)));
+ s += sprintf(s, ".%09ld ", ts->tv_nsec);
+ s += strftime(s, len-strlen(buf), "%z", localtime(&(ts->tv_sec)));
+
+ return buf;
+}
diff --git a/login/lib/lib.h b/login/lib/lib.h
@@ -0,0 +1,375 @@
+/* lib.h - header file for lib directory
+ *
+ * Copyright 2006 Rob Landley <rob@landley.net>
+ */
+
+struct ptr_len {
+ void *ptr;
+ long len;
+};
+
+struct str_len {
+ char *str;
+ long len;
+};
+
+// llist.c
+
+// All these list types can be handled by the same code because first element
+// is always next pointer, so next = (mytype *)&struct. (The payloads are
+// named differently to catch using the wrong type early.)
+
+struct string_list {
+ struct string_list *next;
+ char str[0];
+};
+
+struct arg_list {
+ struct arg_list *next;
+ char *arg;
+};
+
+struct double_list {
+ struct double_list *next, *prev;
+ char *data;
+};
+
+struct num_cache {
+ struct num_cache *next;
+ long long num;
+ char data[];
+};
+
+void llist_free_arg(void *node);
+void llist_free_double(void *node);
+void llist_traverse(void *list, void (*using)(void *node));
+void *llist_pop(void *list); // actually void **list
+void *dlist_pop(void *list); // actually struct double_list **list
+void dlist_add_nomalloc(struct double_list **list, struct double_list *new);
+struct double_list *dlist_add(struct double_list **list, char *data);
+void *dlist_terminate(void *list);
+struct num_cache *get_num_cache(struct num_cache *cache, long long num);
+struct num_cache *add_num_cache(struct num_cache **cache, long long num,
+ void *data, int len);
+
+// args.c
+#define FLAGS_NODASH (1LL<<63)
+void get_optflags(void);
+
+// dirtree.c
+
+// Values returnable from callback function (bitfield, or them together)
+// Default with no callback is 0
+
+// Add this node to the tree
+#define DIRTREE_SAVE 1
+// Recurse into children
+#define DIRTREE_RECURSE 2
+// Call again after handling all children of this directory
+// (Ignored for non-directories, sets linklen = -1 before second call.)
+#define DIRTREE_COMEAGAIN 4
+// Follow symlinks to directories
+#define DIRTREE_SYMFOLLOW 8
+// Don't warn about failure to stat
+#define DIRTREE_SHUTUP 16
+// Breadth first traversal, conserves filehandles at the expense of memory
+#define DIRTREE_BREADTH 32
+// skip non-numeric entries
+#define DIRTREE_PROC 64
+// Don't look at any more files in this directory.
+#define DIRTREE_ABORT 256
+
+#define DIRTREE_ABORTVAL ((struct dirtree *)1)
+
+struct dirtree {
+ struct dirtree *next, *parent, *child;
+ long extra; // place for user to store their stuff (can be pointer)
+ struct stat st;
+ char *symlink;
+ int dirfd;
+ char again;
+ char name[];
+};
+
+int isdotdot(char *name);
+struct dirtree *dirtree_add_node(struct dirtree *p, char *name, int flags);
+char *dirtree_path(struct dirtree *node, int *plen);
+int dirtree_notdotdot(struct dirtree *catch);
+int dirtree_parentfd(struct dirtree *node);
+int dirtree_recurse(struct dirtree *node, int (*callback)(struct dirtree *node),
+ int dirfd, int symfollow);
+struct dirtree *dirtree_flagread(char *path, int flags,
+ int (*callback)(struct dirtree *node));
+struct dirtree *dirtree_read(char *path, int (*callback)(struct dirtree *node));
+
+// help.c
+
+void show_help(FILE *out);
+
+// Tell xopen and friends to print warnings but return -1 as necessary
+// The largest O_BLAH flag so far is arch/alpha's O_PATH at 0x800000 so
+// plenty of headroom.
+#define WARN_ONLY (1<<31)
+
+// xwrap.c
+void xstrncpy(char *dest, char *src, size_t size);
+void xstrncat(char *dest, char *src, size_t size);
+void _xexit(void) noreturn;
+void xexit(void) noreturn;
+void *xmmap(void *addr, size_t length, int prot, int flags, int fd, off_t off);
+void *xmalloc(size_t size);
+void *xzalloc(size_t size);
+void *xrealloc(void *ptr, size_t size);
+char *xstrndup(char *s, size_t n);
+char *xstrdup(char *s);
+void *xmemdup(void *s, long len);
+char *xmprintf(char *format, ...) printf_format;
+void xprintf(char *format, ...) printf_format;
+void xputs(char *s);
+void xputc(char c);
+void xflush(void);
+void xexec(char **argv);
+pid_t xpopen_both(char **argv, int *pipes);
+int xwaitpid(pid_t pid);
+int xpclose_both(pid_t pid, int *pipes);
+pid_t xpopen(char **argv, int *pipe, int isstdout);
+pid_t xpclose(pid_t pid, int pipe);
+int xrun(char **argv);
+int xpspawn(char **argv, int*pipes);
+void xaccess(char *path, int flags);
+void xunlink(char *path);
+int xtempfile(char *name, char **tempname);
+int xcreate(char *path, int flags, int mode);
+int xopen(char *path, int flags);
+int xcreate_stdio(char *path, int flags, int mode);
+int xopen_stdio(char *path, int flags);
+int openro(char *path, int flags);
+int xopenro(char *path);
+void xpipe(int *pp);
+void xclose(int fd);
+int xdup(int fd);
+int notstdio(int fd);
+FILE *xfdopen(int fd, char *mode);
+FILE *xfopen(char *path, char *mode);
+size_t xread(int fd, void *buf, size_t len);
+void xreadall(int fd, void *buf, size_t len);
+void xwrite(int fd, void *buf, size_t len);
+off_t xlseek(int fd, off_t offset, int whence);
+char *xreadfile(char *name, char *buf, off_t len);
+int xioctl(int fd, int request, void *data);
+char *xgetcwd(void);
+void xstat(char *path, struct stat *st);
+char *xabspath(char *path, int exact);
+void xchdir(char *path);
+void xchroot(char *path);
+struct passwd *xgetpwuid(uid_t uid);
+struct group *xgetgrgid(gid_t gid);
+struct passwd *xgetpwnam(char *name);
+struct group *xgetgrnam(char *name);
+unsigned xgetuid(char *name);
+unsigned xgetgid(char *name);
+void xsetuser(struct passwd *pwd);
+char *xreadlink(char *name);
+double xstrtod(char *s);
+long xparsetime(char *arg, long units, long *fraction);
+long long xparsemillitime(char *arg);
+void xpidfile(char *name);
+void xregcomp(regex_t *preg, char *rexec, int cflags);
+char *xtzset(char *new);
+void xsignal_flags(int signal, void *handler, int flags);
+void xsignal(int signal, void *handler);
+
+// lib.c
+void verror_msg(char *msg, int err, va_list va);
+void error_msg(char *msg, ...) printf_format;
+void perror_msg(char *msg, ...) printf_format;
+void error_exit(char *msg, ...) printf_format noreturn;
+void perror_exit(char *msg, ...) printf_format noreturn;
+void help_exit(char *msg, ...) printf_format noreturn;
+void error_msg_raw(char *msg);
+void perror_msg_raw(char *msg);
+void error_exit_raw(char *msg);
+void perror_exit_raw(char *msg);
+ssize_t readall(int fd, void *buf, size_t len);
+ssize_t writeall(int fd, void *buf, size_t len);
+off_t lskip(int fd, off_t offset);
+#define MKPATHAT_MKLAST 1
+#define MKPATHAT_MAKE 2
+#define MKPATHAT_VERBOSE 4
+int mkpathat(int atfd, char *dir, mode_t lastmode, int flags);
+int mkpath(char *dir);
+struct string_list **splitpath(char *path, struct string_list **list);
+char *readfileat(int dirfd, char *name, char *buf, off_t *len);
+char *readfile(char *name, char *buf, off_t len);
+void msleep(long miliseconds);
+int highest_bit(unsigned long l);
+int64_t peek_le(void *ptr, unsigned size);
+int64_t peek_be(void *ptr, unsigned size);
+int64_t peek(void *ptr, unsigned size);
+void poke(void *ptr, uint64_t val, int size);
+struct string_list *find_in_path(char *path, char *filename);
+long long estrtol(char *str, char **end, int base);
+long long xstrtol(char *str, char **end, int base);
+long long atolx(char *c);
+long long atolx_range(char *numstr, long long low, long long high);
+int stridx(char *haystack, char needle);
+int utf8towc(wchar_t *wc, char *str, unsigned len);
+char *strlower(char *s);
+char *strafter(char *haystack, char *needle);
+char *chomp(char *s);
+int unescape(char c);
+char *strend(char *str, char *suffix);
+int strstart(char **a, char *b);
+off_t fdlength(int fd);
+void loopfiles_rw(char **argv, int flags, int permissions,
+ void (*function)(int fd, char *name));
+void loopfiles(char **argv, void (*function)(int fd, char *name));
+void loopfiles_lines(char **argv, void (*function)(char **pline, long len));
+long long xsendfile(int in, int out);
+int wfchmodat(int rc, char *name, mode_t mode);
+int copy_tempfile(int fdin, char *name, char **tempname);
+void delete_tempfile(int fdin, int fdout, char **tempname);
+void replace_tempfile(int fdin, int fdout, char **tempname);
+void crc_init(unsigned int *crc_table, int little_endian);
+void base64_init(char *p);
+int yesno(int def);
+int qstrcmp(const void *a, const void *b);
+void create_uuid(char *uuid);
+char *show_uuid(char *uuid);
+char *next_printf(char *s, char **start);
+char *strnstr(char *line, char *str);
+int dev_minor(int dev);
+int dev_major(int dev);
+int dev_makedev(int major, int minor);
+struct passwd *bufgetpwuid(uid_t uid);
+struct group *bufgetgrgid(gid_t gid);
+int readlinkat0(int dirfd, char *path, char *buf, int len);
+int readlink0(char *path, char *buf, int len);
+int regexec0(regex_t *preg, char *string, long len, int nmatch,
+ regmatch_t pmatch[], int eflags);
+char *getusername(uid_t uid);
+char *getgroupname(gid_t gid);
+void do_lines(int fd, void (*call)(char **pline, long len));
+long environ_bytes();
+long long millitime(void);
+char *format_iso_time(char *buf, size_t len, struct timespec *ts);
+
+#define HR_SPACE 1 // Space between number and units
+#define HR_B 2 // Use "B" for single byte units
+#define HR_1000 4 // Use decimal instead of binary units
+int human_readable(char *buf, unsigned long long num, int style);
+
+// linestack.c
+
+struct linestack {
+ long len, max;
+ struct ptr_len idx[];
+};
+
+void linestack_addstack(struct linestack **lls, struct linestack *throw,
+ long pos);
+void linestack_insert(struct linestack **lls, long pos, char *line, long len);
+void linestack_append(struct linestack **lls, char *line);
+struct linestack *linestack_load(char *name);
+int crunch_escape(FILE *out, int cols, int wc);
+int crunch_rev_escape(FILE *out, int cols, int wc);
+int crunch_str(char **str, int width, FILE *out, char *escmore,
+ int (*escout)(FILE *out, int cols, int wc));
+int draw_str(char *start, int width);
+int utf8len(char *str);
+int utf8skip(char *str, int width);
+int draw_trim_esc(char *str, int padto, int width, char *escmore,
+ int (*escout)(FILE *out, int cols,int wc));
+int draw_trim(char *str, int padto, int width);
+
+// interestingtimes.c
+int tty_fd(void);
+int terminal_size(unsigned *xx, unsigned *yy);
+int terminal_probesize(unsigned *xx, unsigned *yy);
+int scan_key_getsize(char *scratch, int miliwait, unsigned *xx, unsigned *yy);
+int set_terminal(int fd, int raw, int speed, struct termios *old);
+void xset_terminal(int fd, int raw, int speed, struct termios *old);
+int scan_key(char *scratch, int miliwait);
+void tty_esc(char *s);
+void tty_jump(int x, int y);
+void tty_reset(void);
+void tty_sigreset(int i);
+void start_redraw(unsigned *width, unsigned *height);
+
+// net.c
+int xsocket(int domain, int type, int protocol);
+void xsetsockopt(int fd, int level, int opt, void *val, socklen_t len);
+struct addrinfo *xgetaddrinfo(char *host, char *port, int family, int socktype,
+ int protocol, int flags);
+int xconnect(struct addrinfo *ai_arg);
+int xpoll(struct pollfd *fds, int nfds, int timeout);
+int pollinate(int in1, int in2, int out1, int out2, int timeout, int shutdown_timeout);
+char *ntop(struct sockaddr *sa);
+
+// password.c
+int get_salt(char *salt, char * algo);
+
+// commas.c
+void comma_args(struct arg_list *al, void *data, char *err,
+ char *(*callback)(void *data, char *str, int len));
+void comma_collate(char **old, char *new);
+char *comma_iterate(char **list, int *len);
+int comma_scan(char *optlist, char *opt, int clean);
+int comma_scanall(char *optlist, char *scanlist);
+
+// deflate.c
+
+long long gzip_fd(int infd, int outfd);
+long long gunzip_fd(int infd, int outfd);
+
+// getmountlist.c
+struct mtab_list {
+ struct mtab_list *next, *prev;
+ struct stat stat;
+ struct statvfs statvfs;
+ char *dir;
+ char *device;
+ char *opts;
+ char type[0];
+};
+
+int mountlist_istype(struct mtab_list *ml, char *typelist);
+struct mtab_list *xgetmountlist(char *path);
+
+// signal
+
+void generic_signal(int signal);
+void exit_signal(int signal);
+void sigatexit(void *handler);
+int sig_to_num(char *pidstr);
+char *num_to_sig(int sig);
+
+mode_t string_to_mode(char *mode_str, mode_t base);
+void mode_to_string(mode_t mode, char *buf);
+char *getdirname(char *name);
+char *getbasename(char *name);
+int fileunderdir(char *file, char *dir);
+void names_to_pid(char **names, int (*callback)(pid_t pid, char *name));
+
+pid_t __attribute__((returns_twice)) xvforkwrap(pid_t pid);
+#define XVFORK() xvforkwrap(vfork())
+
+// Wrapper to make xfuncs() return (via longjmp) instead of exiting.
+// Assigns true/false "did it exit" value to first argument.
+#define WOULD_EXIT(y, x) do { jmp_buf _noexit; \
+ int _noexit_res; \
+ toys.rebound = &_noexit; \
+ _noexit_res = setjmp(_noexit); \
+ if (!_noexit_res) do {x;} while(0); \
+ toys.rebound = 0; \
+ y = _noexit_res; \
+} while(0)
+
+// Wrapper that discards true/false "did it exit" value.
+#define NOEXIT(x) WOULD_EXIT(_noexit_res, x)
+
+#define minof(a, b) ({typeof(a) aa = (a); typeof(b) bb = (b); aa<bb ? aa : bb;})
+#define maxof(a, b) ({typeof(a) aa = (a); typeof(b) bb = (b); aa>bb ? aa : bb;})
+
+// Functions in need of further review/cleanup
+#include "lib/pending.h"
diff --git a/login/lib/llist.c b/login/lib/llist.c
@@ -0,0 +1,130 @@
+/* llist.c - Linked list functions
+ *
+ * Linked list structures have a next pointer as their first element.
+ */
+
+#include "toys.h"
+
+// Callback function to free data pointer of double_list or arg_list
+
+void llist_free_arg(void *node)
+{
+ struct arg_list *d = node;
+
+ free(d->arg);
+ free(d);
+}
+
+void llist_free_double(void *node)
+{
+ struct double_list *d = node;
+
+ free(d->data);
+ free(d);
+}
+
+// Call a function (such as free()) on each element of a linked list.
+void llist_traverse(void *list, void (*using)(void *node))
+{
+ void *old = list;
+
+ while (list) {
+ void *pop = llist_pop(&list);
+ using(pop);
+
+ // End doubly linked list too.
+ if (old == list) break;
+ }
+}
+
+// Return the first item from the list, advancing the list (which must be called
+// as &list)
+void *llist_pop(void *list)
+{
+ // I'd use a void ** for the argument, and even accept the typecast in all
+ // callers as documentation you need the &, except the stupid compiler
+ // would then scream about type-punned pointers. Screw it.
+ void **llist = (void **)list;
+ void **next = (void **)*llist;
+ *llist = *next;
+
+ return (void *)next;
+}
+
+void *dlist_pop(void *list)
+{
+ struct double_list **pdlist = (struct double_list **)list, *dlist = *pdlist;
+
+ if (dlist->next == dlist) *pdlist = 0;
+ else {
+ dlist->next->prev = dlist->prev;
+ dlist->prev->next = *pdlist = dlist->next;
+ }
+
+ return dlist;
+}
+
+void dlist_add_nomalloc(struct double_list **list, struct double_list *new)
+{
+ if (*list) {
+ new->next = *list;
+ new->prev = (*list)->prev;
+ (*list)->prev->next = new;
+ (*list)->prev = new;
+ } else *list = new->next = new->prev = new;
+}
+
+
+// Add an entry to the end of a doubly linked list
+struct double_list *dlist_add(struct double_list **list, char *data)
+{
+ struct double_list *new = xmalloc(sizeof(struct double_list));
+
+ new->data = data;
+ dlist_add_nomalloc(list, new);
+
+ return new;
+}
+
+// Terminate circular list for traversal in either direction. Returns end *.
+void *dlist_terminate(void *list)
+{
+ struct double_list *end = list;
+
+ if (!list) return 0;
+
+ end = end->prev;
+ end->next->prev = 0;
+ end->next = 0;
+
+ return end;
+}
+
+// Find num in cache
+struct num_cache *get_num_cache(struct num_cache *cache, long long num)
+{
+ while (cache) {
+ if (num==cache->num) return cache;
+ cache = cache->next;
+ }
+
+ return 0;
+}
+
+// Uniquely add num+data to cache. Updates *cache, returns pointer to existing
+// entry if it was already there.
+struct num_cache *add_num_cache(struct num_cache **cache, long long num,
+ void *data, int len)
+{
+ struct num_cache *old = get_num_cache(*cache, num);
+
+ if (old) return old;
+
+ old = xzalloc(sizeof(struct num_cache)+len);
+ old->next = *cache;
+ old->num = num;
+ memcpy(old->data, data, len);
+ *cache = old;
+
+ return 0;
+}
diff --git a/login/lib/lsm.h b/login/lib/lsm.h
@@ -0,0 +1,118 @@
+/* lsm.h - header file for lib directory
+ *
+ * Copyright 2015 Rob Landley <rob@landley.net>
+ */
+
+#include <sys/xattr.h>
+
+#if CFG_TOYBOX_SELINUX
+#include <selinux/selinux.h>
+#else
+#define is_selinux_enabled() 0
+#define setfscreatecon(...) (-1)
+#define getcon(...) (-1)
+#define getfilecon(...) (-1)
+#define lgetfilecon(...) (-1)
+#define fgetfilecon(...) (-1)
+#define setfilecon(...) (-1)
+#define lsetfilecon(...) (-1)
+#define fsetfilecon(...) (-1)
+#endif
+
+#if CFG_TOYBOX_SMACK
+#include <sys/smack.h>
+#include <linux/xattr.h>
+#else
+#ifndef XATTR_NAME_SMACK
+#define XATTR_NAME_SMACK 0
+#endif
+//ssize_t fgetxattr (int fd, char *name, void *value, size_t size);
+#define smack_smackfs_path(...) (-1)
+#define smack_new_label_from_self(...) (-1)
+#define smack_new_label_from_path(...) (-1)
+#define smack_new_label_from_file(...) (-1)
+#define smack_set_label_for_self(...) (-1)
+#define smack_set_label_for_path(...) (-1)
+#define smack_set_label_for_file(...) (-1)
+#endif
+
+// This turns into "return 0" when no LSM and lets code optimize out.
+static inline int lsm_enabled(void)
+{
+ if (CFG_TOYBOX_SMACK) return !!smack_smackfs_path();
+ else return is_selinux_enabled() == 1;
+}
+
+static inline char *lsm_name(void)
+{
+ if (CFG_TOYBOX_SMACK) return "Smack";
+ if (CFG_TOYBOX_SELINUX) return "SELinux";
+
+ return "LSM";
+}
+
+// Fetch this process's lsm context
+static inline char *lsm_context(void)
+{
+ int ok = 0;
+ char *result = 0;
+
+ if (CFG_TOYBOX_SMACK) ok = smack_new_label_from_self(&result) > 0;
+ else ok = getcon(&result) == 0;
+
+ return ok ? result : strdup("?");
+}
+
+// Set default label to apply to newly created stuff (NULL to clear it)
+static inline int lsm_set_create(char *context)
+{
+ if (CFG_TOYBOX_SMACK) return smack_set_label_for_self(context);
+ else return setfscreatecon(context);
+}
+
+// Label a file, following symlinks
+static inline int lsm_set_context(char *filename, char *context)
+{
+ if (CFG_TOYBOX_SMACK)
+ return smack_set_label_for_path(filename, XATTR_NAME_SMACK, 1, context);
+ else return setfilecon(filename, context);
+}
+
+// Label a file, don't follow symlinks
+static inline int lsm_lset_context(char *filename, char *context)
+{
+ if (CFG_TOYBOX_SMACK)
+ return smack_set_label_for_path(filename, XATTR_NAME_SMACK, 0, context);
+ else return lsetfilecon(filename, context);
+}
+
+// Label a file by filehandle
+static inline int lsm_fset_context(int file, char *context)
+{
+ if (CFG_TOYBOX_SMACK)
+ return smack_set_label_for_file(file, XATTR_NAME_SMACK, context);
+ else return fsetfilecon(file, context);
+}
+
+// returns -1 in case of error or else the length of the context */
+// context can be NULL to get the length only */
+static inline int lsm_get_context(char *filename, char **context)
+{
+ if (CFG_TOYBOX_SMACK)
+ return smack_new_label_from_path(filename, XATTR_NAME_SMACK, 1, context);
+ else return getfilecon(filename, context);
+}
+
+static inline int lsm_lget_context(char *filename, char **context)
+{
+ if (CFG_TOYBOX_SMACK)
+ return smack_new_label_from_path(filename, XATTR_NAME_SMACK, 0, context);
+ else return lgetfilecon(filename, context);
+}
+
+static inline int lsm_fget_context(int file, char **context)
+{
+ if (CFG_TOYBOX_SMACK)
+ return smack_new_label_from_file(file, XATTR_NAME_SMACK, context);
+ return fgetfilecon(file, context);
+}
diff --git a/login/lib/password.c b/login/lib/password.c
@@ -0,0 +1,199 @@
+/* password.c - password read/update helper functions.
+ *
+ * Copyright 2012 Ashwini Kumar <ak.ashwini@gmail.com>
+ *
+ * TODO: cleanup
+ */
+
+#include "toys.h"
+#include <time.h>
+
+// generate ID prefix and random salt for given encryption algorithm.
+int get_salt(char *salt, char *algo)
+{
+ struct {
+ char *type, id, len;
+ } al[] = {{"des", 0, 2}, {"md5", 1, 8}, {"sha256", 5, 16}, {"sha512", 6, 16}};
+ int i;
+
+ for (i = 0; i < ARRAY_LEN(al); i++) {
+ if (!strcmp(algo, al[i].type)) {
+ int len = al[i].len;
+ char *s = salt;
+
+ if (al[i].id) s += sprintf(s, "$%c$", '0'+al[i].id);
+
+ // Read appropriate number of random bytes for salt
+ xgetrandom(libbuf, ((len*6)+7)/8, 0);
+
+ // Grab 6 bit chunks and convert to characters in ./0-9a-zA-Z
+ for (i=0; i<len; i++) {
+ int bitpos = i*6, bits = bitpos/8;
+
+ bits = ((libbuf[i]+(libbuf[i+1]<<8)) >> (bitpos&7)) & 0x3f;
+ bits += 46;
+ if (bits > 57) bits += 7;
+ if (bits > 90) bits += 6;
+
+ s[i] = bits;
+ }
+ salt[len] = 0;
+
+ return s-salt;
+ }
+ }
+
+ return -1;
+}
+
+// Prompt with mesg, read password into buf, return 0 for success 1 for fail
+int read_password(char *buf, int buflen, char *mesg)
+{
+ struct termios oldtermio;
+ struct sigaction sa, oldsa;
+ int i, ret = 1;
+
+ // NOP signal handler to return from the read. Use sigaction() instead
+ // of xsignal() because we want to restore the old handler afterwards.
+ memset(&sa, 0, sizeof(sa));
+ sa.sa_handler = generic_signal;
+ sigaction(SIGINT, &sa, &oldsa);
+
+ tcflush(0, TCIFLUSH);
+ xset_terminal(0, 1, 0, &oldtermio);
+
+ xprintf("%s", mesg);
+
+ for (i=0; i < buflen-1; i++) {
+ if ((ret = read(0, buf+i, 1)) < 0 || (!ret && !i)) {
+ i = 0;
+ ret = 1;
+
+ break;
+ } else if (!ret || buf[i] == '\n' || buf[i] == '\r') {
+ ret = 0;
+
+ break;
+ } else if (buf[i] == 8 || buf[i] == 127) i -= i ? 2 : 1;
+ }
+
+ // Restore terminal/signal state, terminate string
+ sigaction(SIGINT, &oldsa, NULL);
+ tcsetattr(0, TCSANOW, &oldtermio);
+ buf[i] = 0;
+ xputc('\n');
+
+ return ret;
+}
+
+static char *get_nextcolon(char *line, int cnt)
+{
+ while (cnt--) {
+ if (!(line = strchr(line, ':'))) error_exit("Invalid Entry\n");
+ line++; //jump past the colon
+ }
+ return line;
+}
+
+/*update_password is used by multiple utilities to update /etc/passwd,
+ * /etc/shadow, /etc/group and /etc/gshadow files,
+ * which are used as user, group databeses
+ * entry can be
+ * 1. encrypted password, when updating user password.
+ * 2. complete entry for user details, when creating new user
+ * 3. group members comma',' separated list, when adding user to group
+ * 4. complete entry for group details, when creating new group
+ * 5. entry = NULL, delete the named entry user/group
+ */
+int update_password(char *filename, char* username, char* entry)
+{
+ char *filenamesfx = NULL, *namesfx = NULL, *shadow = NULL,
+ *sfx = NULL, *line = NULL;
+ FILE *exfp, *newfp;
+ int ret = -1, found = 0;
+ struct flock lock;
+
+ shadow = strstr(filename, "shadow");
+ filenamesfx = xmprintf("%s+", filename);
+ sfx = strchr(filenamesfx, '+');
+
+ exfp = fopen(filename, "r+");
+ if (!exfp) {
+ perror_msg("Couldn't open file %s",filename);
+ goto free_storage;
+ }
+
+ *sfx = '-';
+ unlink(filenamesfx);
+ ret = link(filename, filenamesfx);
+ if (ret < 0) error_msg("can't create backup file");
+
+ *sfx = '+';
+ lock.l_type = F_WRLCK;
+ lock.l_whence = SEEK_SET;
+ lock.l_start = 0;
+ lock.l_len = 0;
+
+ ret = fcntl(fileno(exfp), F_SETLK, &lock);
+ if (ret < 0) perror_msg("Couldn't lock file %s",filename);
+
+ lock.l_type = F_UNLCK; //unlocking at a later stage
+
+ newfp = fopen(filenamesfx, "w+");
+ if (!newfp) {
+ error_msg("couldn't open file for writing");
+ ret = -1;
+ fclose(exfp);
+ goto free_storage;
+ }
+
+ ret = 0;
+ namesfx = xmprintf("%s:",username);
+ while ((line = get_line(fileno(exfp))) != NULL)
+ {
+ if (strncmp(line, namesfx, strlen(namesfx)))
+ fprintf(newfp, "%s\n", line);
+ else if (entry) {
+ char *current_ptr = NULL;
+
+ found = 1;
+ if (!strcmp(toys.which->name, "passwd")) {
+ fprintf(newfp, "%s%s:",namesfx, entry);
+ current_ptr = get_nextcolon(line, 2); //past passwd
+ if (shadow) {
+ fprintf(newfp, "%u:",(unsigned)(time(NULL))/(24*60*60));
+ current_ptr = get_nextcolon(current_ptr, 1);
+ fprintf(newfp, "%s\n",current_ptr);
+ } else fprintf(newfp, "%s\n",current_ptr);
+ } else if (!strcmp(toys.which->name, "groupadd") ||
+ !strcmp(toys.which->name, "addgroup") ||
+ !strcmp(toys.which->name, "delgroup") ||
+ !strcmp(toys.which->name, "groupdel")){
+ current_ptr = get_nextcolon(line, 3); //past gid/admin list
+ *current_ptr = '\0';
+ fprintf(newfp, "%s", line);
+ fprintf(newfp, "%s\n", entry);
+ }
+ }
+ free(line);
+ }
+ free(namesfx);
+ if (!found && entry) fprintf(newfp, "%s\n", entry);
+ fcntl(fileno(exfp), F_SETLK, &lock);
+ fclose(exfp);
+
+ errno = 0;
+ fflush(newfp);
+ fsync(fileno(newfp));
+ fclose(newfp);
+ rename(filenamesfx, filename);
+ if (errno) {
+ perror_msg("File Writing/Saving failed: ");
+ unlink(filenamesfx);
+ ret = -1;
+ }
+
+free_storage:
+ free(filenamesfx);
+ return ret;
+}
diff --git a/login/lib/pending.h b/login/lib/pending.h
@@ -0,0 +1,14 @@
+// pending.h - header for pending.c
+
+// password.c
+#define MAX_SALT_LEN 20 //3 for id, 16 for key, 1 for '\0'
+int read_password(char * buff, int buflen, char* mesg);
+int update_password(char *filename, char* username, char* encrypted);
+
+// lib.c
+// These should be switched to posix-2008 getline() and getdelim()
+char *get_rawline(int fd, long *plen, char end);
+char *get_line(int fd);
+
+
+// TODO this goes away when lib/password.c cleaned up
diff --git a/login/lib/portability.c b/login/lib/portability.c
@@ -0,0 +1,107 @@
+/* portability.c - code to workaround the deficiencies of various platforms.
+ *
+ * Copyright 2012 Rob Landley <rob@landley.net>
+ * Copyright 2012 Georgi Chorbadzhiyski <gf@unixsol.org>
+ */
+
+#include "toys.h"
+
+// We can't fork() on nommu systems, and vfork() requires an exec() or exit()
+// before resuming the parent (because they share a heap until then). And no,
+// we can't implement our own clone() call that does the equivalent of fork()
+// because nommu heaps use physical addresses so if we copy the heap all our
+// pointers are wrong. (You need an mmu in order to map two heaps to the same
+// address range without interfering with each other.) In the absence of
+// a portable way to tell malloc() to start a new heap without freeing the old
+// one, you pretty much need the exec().)
+
+// So we exec ourselves (via /proc/self/exe, if anybody knows a way to
+// re-exec self without depending on the filesystem, I'm all ears),
+// and use the arguments to signal reentry.
+
+#if CFG_TOYBOX_FORK
+pid_t xfork(void)
+{
+ pid_t pid = fork();
+
+ if (pid < 0) perror_exit("fork");
+
+ return pid;
+}
+#endif
+
+void xgetrandom(void *buf, unsigned buflen, unsigned flags)
+{
+ int fd;
+
+#if CFG_TOYBOX_GETRANDOM
+ if (buflen == getrandom(buf, buflen, flags)) return;
+ if (!CFG_TOYBOX_ON_ANDROID || errno!=ENOSYS) perror_exit("getrandom");
+#endif
+
+ fd = xopen(flags ? "/dev/random" : "/dev/urandom", O_RDONLY);
+ xreadall(fd, buf, buflen);
+ close(fd);
+}
+
+#if defined(__APPLE__)
+ssize_t getdelim(char **linep, size_t *np, int delim, FILE *stream)
+{
+ int ch;
+ size_t new_len;
+ ssize_t i = 0;
+ char *line, *new_line;
+
+ // Invalid input
+ if (!linep || !np) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ if (*linep == NULL || *np == 0) {
+ *np = 1024;
+ *linep = calloc(1, *np);
+ if (*linep == NULL) return -1;
+ }
+ line = *linep;
+
+ while ((ch = getc(stream)) != EOF) {
+ if (i > *np) {
+ // Need more space
+ new_len = *np + 1024;
+ new_line = realloc(*linep, new_len);
+ if (!new_line) return -1;
+ *np = new_len;
+ line = *linep = new_line;
+ }
+
+ line[i++] = ch;
+ if (ch == delim) break;
+ }
+
+ if (i > *np) {
+ // Need more space
+ new_len = i + 2;
+ new_line = realloc(*linep, new_len);
+ if (!new_line) return -1;
+ *np = new_len;
+ line = *linep = new_line;
+ }
+ line[i] = '\0';
+
+ return i > 0 ? i : -1;
+}
+
+ssize_t getline(char **linep, size_t *np, FILE *stream)
+{
+ return getdelim(linep, np, '\n', stream);
+}
+
+extern char **environ;
+
+int clearenv(void)
+{
+ *environ = NULL;
+ return 0;
+}
+#endif
diff --git a/login/lib/portability.h b/login/lib/portability.h
@@ -0,0 +1,301 @@
+// Workarounds for horrible build environment idiosyncrasies.
+
+// Instead of polluting the code with strange #ifdefs to work around bugs
+// in specific compiler, library, or OS versions, localize all that here
+// and in portability.c
+
+// For musl
+#define _ALL_SOURCE
+
+// Test for gcc (using compiler builtin #define)
+
+#ifdef __GNUC__
+#define noreturn __attribute__((noreturn))
+#define printf_format __attribute__((format(printf, 1, 2)))
+#else
+#define noreturn
+#define printf_format
+#endif
+
+// Always use long file support.
+#define _FILE_OFFSET_BITS 64
+
+// This isn't in the spec, but it's how we determine what libc we're using.
+
+#include <features.h>
+
+// Types various replacement prototypes need
+#include <sys/types.h>
+
+// Various constants old build environments might not have even if kernel does
+
+#ifndef AT_FDCWD
+#define AT_FDCWD -100
+#endif
+
+#ifndef AT_SYMLINK_NOFOLLOW
+#define AT_SYMLINK_NOFOLLOW 0x100
+#endif
+
+#ifndef AT_REMOVEDIR
+#define AT_REMOVEDIR 0x200
+#endif
+
+#ifndef RLIMIT_RTTIME
+#define RLIMIT_RTTIME 15
+#endif
+
+// Introduced in Linux 3.1
+#ifndef SEEK_DATA
+#define SEEK_DATA 3
+#endif
+#ifndef SEEK_HOLE
+#define SEEK_HOLE 4
+#endif
+
+// We don't define GNU_dammit because we're not part of the gnu project, and
+// don't want to get any FSF on us. Unfortunately glibc (gnu libc)
+// won't give us Linux syscall wrappers without claiming to be part of the
+// gnu project (because Stallman's "GNU owns Linux" revisionist history
+// crusade includes the kernel, even though Linux was inspired by Minix).
+
+// We use most non-posix Linux syscalls directly through the syscall() wrapper,
+// but even many posix-2008 functions aren't provided by glibc unless you
+// claim it's in the name of Gnu.
+
+#if defined(__GLIBC__)
+// "Function prototypes shall be provided." but aren't.
+// http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/unistd.h.html
+char *crypt(const char *key, const char *salt);
+
+// According to posix, #include header, get a function definition. But glibc...
+// http://pubs.opengroup.org/onlinepubs/9699919799/functions/wcwidth.html
+#include <wchar.h>
+int wcwidth(wchar_t wc);
+
+// see http://pubs.opengroup.org/onlinepubs/9699919799/functions/strptime.html
+#include <time.h>
+char *strptime(const char *buf, const char *format, struct tm *tm);
+
+// They didn't like posix basename so they defined another function with the
+// same name and if you include libgen.h it #defines basename to something
+// else (where they implemented the real basename), and that define breaks
+// the table entry for the basename command. They didn't make a new function
+// with a different name for their new behavior because gnu.
+//
+// Solution: don't use their broken header, provide an inline to redirect the
+// correct name to the broken name.
+
+char *dirname(char *path);
+char *__xpg_basename(char *path);
+static inline char *basename(char *path) { return __xpg_basename(path); }
+
+// When building under obsolete glibc (Ubuntu 8.04-ish), hold its hand a bit.
+#if __GLIBC__ == 2 && __GLIBC_MINOR__ < 10
+#define fstatat fstatat64
+int fstatat64(int dirfd, const char *pathname, void *buf, int flags);
+int readlinkat(int dirfd, const char *pathname, char *buf, size_t bufsiz);
+char *stpcpy(char *dest, const char *src);
+#include <sys/stat.h>
+int fchmodat(int dirfd, const char *pathname, mode_t mode, int flags);
+int openat(int dirfd, const char *pathname, int flags, ...);
+#include <dirent.h>
+DIR *fdopendir(int fd);
+#include <unistd.h>
+int fchownat(int dirfd, const char *pathname,
+ uid_t owner, gid_t group, int flags);
+int isblank(int c);
+int unlinkat(int dirfd, const char *pathname, int flags);
+#include <stdio.h>
+ssize_t getdelim(char **lineptr, size_t *n, int delim, FILE *stream);
+
+// Straight from posix-2008, things old glibc had but didn't prototype
+
+int faccessat(int fd, const char *path, int amode, int flag);
+int linkat(int fd1, const char *path1, int fd2, const char *path2, int flag);
+int mkdirat(int fd, const char *path, mode_t mode);
+int symlinkat(const char *path1, int fd, const char *path2);
+int mknodat(int fd, const char *path, mode_t mode, dev_t dev);
+#include <sys/time.h>
+int futimens(int fd, const struct timespec times[2]);
+int utimensat(int fd, const char *path, const struct timespec times[2], int flag);
+
+#ifndef MNT_DETACH
+#define MNT_DETACH 2
+#endif
+#endif // Old glibc
+
+#endif // glibc in general
+
+#if !defined(__GLIBC__)
+// POSIX basename.
+#include <libgen.h>
+#endif
+
+// Work out how to do endianness
+
+#ifndef __APPLE__
+#include <byteswap.h>
+#include <endian.h>
+
+#if __BYTE_ORDER == __BIG_ENDIAN
+#define IS_BIG_ENDIAN 1
+#else
+#define IS_BIG_ENDIAN 0
+#endif
+
+int clearenv(void);
+#else
+
+#ifdef __BIG_ENDIAN__
+#define IS_BIG_ENDIAN 1
+#else
+#define IS_BIG_ENDIAN 0
+#endif
+
+#endif
+
+#if IS_BIG_ENDIAN
+#define IS_LITTLE_ENDIAN 0
+#define SWAP_BE16(x) (x)
+#define SWAP_BE32(x) (x)
+#define SWAP_BE64(x) (x)
+#define SWAP_LE16(x) bswap_16(x)
+#define SWAP_LE32(x) bswap_32(x)
+#define SWAP_LE64(x) bswap_64(x)
+#else
+#define IS_LITTLE_ENDIAN 1
+#define SWAP_BE16(x) bswap_16(x)
+#define SWAP_BE32(x) bswap_32(x)
+#define SWAP_BE64(x) bswap_64(x)
+#define SWAP_LE16(x) (x)
+#define SWAP_LE32(x) (x)
+#define SWAP_LE64(x) (x)
+#endif
+
+#if defined(__APPLE__) \
+ || (defined(__GLIBC__) && __GLIBC__ == 2 && __GLIBC_MINOR__ < 10)
+ssize_t getdelim(char **lineptr, size_t *n, int delim, FILE *stream);
+ssize_t getline(char **lineptr, size_t *n, FILE *stream);
+#endif
+
+// Linux headers not listed by POSIX or LSB
+#include <sys/mount.h>
+#include <sys/swap.h>
+
+// Android is missing some headers and functions
+// "generated/config.h" is included first
+#if CFG_TOYBOX_SHADOW
+#include <shadow.h>
+#endif
+#if CFG_TOYBOX_UTMPX
+#include <utmpx.h>
+#else
+struct utmpx {int ut_type;};
+#define USER_PROCESS 0
+static inline struct utmpx *getutxent(void) {return 0;}
+static inline void setutxent(void) {;}
+static inline void endutxent(void) {;}
+#endif
+
+// Some systems don't define O_NOFOLLOW, and it varies by architecture, so...
+#include <fcntl.h>
+#ifndef O_NOFOLLOW
+#define O_NOFOLLOW 0
+#endif
+#ifndef O_NOATIME
+#define O_NOATIME 01000000
+#endif
+#ifndef O_CLOEXEC
+#define O_CLOEXEC 02000000
+#endif
+#ifndef O_PATH
+#define O_PATH 010000000
+#endif
+#ifndef SCHED_RESET_ON_FORK
+#define SCHED_RESET_ON_FORK (1<<30)
+#endif
+
+// Glibc won't give you linux-kernel constants unless you say "no, a BUD lite"
+// even though linux has nothing to do with the FSF and never has.
+#ifndef F_SETPIPE_SZ
+#define F_SETPIPE_SZ 1031
+#endif
+
+#ifndef F_GETPIPE_SZ
+#define F_GETPIPE_SZ 1032
+#endif
+
+#if defined(__SIZEOF_DOUBLE__) && defined(__SIZEOF_LONG__) \
+ && __SIZEOF_DOUBLE__ <= __SIZEOF_LONG__
+typedef double FLOAT;
+#else
+typedef float FLOAT;
+#endif
+
+#ifndef __uClinux__
+pid_t xfork(void);
+#endif
+
+//#define strncpy(...) @@strncpyisbadmmkay@@
+//#define strncat(...) @@strncatisbadmmkay@@
+
+// Support building the Android tools on glibc, so hermetic AOSP builds can
+// use toybox before they're ready to switch to host bionic.
+#ifdef __BIONIC__
+#include <android/log.h>
+#include <sys/system_properties.h>
+#else
+typedef enum android_LogPriority {
+ ANDROID_LOG_UNKNOWN = 0,
+ ANDROID_LOG_DEFAULT,
+ ANDROID_LOG_VERBOSE,
+ ANDROID_LOG_DEBUG,
+ ANDROID_LOG_INFO,
+ ANDROID_LOG_WARN,
+ ANDROID_LOG_ERROR,
+ ANDROID_LOG_FATAL,
+ ANDROID_LOG_SILENT,
+} android_LogPriority;
+static inline int __android_log_write(int pri, const char *tag, const char *msg)
+{
+ return -1;
+}
+#define PROP_VALUE_MAX 92
+static inline int __system_property_set(const char *key, const char *value)
+{
+ return -1;
+}
+#endif
+
+// libcutils is in AOSP but not Android NDK r18
+#if defined(__BIONIC__) && !defined(__ANDROID_NDK__)
+#include <cutils/sched_policy.h>
+#else
+static inline int get_sched_policy(int tid, void *policy) {return 0;}
+static inline char *get_sched_policy_name(int policy) {return "unknown";}
+#endif
+
+// Android NDKv18 has liblog.so but not liblog.c for static builds,
+// stub it out for now.
+#ifdef __ANDROID_NDK__
+#define __android_log_write(a, b, c) (0)
+#endif
+
+#ifndef SYSLOG_NAMES
+typedef struct {char *c_name; int c_val;} CODE;
+extern CODE prioritynames[], facilitynames[];
+#endif
+
+#if CFG_TOYBOX_GETRANDOM
+#include <sys/random.h>
+#endif
+void xgetrandom(void *buf, unsigned len, unsigned flags);
+
+// Android's bionic libc doesn't have confstr.
+#ifdef __BIONIC__
+#define _CS_PATH 0
+#define _CS_V7_ENV 1
+#include <string.h>
+static inline void confstr(int a, char *b, int c) {strcpy(b, a ? "POSIXLY_CORRECT=1" : "/bin:/usr/bin");}
+#endif
diff --git a/login/lib/toyflags.h b/login/lib/toyflags.h
@@ -0,0 +1,38 @@
+/* Flags values for the third argument of NEWTOY()
+ *
+ * Included from both main.c (runs in toys.h context) and scripts/install.c
+ * (which may build on crazy things like macosx when cross compiling).
+ */
+
+// Flags describing command behavior.
+
+// Where to install (toybox --long outputs absolute paths to commands)
+// If no location bits set, command not listed in "toybox" command's output.
+#define TOYFLAG_USR (1<<0)
+#define TOYFLAG_BIN (1<<1)
+#define TOYFLAG_SBIN (1<<2)
+#define TOYMASK_LOCATION ((1<<4)-1)
+
+// This is a shell built-in function, running in the same process context.
+#define TOYFLAG_NOFORK (1<<4)
+
+// Start command with a umask of 0 (saves old umask in this.old_umask)
+#define TOYFLAG_UMASK (1<<5)
+
+// This command runs as root.
+#define TOYFLAG_STAYROOT (1<<6) // Don't drop suid root before running cmd_main
+#define TOYFLAG_NEEDROOT (1<<7) // Refuse to run if real uid != 0
+#define TOYFLAG_ROOTONLY (TOYFLAG_STAYROOT|TOYFLAG_NEEDROOT)
+
+// Call setlocale to listen to environment variables.
+// This invalidates sprintf("%.*s", size, string) as a valid length constraint.
+#define TOYFLAG_LOCALE (1<<8)
+
+// Suppress default --help processing
+#define TOYFLAG_NOHELP (1<<9)
+
+#if CFG_TOYBOX_PEDANTIC_ARGS
+#define NO_ARGS ">0"
+#else
+#define NO_ARGS 0
+#endif
diff --git a/login/lib/tty.c b/login/lib/tty.c
@@ -0,0 +1,277 @@
+/* interestingtimes.c - cursor control
+ *
+ * Copyright 2015 Rob Landley <rob@landley.net>
+ */
+
+#include "toys.h"
+
+int tty_fd(void)
+{
+ int i, j;
+
+ for (i = 0; i<3; i++) if (isatty(j = (i+1)%3)) return j;
+
+ return notstdio(open("/dev/tty", O_RDWR));
+}
+
+// Quick and dirty query size of terminal, doesn't do ANSI probe fallback.
+// set x=80 y=25 before calling to provide defaults. Returns 0 if couldn't
+// determine size.
+
+int terminal_size(unsigned *xx, unsigned *yy)
+{
+ struct winsize ws;
+ unsigned i, x = 0, y = 0;
+ char *s;
+
+ // stdin, stdout, stderr
+ for (i=0; i<3; i++) {
+ memset(&ws, 0, sizeof(ws));
+ if (isatty(i) && !ioctl(i, TIOCGWINSZ, &ws)) {
+ if (ws.ws_col) x = ws.ws_col;
+ if (ws.ws_row) y = ws.ws_row;
+
+ break;
+ }
+ }
+ s = getenv("COLUMNS");
+ if (s) sscanf(s, "%u", &x);
+ s = getenv("LINES");
+ if (s) sscanf(s, "%u", &y);
+
+ // Never return 0 for either value, leave it at default instead.
+ if (xx && x) *xx = x;
+ if (yy && y) *yy = y;
+
+ return x || y;
+}
+
+// Query terminal size, sending ANSI probe if necesary. (Probe queries xterm
+// size through serial connection, when local TTY doesn't know but remote does.)
+// Returns 0 if ANSI probe sent, 1 if size determined from tty or environment
+
+int terminal_probesize(unsigned *xx, unsigned *yy)
+{
+ if (terminal_size(xx, yy) && (!xx || *xx) && (!yy || *yy)) return 1;
+
+ // Send probe: bookmark cursor position, jump to bottom right,
+ // query position, return cursor to bookmarked position.
+ xprintf("\033[s\033[999C\033[999B\033[6n\033[u");
+
+ return 0;
+}
+
+// Wrapper that parses results from ANSI probe to update screensize.
+// Otherwise acts like scan_key()
+int scan_key_getsize(char *scratch, int miliwait, unsigned *xx, unsigned *yy)
+{
+ int key;
+
+ if (512&(key = scan_key(scratch, miliwait))) {
+ if (key>0) {
+ if (xx) *xx = (key>>10)&1023;
+ if (yy) *yy = (key>>20)&1023;
+
+ return -3;
+ }
+ }
+
+ return key;
+}
+
+// Reset terminal to known state, saving copy of old state if old != NULL.
+int set_terminal(int fd, int raw, int speed, struct termios *old)
+{
+ struct termios termio;
+ int i = tcgetattr(fd, &termio);
+
+ // Fetch local copy of old terminfo, and copy struct contents to *old if set
+ if (i) return i;
+ if (old) *old = termio;
+
+ // the following are the bits set for an xterm. Linux text mode TTYs by
+ // default add two additional bits that only matter for serial processing
+ // (turn serial line break into an interrupt, and XON/XOFF flow control)
+
+ // Any key unblocks output, swap CR and NL on input
+ termio.c_iflag = IXANY|ICRNL|INLCR;
+ if (toys.which->flags & TOYFLAG_LOCALE) termio.c_iflag |= IUTF8;
+
+ // Output appends CR to NL, does magic undocumented postprocessing
+ termio.c_oflag = ONLCR|OPOST;
+
+ // Leave serial port speed alone
+ // termio.c_cflag = C_READ|CS8|EXTB;
+
+ // Generate signals, input entire line at once, echo output
+ // erase, line kill, escape control characters with ^
+ // erase line char at a time
+ // "extended" behavior: ctrl-V quotes next char, ctrl-R reprints unread chars,
+ // ctrl-W erases word
+ termio.c_lflag = ISIG|ICANON|ECHO|ECHOE|ECHOK|ECHOCTL|ECHOKE|IEXTEN;
+
+ if (raw) cfmakeraw(&termio);
+
+ if (speed) {
+ int i, speeds[] = {50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400,
+ 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800,
+ 500000, 576000, 921600, 1000000, 1152000, 1500000, 2000000,
+ 2500000, 3000000, 3500000, 4000000};
+
+ // Find speed in table, adjust to constant
+ for (i = 0; i < ARRAY_LEN(speeds); i++) if (speeds[i] == speed) break;
+ if (i == ARRAY_LEN(speeds)) error_exit("unknown speed: %d", speed);
+ cfsetspeed(&termio, i+1+4081*(i>15));
+ }
+
+ return tcsetattr(fd, TCSAFLUSH, &termio);
+}
+
+void xset_terminal(int fd, int raw, int speed, struct termios *old)
+{
+ if (-1 != set_terminal(fd, raw, speed, old)) return;
+
+ sprintf(libbuf, "/proc/self/fd/%d", fd);
+ libbuf[readlink0(libbuf, libbuf, sizeof(libbuf))] = 0;
+ perror_exit("tcsetattr %s", libbuf);
+}
+
+struct scan_key_list {
+ char *name, *seq;
+} static const scan_key_list[] = TAGGED_ARRAY(KEY,
+ // up down right left pgup pgdn home end ins
+ {"UP", "\033[A"}, {"DOWN", "\033[B"}, {"RIGHT", "\033[C"}, {"LEFT", "\033[D"},
+ {"PGUP", "\033[5~"}, {"PGDN", "\033[6~"}, {"HOME", "\033OH"},
+ {"END", "\033OF"}, {"INSERT", "\033[2~"},
+
+ {"F1", "\033OP"}, {"F2", "\033OQ"}, {"F3", "\033OR"}, {"F4", "\033OS"},
+ {"F5", "\033[15~"}, {"F6", "\033[17~"}, {"F7", "\033[18~"},
+ {"F8", "\033[19~"}, {"F9", "\033[20~"},
+
+ {"SUP", "\033[1;2A"}, {"AUP", "\033[1;3A"}, {"CUP", "\033[1;5A"},
+ {"SDOWN", "\033[1;2B"}, {"ADOWN", "\033[1;3B"}, {"CDOWN", "\033[1;5B"},
+ {"SRIGHT", "\033[1;2C"}, {"ARIGHT", "\033[1;3C"}, {"CRIGHT", "\033[1;5C"},
+ {"SLEFT", "\033[1;2D"}, {"ALEFT", "\033[1;3D"}, {"CLEFT", "\033[1;5D"},
+
+ {"SF1", "\033O1;2P"}, {"AF1", "\033O1;3P"}, {"CF1", "\033[1;5P"}
+);
+
+// Scan stdin for a keypress, parsing known escape sequences
+// Blocks for miliwait miliseconds, none 0, forever if -1
+// Returns: 0-255=literal, -1=EOF, -2=TIMEOUT, 256-...=index into scan_key_list
+// >512 is x<<9+y<<21
+// scratch space is necessary because last char of !seq could start new seq
+// Zero out first byte of scratch before first call to scan_key
+// block=0 allows fetching multiple characters before updating display
+int scan_key(char *scratch, int miliwait)
+{
+ struct pollfd pfd;
+ int maybe, i, j;
+ char *test;
+
+ for (;;) {
+ pfd.fd = 0;
+ pfd.events = POLLIN;
+ pfd.revents = 0;
+
+ maybe = 0;
+ if (*scratch) {
+ int pos[6];
+ unsigned x, y;
+
+ // Check for return from terminal size probe
+ memset(pos, 0, 6*sizeof(int));
+ scratch[(1+*scratch)&15] = 0;
+ sscanf(scratch+1, "\033%n[%n%3u%n;%n%3u%nR%n", pos, pos+1, &y,
+ pos+2, pos+3, &x, pos+4, pos+5);
+ if (pos[5]) {
+ // Recognized X/Y position, consume and return
+ *scratch = 0;
+ return 512+(x<<10)+(y<<20);
+ } else for (i=0; i<6; i++) if (pos[i]==*scratch) maybe = 1;
+
+ // Check sequences
+ for (i = 0; i<ARRAY_LEN(scan_key_list); i++) {
+ test = scan_key_list[i].seq;
+ for (j = 0; j<*scratch; j++) if (scratch[j+1] != test[j]) break;
+ if (j == *scratch) {
+ maybe = 1;
+ if (!test[j]) {
+ // We recognized current sequence: consume and return
+ *scratch = 0;
+ return 256+i;
+ }
+ }
+ }
+
+ // If current data can't be a known sequence, return next raw char
+ if (!maybe) break;
+ }
+
+ // Need more data to decide
+
+ // 30 miliseconds is about the gap between characters at 300 baud
+ if (maybe || miliwait != -1)
+ if (!xpoll(&pfd, 1, maybe ? 30 : miliwait)) break;
+
+ // Read 1 byte so we don't overshoot sequence match. (We can deviate
+ // and fail to match, but match consumes entire buffer.)
+ if (toys.signal>0 || 1 != read(0, scratch+1+*scratch, 1))
+ return (toys.signal>0) ? -3 : -1;
+ ++*scratch;
+ }
+
+ // Was not a sequence
+ if (!*scratch) return -2;
+ i = scratch[1];
+ if (--*scratch) memmove(scratch+1, scratch+2, *scratch);
+
+ return i;
+}
+
+void tty_esc(char *s)
+{
+ printf("\033[%s", s);
+}
+
+void tty_jump(int x, int y)
+{
+ char s[32];
+
+ sprintf(s, "%d;%dH", y+1, x+1);
+ tty_esc(s);
+}
+
+void tty_reset(void)
+{
+ set_terminal(0, 0, 0, 0);
+ tty_esc("?25h");
+ tty_esc("0m");
+ tty_jump(0, 999);
+ tty_esc("K");
+ fflush(0);
+}
+
+// If you call set_terminal(), use sigatexit(tty_sigreset);
+void tty_sigreset(int i)
+{
+ tty_reset();
+ _exit(i ? 128+i : 0);
+}
+
+void start_redraw(unsigned *width, unsigned *height)
+{
+ // If never signaled, do raw mode setup.
+ if (!toys.signal) {
+ *width = 80;
+ *height = 25;
+ set_terminal(0, 1, 0, 0);
+ sigatexit(tty_sigreset);
+ xsignal(SIGWINCH, generic_signal);
+ }
+ if (toys.signal != -1) {
+ toys.signal = -1;
+ terminal_probesize(width, height);
+ }
+ xprintf("\033[H\033[J");
+}
diff --git a/login/lib/xwrap.c b/login/lib/xwrap.c
@@ -0,0 +1,872 @@
+/* xwrap.c - wrappers around existing library functions.
+ *
+ * Functions with the x prefix are wrappers that either succeed or kill the
+ * program with an error message, but never return failure. They usually have
+ * the same arguments and return value as the function they wrap.
+ *
+ * Copyright 2006 Rob Landley <rob@landley.net>
+ */
+
+#include "toys.h"
+
+// strcpy and strncat with size checking. Size is the total space in "dest",
+// including null terminator. Exit if there's not enough space for the string
+// (including space for the null terminator), because silently truncating is
+// still broken behavior. (And leaving the string unterminated is INSANE.)
+void xstrncpy(char *dest, char *src, size_t size)
+{
+ if (strlen(src)+1 > size) error_exit("'%s' > %ld bytes", src, (long)size);
+ strcpy(dest, src);
+}
+
+void xstrncat(char *dest, char *src, size_t size)
+{
+ long len = strlen(dest);
+
+ if (len+strlen(src)+1 > size)
+ error_exit("'%s%s' > %ld bytes", dest, src, (long)size);
+ strcpy(dest+len, src);
+}
+
+// We replaced exit(), _exit(), and atexit() with xexit(), _xexit(), and
+// sigatexit(). This gives _xexit() the option to siglongjmp(toys.rebound, 1)
+// instead of exiting, lets xexit() report stdout flush failures to stderr
+// and change the exit code to indicate error, lets our toys.exit function
+// change happen for signal exit paths and lets us remove the functions
+// after we've called them.
+
+void _xexit(void)
+{
+ if (toys.rebound) siglongjmp(*toys.rebound, 1);
+
+ _exit(toys.exitval);
+}
+
+void xexit(void)
+{
+ // Call toys.xexit functions in reverse order added.
+ while (toys.xexit) {
+ struct arg_list *al = llist_pop(&toys.xexit);
+
+ // typecast xexit->arg to a function pointer, then call it using invalid
+ // signal 0 to let signal handlers tell actual signal from regular exit.
+ ((void (*)(int))(al->arg))(0);
+
+ free(al);
+ }
+ if (fflush(NULL) || ferror(stdout))
+ if (!toys.exitval) perror_msg("write");
+ _xexit();
+}
+
+void *xmmap(void *addr, size_t length, int prot, int flags, int fd, off_t off)
+{
+ void *ret = mmap(addr, length, prot, flags, fd, off);
+ if (ret == MAP_FAILED) perror_exit("mmap");
+ return ret;
+}
+
+// Die unless we can allocate memory.
+void *xmalloc(size_t size)
+{
+ void *ret = malloc(size);
+ if (!ret) error_exit("xmalloc(%ld)", (long)size);
+
+ return ret;
+}
+
+// Die unless we can allocate prezeroed memory.
+void *xzalloc(size_t size)
+{
+ void *ret = xmalloc(size);
+ memset(ret, 0, size);
+ return ret;
+}
+
+// Die unless we can change the size of an existing allocation, possibly
+// moving it. (Notice different arguments from libc function.)
+void *xrealloc(void *ptr, size_t size)
+{
+ ptr = realloc(ptr, size);
+ if (!ptr) error_exit("xrealloc");
+
+ return ptr;
+}
+
+// Die unless we can allocate a copy of this many bytes of string.
+char *xstrndup(char *s, size_t n)
+{
+ char *ret = strndup(s, ++n);
+
+ if (!ret) error_exit("xstrndup");
+ ret[--n] = 0;
+
+ return ret;
+}
+
+// Die unless we can allocate a copy of this string.
+char *xstrdup(char *s)
+{
+ return xstrndup(s, strlen(s));
+}
+
+void *xmemdup(void *s, long len)
+{
+ void *ret = xmalloc(len);
+ memcpy(ret, s, len);
+
+ return ret;
+}
+
+// Die unless we can allocate enough space to sprintf() into.
+char *xmprintf(char *format, ...)
+{
+ va_list va, va2;
+ int len;
+ char *ret;
+
+ va_start(va, format);
+ va_copy(va2, va);
+
+ // How long is it?
+ len = vsnprintf(0, 0, format, va);
+ len++;
+ va_end(va);
+
+ // Allocate and do the sprintf()
+ ret = xmalloc(len);
+ vsnprintf(ret, len, format, va2);
+ va_end(va2);
+
+ return ret;
+}
+
+void xprintf(char *format, ...)
+{
+ va_list va;
+ va_start(va, format);
+
+ vprintf(format, va);
+ va_end(va);
+ if (fflush(stdout) || ferror(stdout)) perror_exit("write");
+}
+
+void xputs(char *s)
+{
+ if (EOF == puts(s) || fflush(stdout) || ferror(stdout)) perror_exit("write");
+}
+
+void xputc(char c)
+{
+ if (EOF == fputc(c, stdout) || fflush(stdout) || ferror(stdout))
+ perror_exit("write");
+}
+
+void xflush(void)
+{
+ if (fflush(stdout) || ferror(stdout)) perror_exit("write");;
+}
+
+// This is called through the XVFORK macro because parent/child of vfork
+// share a stack, so child returning from a function would stomp the return
+// address parent would need. Solution: make vfork() an argument so processes
+// diverge before function gets called.
+pid_t __attribute__((returns_twice)) xvforkwrap(pid_t pid)
+{
+ if (pid == -1) perror_exit("vfork");
+
+ // Signal to xexec() and friends that we vforked so can't recurse
+ toys.stacktop = 0;
+
+ return pid;
+}
+
+// Die unless we can exec argv[] (or run builtin command). Note that anything
+// with a path isn't a builtin, so /bin/sh won't match the builtin sh.
+void xexec(char **argv)
+{
+ // Only recurse to builtin when we have multiplexer and !vfork context.
+ if (CFG_TOYBOX && !CFG_TOYBOX_NORECURSE && toys.stacktop) toy_exec(argv);
+ execvp(argv[0], argv);
+
+ perror_msg("exec %s", argv[0]);
+ toys.exitval = 127;
+ if (!toys.stacktop) _exit(toys.exitval);
+ xexit();
+}
+
+// Spawn child process, capturing stdin/stdout.
+// argv[]: command to exec. If null, child re-runs original program with
+// toys.stacktop zeroed.
+// pipes[2]: stdin, stdout of new process, only allocated if zero on way in,
+// pass NULL to skip pipe allocation entirely.
+// return: pid of child process
+pid_t xpopen_both(char **argv, int *pipes)
+{
+ int cestnepasun[4], pid;
+
+ // Make the pipes? Note this won't set either pipe to 0 because if fds are
+ // allocated in order and if fd0 was free it would go to cestnepasun[0]
+ if (pipes) {
+ for (pid = 0; pid < 2; pid++) {
+ if (pipes[pid] != 0) continue;
+ if (pipe(cestnepasun+(2*pid))) perror_exit("pipe");
+ pipes[pid] = cestnepasun[pid+1];
+ }
+ }
+
+ // Child process.
+ if (!(pid = CFG_TOYBOX_FORK ? xfork() : XVFORK())) {
+ // Dance of the stdin/stdout redirection.
+ if (pipes) {
+ // if we had no stdin/out, pipe handles could overlap, so test for it
+ // and free up potentially overlapping pipe handles before reuse
+ if (pipes[1] != -1) close(cestnepasun[2]);
+ if (pipes[0] != -1) {
+ close(cestnepasun[1]);
+ if (cestnepasun[0]) {
+ dup2(cestnepasun[0], 0);
+ close(cestnepasun[0]);
+ }
+ }
+ if (pipes[1] != -1) {
+ dup2(cestnepasun[3], 1);
+ dup2(cestnepasun[3], 2);
+ if (cestnepasun[3] > 2 || !cestnepasun[3]) close(cestnepasun[3]);
+ }
+ }
+ if (argv) xexec(argv);
+
+ // In fork() case, force recursion because we know it's us.
+ if (CFG_TOYBOX_FORK) {
+ toy_init(toys.which, toys.argv);
+ toys.stacktop = 0;
+ toys.which->toy_main();
+ xexit();
+ // In vfork() case, exec /proc/self/exe with high bit of first letter set
+ // to tell main() we reentered.
+ } else {
+ char *s = "/proc/self/exe";
+
+ // We did a nommu-friendly vfork but must exec to continue.
+ // setting high bit of argv[0][0] to let new process know
+ **toys.argv |= 0x80;
+ execv(s, toys.argv);
+ perror_msg_raw(s);
+
+ _exit(127);
+ }
+ }
+
+ // Parent process
+ if (!CFG_TOYBOX_FORK) **toys.argv &= 0x7f;
+ if (pipes) {
+ if (pipes[0] != -1) close(cestnepasun[0]);
+ if (pipes[1] != -1) close(cestnepasun[3]);
+ }
+
+ return pid;
+}
+
+// Wait for child process to exit, then return adjusted exit code.
+int xwaitpid(pid_t pid)
+{
+ int status;
+
+ while (-1 == waitpid(pid, &status, 0) && errno == EINTR);
+
+ return WIFEXITED(status) ? WEXITSTATUS(status) : WTERMSIG(status)+127;
+}
+
+int xpclose_both(pid_t pid, int *pipes)
+{
+ if (pipes) {
+ close(pipes[0]);
+ close(pipes[1]);
+ }
+
+ return xwaitpid(pid);
+}
+
+// Wrapper to xpopen with a pipe for just one of stdin/stdout
+pid_t xpopen(char **argv, int *pipe, int isstdout)
+{
+ int pipes[2], pid;
+
+ pipes[!isstdout] = -1;
+ pipes[!!isstdout] = 0;
+ pid = xpopen_both(argv, pipes);
+ *pipe = pid ? pipes[!!isstdout] : -1;
+
+ return pid;
+}
+
+int xpclose(pid_t pid, int pipe)
+{
+ close(pipe);
+
+ return xpclose_both(pid, 0);
+}
+
+// Call xpopen and wait for it to finish, keeping existing stdin/stdout.
+int xrun(char **argv)
+{
+ return xpclose_both(xpopen_both(argv, 0), 0);
+}
+
+void xaccess(char *path, int flags)
+{
+ if (access(path, flags)) perror_exit("Can't access '%s'", path);
+}
+
+// Die unless we can delete a file. (File must exist to be deleted.)
+void xunlink(char *path)
+{
+ if (unlink(path)) perror_exit("unlink '%s'", path);
+}
+
+// Die unless we can open/create a file, returning file descriptor.
+// The meaning of O_CLOEXEC is reversed (it defaults on, pass it to disable)
+// and WARN_ONLY tells us not to exit.
+int xcreate_stdio(char *path, int flags, int mode)
+{
+ int fd = open(path, (flags^O_CLOEXEC)&~WARN_ONLY, mode);
+
+ if (fd == -1) ((mode&WARN_ONLY) ? perror_msg_raw : perror_exit_raw)(path);
+ return fd;
+}
+
+// Die unless we can open a file, returning file descriptor.
+int xopen_stdio(char *path, int flags)
+{
+ return xcreate_stdio(path, flags, 0);
+}
+
+void xpipe(int *pp)
+{
+ if (pipe(pp)) perror_exit("xpipe");
+}
+
+void xclose(int fd)
+{
+ if (close(fd)) perror_exit("xclose");
+}
+
+int xdup(int fd)
+{
+ if (fd != -1) {
+ fd = dup(fd);
+ if (fd == -1) perror_exit("xdup");
+ }
+ return fd;
+}
+
+// Move file descriptor above stdin/stdout/stderr, using /dev/null to consume
+// old one. (We should never be called with stdin/stdout/stderr closed, but...)
+int notstdio(int fd)
+{
+ if (fd<0) return fd;
+
+ while (fd<3) {
+ int fd2 = xdup(fd);
+
+ close(fd);
+ xopen_stdio("/dev/null", O_RDWR);
+ fd = fd2;
+ }
+
+ return fd;
+}
+
+int xtempfile(char *name, char **tempname)
+{
+ int fd;
+
+ *tempname = xmprintf("%s%s", name, "XXXXXX");
+ if(-1 == (fd = mkstemp(*tempname))) error_exit("no temp file");
+
+ return fd;
+}
+
+// Create a file but don't return stdin/stdout/stderr
+int xcreate(char *path, int flags, int mode)
+{
+ return notstdio(xcreate_stdio(path, flags, mode));
+}
+
+// Open a file descriptor NOT in stdin/stdout/stderr
+int xopen(char *path, int flags)
+{
+ return notstdio(xopen_stdio(path, flags));
+}
+
+// Open read only, treating "-" as a synonym for stdin, defaulting to warn only
+int openro(char *path, int flags)
+{
+ if (!strcmp(path, "-")) return 0;
+
+ return xopen(path, flags^WARN_ONLY);
+}
+
+// Open read only, treating "-" as a synonym for stdin.
+int xopenro(char *path)
+{
+ return openro(path, O_RDONLY|WARN_ONLY);
+}
+
+FILE *xfdopen(int fd, char *mode)
+{
+ FILE *f = fdopen(fd, mode);
+
+ if (!f) perror_exit("xfdopen");
+
+ return f;
+}
+
+// Die unless we can open/create a file, returning FILE *.
+FILE *xfopen(char *path, char *mode)
+{
+ FILE *f = fopen(path, mode);
+ if (!f) perror_exit("No file %s", path);
+ return f;
+}
+
+// Die if there's an error other than EOF.
+size_t xread(int fd, void *buf, size_t len)
+{
+ ssize_t ret = read(fd, buf, len);
+ if (ret < 0) perror_exit("xread");
+
+ return ret;
+}
+
+void xreadall(int fd, void *buf, size_t len)
+{
+ if (len != readall(fd, buf, len)) perror_exit("xreadall");
+}
+
+// There's no xwriteall(), just xwrite(). When we read, there may or may not
+// be more data waiting. When we write, there is data and it had better go
+// somewhere.
+
+void xwrite(int fd, void *buf, size_t len)
+{
+ if (len != writeall(fd, buf, len)) perror_exit("xwrite");
+}
+
+// Die if lseek fails, probably due to being called on a pipe.
+
+off_t xlseek(int fd, off_t offset, int whence)
+{
+ offset = lseek(fd, offset, whence);
+ if (offset<0) perror_exit("lseek");
+
+ return offset;
+}
+
+char *xgetcwd(void)
+{
+ char *buf = getcwd(NULL, 0);
+ if (!buf) perror_exit("xgetcwd");
+
+ return buf;
+}
+
+void xstat(char *path, struct stat *st)
+{
+ if(stat(path, st)) perror_exit("Can't stat %s", path);
+}
+
+// Cannonicalize path, even to file with one or more missing components at end.
+// if exact, require last path component to exist
+char *xabspath(char *path, int exact)
+{
+ struct string_list *todo, *done = 0;
+ int try = 9999, dirfd = open("/", 0), missing = 0;
+ char *ret;
+
+ // If this isn't an absolute path, start with cwd.
+ if (*path != '/') {
+ char *temp = xgetcwd();
+
+ splitpath(path, splitpath(temp, &todo));
+ free(temp);
+ } else splitpath(path, &todo);
+
+ // Iterate through path components in todo, prepend processed ones to done.
+ while (todo) {
+ struct string_list *new = llist_pop(&todo), **tail;
+ ssize_t len;
+
+ // Eventually break out of endless loops
+ if (!try--) {
+ errno = ELOOP;
+ goto error;
+ }
+
+ // Removable path componenents.
+ if (!strcmp(new->str, ".") || !strcmp(new->str, "..")) {
+ int x = new->str[1];
+
+ free(new);
+ if (!x) continue;
+ if (done) free(llist_pop(&done));
+ len = 0;
+
+ if (missing) missing--;
+ else {
+ if (-1 == (x = openat(dirfd, "..", 0))) goto error;
+ close(dirfd);
+ dirfd = x;
+ }
+ continue;
+ }
+
+ // Is this a symlink?
+ len = readlinkat(dirfd, new->str, libbuf, sizeof(libbuf));
+ if (len>4095) goto error;
+
+ // Not a symlink: add to linked list, move dirfd, fail if error
+ if (len<1) {
+ int fd;
+
+ new->next = done;
+ done = new;
+ if (errno == EINVAL && !todo) break;
+ if (errno == ENOENT && exact<0) {
+ missing++;
+ continue;
+ }
+ if (errno != EINVAL && (exact || todo)) goto error;
+
+ fd = openat(dirfd, new->str, 0);
+ if (fd == -1 && (exact || todo || errno != ENOENT)) goto error;
+ close(dirfd);
+ dirfd = fd;
+ continue;
+ }
+
+ // If this symlink is to an absolute path, discard existing resolved path
+ libbuf[len] = 0;
+ if (*libbuf == '/') {
+ llist_traverse(done, free);
+ done=0;
+ close(dirfd);
+ dirfd = open("/", 0);
+ }
+ free(new);
+
+ // prepend components of new path. Note symlink to "/" will leave new NULL
+ tail = splitpath(libbuf, &new);
+
+ // symlink to "/" will return null and leave tail alone
+ if (new) {
+ *tail = todo;
+ todo = new;
+ }
+ }
+ close(dirfd);
+
+ // At this point done has the path, in reverse order. Reverse list while
+ // calculating buffer length.
+
+ try = 2;
+ while (done) {
+ struct string_list *temp = llist_pop(&done);;
+
+ if (todo) try++;
+ try += strlen(temp->str);
+ temp->next = todo;
+ todo = temp;
+ }
+
+ // Assemble return buffer
+
+ ret = xmalloc(try);
+ *ret = '/';
+ ret [try = 1] = 0;
+ while (todo) {
+ if (try>1) ret[try++] = '/';
+ try = stpcpy(ret+try, todo->str) - ret;
+ free(llist_pop(&todo));
+ }
+
+ return ret;
+
+error:
+ close(dirfd);
+ llist_traverse(todo, free);
+ llist_traverse(done, free);
+
+ return 0;
+}
+
+void xchdir(char *path)
+{
+ if (chdir(path)) error_exit("chdir '%s'", path);
+}
+
+void xchroot(char *path)
+{
+ if (chroot(path)) error_exit("chroot '%s'", path);
+ xchdir("/");
+}
+
+struct passwd *xgetpwuid(uid_t uid)
+{
+ struct passwd *pwd = getpwuid(uid);
+ if (!pwd) error_exit("bad uid %ld", (long)uid);
+ return pwd;
+}
+
+struct group *xgetgrgid(gid_t gid)
+{
+ struct group *group = getgrgid(gid);
+
+ if (!group) perror_exit("gid %ld", (long)gid);
+ return group;
+}
+
+unsigned xgetuid(char *name)
+{
+ struct passwd *up = getpwnam(name);
+ char *s = 0;
+ long uid;
+
+ if (up) return up->pw_uid;
+
+ uid = estrtol(name, &s, 10);
+ if (!errno && s && !*s && uid>=0 && uid<=UINT_MAX) return uid;
+
+ error_exit("bad user '%s'", name);
+}
+
+unsigned xgetgid(char *name)
+{
+ struct group *gr = getgrnam(name);
+ char *s = 0;
+ long gid;
+
+ if (gr) return gr->gr_gid;
+
+ gid = estrtol(name, &s, 10);
+ if (!errno && s && !*s && gid>=0 && gid<=UINT_MAX) return gid;
+
+ error_exit("bad group '%s'", name);
+}
+
+struct passwd *xgetpwnam(char *name)
+{
+ struct passwd *up = getpwnam(name);
+
+ if (!up) perror_exit("user '%s'", name);
+ return up;
+}
+
+struct group *xgetgrnam(char *name)
+{
+ struct group *gr = getgrnam(name);
+
+ if (!gr) perror_exit("group '%s'", name);
+ return gr;
+}
+
+// setuid() can fail (for example, too many processes belonging to that user),
+// which opens a security hole if the process continues as the original user.
+
+void xsetuser(struct passwd *pwd)
+{
+ if (initgroups(pwd->pw_name, pwd->pw_gid) || setgid(pwd->pw_uid)
+ || setuid(pwd->pw_uid)) perror_exit("xsetuser '%s'", pwd->pw_name);
+}
+
+// This can return null (meaning file not found). It just won't return null
+// for memory allocation reasons.
+char *xreadlink(char *name)
+{
+ int len, size = 0;
+ char *buf = 0;
+
+ // Grow by 64 byte chunks until it's big enough.
+ for(;;) {
+ size +=64;
+ buf = xrealloc(buf, size);
+ len = readlink(name, buf, size);
+
+ if (len<0) {
+ free(buf);
+ return 0;
+ }
+ if (len<size) {
+ buf[len]=0;
+ return buf;
+ }
+ }
+}
+
+char *xreadfile(char *name, char *buf, off_t len)
+{
+ if (!(buf = readfile(name, buf, len))) perror_exit("Bad '%s'", name);
+
+ return buf;
+}
+
+// The data argument to ioctl() is actually long, but it's usually used as
+// a pointer. If you need to feed in a number, do (void *)(long) typecast.
+int xioctl(int fd, int request, void *data)
+{
+ int rc;
+
+ errno = 0;
+ rc = ioctl(fd, request, data);
+ if (rc == -1 && errno) perror_exit("ioctl %x", request);
+
+ return rc;
+}
+
+// Open a /var/run/NAME.pid file, dying if we can't write it or if it currently
+// exists and is this executable.
+void xpidfile(char *name)
+{
+ char pidfile[256], spid[32];
+ int i, fd;
+ pid_t pid;
+
+ sprintf(pidfile, "/var/run/%s.pid", name);
+ // Try three times to open the sucker.
+ for (i=0; i<3; i++) {
+ fd = open(pidfile, O_CREAT|O_EXCL|O_WRONLY, 0644);
+ if (fd != -1) break;
+
+ // If it already existed, read it. Loop for race condition.
+ fd = open(pidfile, O_RDONLY);
+ if (fd == -1) continue;
+
+ // Is the old program still there?
+ spid[xread(fd, spid, sizeof(spid)-1)] = 0;
+ close(fd);
+ pid = atoi(spid);
+ if (pid < 1 || (kill(pid, 0) && errno == ESRCH)) unlink(pidfile);
+
+ // An else with more sanity checking might be nice here.
+ }
+
+ if (i == 3) error_exit("xpidfile %s", name);
+
+ xwrite(fd, spid, sprintf(spid, "%ld\n", (long)getpid()));
+ close(fd);
+}
+
+// Copy the rest of in to out and close both files.
+
+long long xsendfile(int in, int out)
+{
+ long long total = 0;
+ long len;
+
+ if (in<0) return 0;
+ for (;;) {
+ len = xread(in, libbuf, sizeof(libbuf));
+ if (len<1) break;
+ xwrite(out, libbuf, len);
+ total += len;
+ }
+
+ return total;
+}
+
+double xstrtod(char *s)
+{
+ char *end;
+ double d;
+
+ errno = 0;
+ d = strtod(s, &end);
+ if (!errno && *end) errno = E2BIG;
+ if (errno) perror_exit("strtod %s", s);
+
+ return d;
+}
+
+// parse fractional seconds with optional s/m/h/d suffix
+long xparsetime(char *arg, long zeroes, long *fraction)
+{
+ long l, fr = 0, mask = 1;
+ char *end;
+
+ if (*arg != '.' && !isdigit(*arg)) error_exit("Not a number '%s'", arg);
+ l = strtoul(arg, &end, 10);
+ if (*end == '.') {
+ end++;
+ while (zeroes--) {
+ fr *= 10;
+ mask *= 10;
+ if (isdigit(*end)) fr += *end++-'0';
+ }
+ while (isdigit(*end)) end++;
+ }
+
+ // Parse suffix
+ if (*end) {
+ int ismhd[]={1,60,3600,86400}, i = stridx("smhd", *end);
+
+ if (i == -1 || *(end+1)) error_exit("Unknown suffix '%s'", end);
+ l *= ismhd[i];
+ fr *= ismhd[i];
+ l += fr/mask;
+ fr %= mask;
+ }
+ if (fraction) *fraction = fr;
+
+ return l;
+}
+
+long long xparsemillitime(char *arg)
+{
+ long l, ll;
+
+ l = xparsetime(arg, 3, &ll);
+
+ return (l*1000LL)+ll;
+}
+
+
+
+// Compile a regular expression into a regex_t
+void xregcomp(regex_t *preg, char *regex, int cflags)
+{
+ int rc = regcomp(preg, regex, cflags);
+
+ if (rc) {
+ regerror(rc, preg, libbuf, sizeof(libbuf));
+ error_exit("xregcomp: %s", libbuf);
+ }
+}
+
+char *xtzset(char *new)
+{
+ char *old = getenv("TZ");
+
+ if (old) old = xstrdup(old);
+ if (new ? setenv("TZ", new, 1) : unsetenv("TZ")) perror_exit("setenv");
+ tzset();
+
+ return old;
+}
+
+// Set a signal handler
+void xsignal_flags(int signal, void *handler, int flags)
+{
+ struct sigaction *sa = (void *)libbuf;
+
+ memset(sa, 0, sizeof(struct sigaction));
+ sa->sa_handler = handler;
+ sa->sa_flags = flags;
+
+ if (sigaction(signal, sa, 0)) perror_exit("xsignal %d", signal);
+}
+
+void xsignal(int signal, void *handler)
+{
+ xsignal_flags(signal, handler, 0);
+}
diff --git a/login/main.c b/login/main.c
@@ -0,0 +1,258 @@
+/* Toybox infrastructure.
+ *
+ * Copyright 2006 Rob Landley <rob@landley.net>
+ */
+
+#include "toys.h"
+
+#ifndef TOYBOX_VERSION
+#ifndef TOYBOX_VENDOR
+#define TOYBOX_VENDOR ""
+#endif
+#define TOYBOX_VERSION "0.7.8"TOYBOX_VENDOR
+#endif
+
+// Populate toy_list[].
+
+#undef NEWTOY
+#undef OLDTOY
+#define NEWTOY(name, opts, flags) {#name, name##_main, OPTSTR_##name, flags},
+#define OLDTOY(name, oldname, flags) \
+ {#name, oldname##_main, OPTSTR_##oldname, flags},
+
+struct toy_list toy_list[] = {
+#include "newtoys.h"
+};
+
+// global context for this command.
+
+struct toy_context toys;
+union global_union this;
+char toybuf[4096], libbuf[4096];
+
+struct toy_list *toy_find(char *name)
+{
+ int top, bottom, middle;
+
+ if (!CFG_TOYBOX || strchr(name, '/')) return 0;
+
+ // If the name starts with "toybox" accept that as a match. Otherwise
+ // skip the first entry, which is out of order.
+
+ if (!strncmp(name,"toybox",6)) return toy_list;
+ bottom = 1;
+
+ // Binary search to find this command.
+
+ top = ARRAY_LEN(toy_list)-1;
+ for (;;) {
+ int result;
+
+ middle = (top+bottom)/2;
+ if (middle<bottom || middle>top) return NULL;
+ result = strcmp(name,toy_list[middle].name);
+ if (!result) return toy_list+middle;
+ if (result<0) top = --middle;
+ else bottom = ++middle;
+ }
+}
+
+// Figure out whether or not anything is using the option parsing logic,
+// because the compiler can't figure out whether or not to optimize it away
+// on its' own. NEED_OPTIONS becomes a constant allowing if() to optimize
+// stuff out via dead code elimination.
+
+#undef NEWTOY
+#undef OLDTOY
+#define NEWTOY(name, opts, flags) opts ||
+#define OLDTOY(name, oldname, flags) OPTSTR_##oldname ||
+static const int NEED_OPTIONS =
+#include "newtoys.h"
+0; // Ends the opts || opts || opts...
+
+static void unknown(char *name)
+{
+ toys.exitval = 127;
+ toys.which = toy_list;
+ error_exit("Unknown command %s", name);
+}
+
+// Setup toybox global state for this command.
+static void toy_singleinit(struct toy_list *which, char *argv[])
+{
+ toys.which = which;
+ toys.argv = argv;
+
+ if (CFG_TOYBOX_I18N) setlocale(LC_CTYPE, "C.UTF-8");
+
+ // Parse --help and --version for (almost) all commands
+ if (CFG_TOYBOX_HELP_DASHDASH && !(which->flags & TOYFLAG_NOHELP) && argv[1]) {
+ if (!strcmp(argv[1], "--help")) {
+ if (CFG_TOYBOX && toys.which == toy_list && toys.argv[2])
+ if (!(toys.which = toy_find(toys.argv[2]))) unknown(toys.argv[2]);
+ show_help(stdout);
+ xexit();
+ }
+
+ if (!strcmp(argv[1], "--version")) {
+ xputs("toybox "TOYBOX_VERSION);
+ xexit();
+ }
+ }
+
+ if (NEED_OPTIONS && which->options) get_optflags();
+ else {
+ toys.optargs = argv+1;
+ for (toys.optc = 0; toys.optargs[toys.optc]; toys.optc++);
+ }
+ toys.old_umask = umask(0);
+ if (!(which->flags & TOYFLAG_UMASK)) umask(toys.old_umask);
+ toys.signalfd--;
+ toys.toycount = ARRAY_LEN(toy_list);
+}
+
+// Full init needed by multiplexer or reentrant calls, calls singleinit at end
+void toy_init(struct toy_list *which, char *argv[])
+{
+ void *oldwhich = toys.which;
+
+ // Drop permissions for non-suid commands.
+
+ if (CFG_TOYBOX_SUID) {
+ if (!toys.which) toys.which = toy_list;
+
+ uid_t uid = getuid(), euid = geteuid();
+
+ if (!(which->flags & TOYFLAG_STAYROOT)) {
+ if (uid != euid) {
+ if (setuid(uid)) perror_exit("setuid %d->%d", euid, uid); // drop root
+ euid = uid;
+ toys.wasroot++;
+ }
+ } else if (CFG_TOYBOX_DEBUG && uid && which != toy_list)
+ error_msg("Not installed suid root");
+
+ if ((which->flags & TOYFLAG_NEEDROOT) && euid) help_exit("Not root");
+ }
+
+ // Free old toys contents (to be reentrant), but leave rebound if any
+ // don't blank old optargs if our new argc lives in the old optargs.
+ if (argv<toys.optargs || argv>toys.optargs+toys.optc) free(toys.optargs);
+ memset(&toys, 0, offsetof(struct toy_context, rebound));
+ if (oldwhich) memset(&this, 0, sizeof(this));
+
+ // Continue to portion of init needed by standalone commands
+ toy_singleinit(which, argv);
+}
+
+// Run an internal toybox command.
+// Only returns if it can't run command internally, otherwise xexit() when done.
+void toy_exec_which(struct toy_list *which, char *argv[])
+{
+ // Return if we can't find it (which includes no multiplexer case),
+ if (!which) return;
+
+ // Return if stack depth getting noticeable (proxy for leaked heap, etc).
+
+ // Compiler writers have decided subtracting char * is undefined behavior,
+ // so convert to integers. (LP64 says sizeof(long)==sizeof(pointer).)
+ // Signed typecast so stack growth direction is irrelevant: we're measuring
+ // the distance between two pointers on the same stack, hence the labs().
+ if (!CFG_TOYBOX_NORECURSE && toys.stacktop)
+ if (labs((long)toys.stacktop-(long)&which)>6000) return;
+
+ // Return if we need to re-exec to acquire root via suid bit.
+ if (toys.which && (which->flags&TOYFLAG_ROOTONLY) && toys.wasroot) return;
+
+ // Run command
+ toy_init(which, argv);
+ if (toys.which) toys.which->toy_main();
+ xexit();
+}
+
+// Lookup internal toybox command to run via argv[0]
+void toy_exec(char *argv[])
+{
+ toy_exec_which(toy_find(basename(*argv)), argv);
+}
+
+// Multiplexer command, first argument is command to run, rest are args to that.
+// If first argument starts with - output list of command install paths.
+void toybox_main(void)
+{
+ static char *toy_paths[]={"usr/","bin/","sbin/",0};
+ int i, len = 0;
+
+ // fast path: try to exec immediately.
+ // (Leave toys.which null to disable suid return logic.)
+ // Try dereferencing one layer of symlink
+ if (toys.argv[1]) {
+ toy_exec(toys.argv+1);
+ if (0<readlink(toys.argv[1], libbuf, sizeof(libbuf)))
+ toy_exec_which(toy_find(basename(libbuf)), toys.argv);
+ }
+
+ // For early error reporting
+ toys.which = toy_list;
+
+ if (toys.argv[1] && toys.argv[1][0] != '-') unknown(toys.argv[1]);
+
+ // Output list of command.
+ for (i=1; i<ARRAY_LEN(toy_list); i++) {
+ int fl = toy_list[i].flags;
+ if (fl & TOYMASK_LOCATION) {
+ if (toys.argv[1]) {
+ int j;
+ for (j=0; toy_paths[j]; j++)
+ if (fl & (1<<j)) len += printf("%s", toy_paths[j]);
+ }
+ len += printf("%s",toy_list[i].name);
+ if (++len > 65) len = 0;
+ xputc(len ? ' ' : '\n');
+ }
+ }
+ xputc('\n');
+}
+
+int main(int argc, char *argv[])
+{
+ if (!*argv) return 127;
+
+ // Snapshot stack location so we can detect recursion depth later.
+ // This is its own block so probe doesn't permanently consume stack.
+ else {
+ int stack;
+
+ toys.stacktop = &stack;
+ }
+
+ // Up to and including Android M, bionic's dynamic linker added a handler to
+ // cause a crash dump on SIGPIPE. That was removed in Android N, but adbd
+ // was still setting the SIGPIPE disposition to SIG_IGN, and its children
+ // were inheriting that. In Android O, adbd is fixed, but manually asking
+ // for the default disposition is harmless, and it'll be a long time before
+ // no one's using anything older than O!
+ if (CFG_TOYBOX_ON_ANDROID) signal(SIGPIPE, SIG_DFL);
+
+ // If nommu can't fork, special reentry path.
+ // Use !stacktop to signal "vfork happened", both before and after xexec()
+ if (!CFG_TOYBOX_FORK) {
+ if (0x80 & **argv) {
+ **argv &= 0x7f;
+ toys.stacktop = 0;
+ }
+ }
+
+ if (CFG_TOYBOX) {
+ // Call the multiplexer, adjusting this argv[] to be its' argv[1].
+ // (It will adjust it back before calling toy_exec().)
+ toys.argv = argv-1;
+ toybox_main();
+ } else {
+ // a single toybox command built standalone with no multiplexer
+ toy_singleinit(toy_list, argv);
+ toy_list->toy_main();
+ }
+
+ xexit();
+}
diff --git a/login/newtoys.h b/login/newtoys.h
@@ -0,0 +1,295 @@
+USE_TOYBOX(NEWTOY(toybox, NULL, TOYFLAG_STAYROOT))
+USE_SH(OLDTOY(-sh, sh, 0))
+USE_SH(OLDTOY(-toysh, sh, 0))
+USE_TRUE(OLDTOY(:, true, TOYFLAG_NOFORK|TOYFLAG_NOHELP))
+USE_ACPI(NEWTOY(acpi, "abctV", TOYFLAG_USR|TOYFLAG_BIN))
+USE_GROUPADD(OLDTOY(addgroup, groupadd, TOYFLAG_NEEDROOT|TOYFLAG_SBIN))
+USE_USERADD(OLDTOY(adduser, useradd, TOYFLAG_NEEDROOT|TOYFLAG_UMASK|TOYFLAG_SBIN))
+USE_ARP(NEWTOY(arp, "vi:nDsdap:A:H:[+Ap][!sd]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_ARPING(NEWTOY(arping, "<1>1s:I:w#<0c#<0AUDbqf[+AU][+Df]", TOYFLAG_USR|TOYFLAG_SBIN))
+USE_ASCII(NEWTOY(ascii, 0, TOYFLAG_USR|TOYFLAG_BIN))
+USE_BASE64(NEWTOY(base64, "diw#<0=76[!dw]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_BASENAME(NEWTOY(basename, "<1as:", TOYFLAG_USR|TOYFLAG_BIN))
+USE_BC(NEWTOY(bc, "i(interactive)l(mathlib)q(quiet)s(standard)w(warn)", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE))
+USE_BLKID(NEWTOY(blkid, 0, TOYFLAG_BIN))
+USE_BLOCKDEV(NEWTOY(blockdev, "<1>1(setro)(setrw)(getro)(getss)(getbsz)(setbsz)#<0(getsz)(getsize)(getsize64)(getra)(setra)#<0(flushbufs)(rereadpt)",TOYFLAG_USR|TOYFLAG_BIN))
+USE_BOOTCHARTD(NEWTOY(bootchartd, 0, TOYFLAG_STAYROOT|TOYFLAG_USR|TOYFLAG_BIN))
+USE_BRCTL(NEWTOY(brctl, "<1", TOYFLAG_USR|TOYFLAG_SBIN))
+USE_BUNZIP2(NEWTOY(bunzip2, "cftkv", TOYFLAG_USR|TOYFLAG_BIN))
+USE_BZCAT(NEWTOY(bzcat, NULL, TOYFLAG_USR|TOYFLAG_BIN))
+USE_CAL(NEWTOY(cal, ">2", TOYFLAG_USR|TOYFLAG_BIN))
+USE_CAT(NEWTOY(cat, "u"USE_CAT_V("vte"), TOYFLAG_BIN))
+USE_CATV(NEWTOY(catv, USE_CATV("vte"), TOYFLAG_USR|TOYFLAG_BIN))
+USE_SH(NEWTOY(cd, NULL, TOYFLAG_NOFORK))
+USE_CHATTR(NEWTOY(chattr, NULL, TOYFLAG_BIN))
+USE_CHCON(NEWTOY(chcon, "<2hvR", TOYFLAG_USR|TOYFLAG_BIN))
+USE_CHGRP(NEWTOY(chgrp, "<2hPLHRfv[-HLP]", TOYFLAG_BIN))
+USE_CHMOD(NEWTOY(chmod, "<2?vRf[-vf]", TOYFLAG_BIN))
+USE_CHOWN(OLDTOY(chown, chgrp, TOYFLAG_BIN))
+USE_CHROOT(NEWTOY(chroot, "^<1", TOYFLAG_USR|TOYFLAG_SBIN))
+USE_CHRT(NEWTOY(chrt, "^mp#<0iRbrfo[!ibrfo]", TOYFLAG_USR|TOYFLAG_SBIN))
+USE_CHVT(NEWTOY(chvt, "<1", TOYFLAG_USR|TOYFLAG_BIN))
+USE_CKSUM(NEWTOY(cksum, "HIPLN", TOYFLAG_BIN))
+USE_CLEAR(NEWTOY(clear, NULL, TOYFLAG_USR|TOYFLAG_BIN))
+USE_CMP(NEWTOY(cmp, "<2>2ls(silent)(quiet)[!ls]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_COMM(NEWTOY(comm, "<2>2321", TOYFLAG_USR|TOYFLAG_BIN))
+USE_COUNT(NEWTOY(count, NULL, TOYFLAG_USR|TOYFLAG_BIN))
+USE_CP(NEWTOY(cp, "<2"USE_CP_PRESERVE("(preserve):;")"D(parents)RHLPprdaslvnF(remove-destination)fi[-HLPd][-ni]", TOYFLAG_BIN))
+USE_CPIO(NEWTOY(cpio, "(no-preserve-owner)(trailer)mduH:p:|i|t|F:v(verbose)o|[!pio][!pot][!pF]", TOYFLAG_BIN))
+USE_CRC32(NEWTOY(crc32, 0, TOYFLAG_BIN))
+USE_CROND(NEWTOY(crond, "fbSl#<0=8d#<0L:c:[-bf][-LS][-ld]", TOYFLAG_USR|TOYFLAG_SBIN|TOYFLAG_NEEDROOT))
+USE_CRONTAB(NEWTOY(crontab, "c:u:elr[!elr]", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_STAYROOT))
+USE_CUT(NEWTOY(cut, "b*|c*|f*|F*|C*|O(output-delimiter):d:sDn[!cbf]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_DATE(NEWTOY(date, "d:D:r:u[!dr]", TOYFLAG_BIN))
+USE_DD(NEWTOY(dd, 0, TOYFLAG_USR|TOYFLAG_BIN))
+USE_DEALLOCVT(NEWTOY(deallocvt, ">1", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_NEEDROOT))
+USE_GROUPDEL(OLDTOY(delgroup, groupdel, TOYFLAG_NEEDROOT|TOYFLAG_SBIN))
+USE_USERDEL(OLDTOY(deluser, userdel, TOYFLAG_NEEDROOT|TOYFLAG_SBIN))
+USE_DEMO_MANY_OPTIONS(NEWTOY(demo_many_options, "ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba", TOYFLAG_BIN))
+USE_DEMO_NUMBER(NEWTOY(demo_number, "hdbs", TOYFLAG_BIN))
+USE_DEMO_SCANKEY(NEWTOY(demo_scankey, 0, TOYFLAG_BIN))
+USE_DEMO_UTF8TOWC(NEWTOY(demo_utf8towc, 0, TOYFLAG_USR|TOYFLAG_BIN))
+USE_DF(NEWTOY(df, "HPkhit*a[-HPkh]", TOYFLAG_SBIN))
+USE_DHCP(NEWTOY(dhcp, "V:H:F:x*r:O*A#<0=20T#<0=3t#<0=3s:p:i:SBRCaovqnbf", TOYFLAG_SBIN|TOYFLAG_ROOTONLY))
+USE_DHCP6(NEWTOY(dhcp6, "r:A#<0T#<0t#<0s:p:i:SRvqnbf", TOYFLAG_SBIN|TOYFLAG_ROOTONLY))
+USE_DHCPD(NEWTOY(dhcpd, ">1P#<0>65535fi:S46[!46]", TOYFLAG_SBIN|TOYFLAG_ROOTONLY))
+USE_DIFF(NEWTOY(diff, "<2>2(color)B(ignore-blank-lines)d(minimal)b(ignore-space-change)ut(expand-tabs)w(ignore-all-space)i(ignore-case)T(initial-tab)s(report-identical-files)q(brief)a(text)L(label)*S(starting-file):N(new-file)r(recursive)U(unified)#<0=3", TOYFLAG_USR|TOYFLAG_BIN))
+USE_DIRNAME(NEWTOY(dirname, "<1", TOYFLAG_USR|TOYFLAG_BIN))
+USE_DMESG(NEWTOY(dmesg, "w(follow)CSTtrs#<1n#c[!Ttr][!Cc][!Sw]", TOYFLAG_BIN))
+USE_DOS2UNIX(NEWTOY(dos2unix, 0, TOYFLAG_BIN))
+USE_DU(NEWTOY(du, "d#<0=-1hmlcaHkKLsx[-HL][-kKmh]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_DUMPLEASES(NEWTOY(dumpleases, ">0arf:[!ar]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_ECHO(NEWTOY(echo, "^?en", TOYFLAG_BIN))
+USE_EGREP(OLDTOY(egrep, grep, TOYFLAG_BIN))
+USE_EJECT(NEWTOY(eject, ">1stT[!tT]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_ENV(NEWTOY(env, "^0iu*", TOYFLAG_USR|TOYFLAG_BIN))
+USE_SH(NEWTOY(exit, NULL, TOYFLAG_NOFORK))
+USE_EXPAND(NEWTOY(expand, "t*", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE))
+USE_EXPR(NEWTOY(expr, NULL, TOYFLAG_USR|TOYFLAG_BIN))
+USE_FACTOR(NEWTOY(factor, 0, TOYFLAG_USR|TOYFLAG_BIN))
+USE_FALLOCATE(NEWTOY(fallocate, ">1l#|o#", TOYFLAG_USR|TOYFLAG_BIN))
+USE_FALSE(NEWTOY(false, NULL, TOYFLAG_BIN|TOYFLAG_NOHELP))
+USE_FDISK(NEWTOY(fdisk, "C#<0H#<0S#<0b#<512ul", TOYFLAG_SBIN))
+USE_FGREP(OLDTOY(fgrep, grep, TOYFLAG_BIN))
+USE_FILE(NEWTOY(file, "<1hL[!hL]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_FIND(NEWTOY(find, "?^HL[-HL]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_FLOCK(NEWTOY(flock, "<1>1nsux[-sux]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_FMT(NEWTOY(fmt, "w#<0=75", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE))
+USE_FOLD(NEWTOY(fold, "bsuw#<1", TOYFLAG_USR|TOYFLAG_BIN))
+USE_FREE(NEWTOY(free, "htgmkb[!htgmkb]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_FREERAMDISK(NEWTOY(freeramdisk, "<1>1", TOYFLAG_SBIN|TOYFLAG_NEEDROOT))
+USE_FSCK(NEWTOY(fsck, "?t:ANPRTVsC#", TOYFLAG_USR|TOYFLAG_BIN))
+USE_FSFREEZE(NEWTOY(fsfreeze, "<1>1f|u|[!fu]", TOYFLAG_USR|TOYFLAG_SBIN))
+USE_FSTYPE(NEWTOY(fstype, "<1", TOYFLAG_BIN))
+USE_FSYNC(NEWTOY(fsync, "<1d", TOYFLAG_BIN))
+USE_FTPGET(NEWTOY(ftpget, "<2>3P:cp:u:vgslLmMdD[-gs][!gslLmMdD][!clL]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_FTPPUT(OLDTOY(ftpput, ftpget, TOYFLAG_USR|TOYFLAG_BIN))
+USE_GETCONF(NEWTOY(getconf, ">2al", TOYFLAG_USR|TOYFLAG_BIN))
+USE_GETENFORCE(NEWTOY(getenforce, ">0", TOYFLAG_USR|TOYFLAG_SBIN))
+USE_GETFATTR(NEWTOY(getfattr, "dhn:", TOYFLAG_USR|TOYFLAG_BIN))
+USE_GETPROP(NEWTOY(getprop, ">2Z", TOYFLAG_USR|TOYFLAG_SBIN))
+USE_GETTY(NEWTOY(getty, "<2t#<0H:I:l:f:iwnmLh",TOYFLAG_SBIN))
+USE_GREP(NEWTOY(grep, "S(exclude)*M(include)*ZzEFHIabhinorsvwclqe*f*C#B#A#m#x[!wx][!EFw]", TOYFLAG_BIN))
+USE_GROUPADD(NEWTOY(groupadd, "<1>2g#<0S", TOYFLAG_NEEDROOT|TOYFLAG_SBIN))
+USE_GROUPDEL(NEWTOY(groupdel, "<1>2", TOYFLAG_NEEDROOT|TOYFLAG_SBIN))
+USE_GROUPS(NEWTOY(groups, NULL, TOYFLAG_USR|TOYFLAG_BIN))
+USE_GUNZIP(NEWTOY(gunzip, "cdfk123456789[-123456789]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_GZIP(NEWTOY(gzip, "cdfk123456789[-123456789]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_REBOOT(OLDTOY(halt, reboot, TOYFLAG_SBIN|TOYFLAG_NEEDROOT))
+USE_HEAD(NEWTOY(head, "?n#<0=10c#<0qv[-nc]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_HELLO(NEWTOY(hello, 0, TOYFLAG_USR|TOYFLAG_BIN))
+USE_HELP(NEWTOY(help, ""USE_HELP_EXTRAS("ah"), TOYFLAG_BIN))
+USE_HEXEDIT(NEWTOY(hexedit, "<1>1r", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE))
+USE_HOST(NEWTOY(host, "<1>2avt:", TOYFLAG_USR|TOYFLAG_BIN))
+USE_HOSTID(NEWTOY(hostid, ">0", TOYFLAG_USR|TOYFLAG_BIN))
+USE_HOSTNAME(NEWTOY(hostname, ">1bdsfF:[!bdsf]", TOYFLAG_BIN))
+USE_HWCLOCK(NEWTOY(hwclock, ">0(fast)f(rtc):u(utc)l(localtime)t(systz)s(hctosys)r(show)w(systohc)[-ul][!rtsw]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_I2CDETECT(NEWTOY(i2cdetect, ">3aFly", TOYFLAG_USR|TOYFLAG_BIN))
+USE_I2CDUMP(NEWTOY(i2cdump, "<2>2fy", TOYFLAG_USR|TOYFLAG_BIN))
+USE_I2CGET(NEWTOY(i2cget, "<3>3fy", TOYFLAG_USR|TOYFLAG_BIN))
+USE_I2CSET(NEWTOY(i2cset, "<4fy", TOYFLAG_USR|TOYFLAG_BIN))
+USE_ICONV(NEWTOY(iconv, "cst:f:", TOYFLAG_USR|TOYFLAG_BIN))
+USE_ID(NEWTOY(id, ">1"USE_ID_Z("Z")"nGgru[!"USE_ID_Z("Z")"Ggu]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_IFCONFIG(NEWTOY(ifconfig, "^?aS", TOYFLAG_SBIN))
+USE_INIT(NEWTOY(init, "", TOYFLAG_SBIN))
+USE_INOTIFYD(NEWTOY(inotifyd, "<2", TOYFLAG_USR|TOYFLAG_BIN))
+USE_INSMOD(NEWTOY(insmod, "<1", TOYFLAG_SBIN|TOYFLAG_NEEDROOT))
+USE_INSTALL(NEWTOY(install, "<1cdDpsvm:o:g:", TOYFLAG_USR|TOYFLAG_BIN))
+USE_IONICE(NEWTOY(ionice, "^tc#<0>3=2n#<0>7=5p#", TOYFLAG_USR|TOYFLAG_BIN))
+USE_IORENICE(NEWTOY(iorenice, "?<1>3", TOYFLAG_USR|TOYFLAG_BIN))
+USE_IOTOP(NEWTOY(iotop, ">0AaKO" "Hk*o*p*u*s#<1=7d%<100=3000m#n#<1bq", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_STAYROOT|TOYFLAG_LOCALE))
+USE_IP(NEWTOY(ip, NULL, TOYFLAG_SBIN))
+USE_IP(OLDTOY(ipaddr, ip, TOYFLAG_SBIN))
+USE_IPCRM(NEWTOY(ipcrm, "m*M*s*S*q*Q*", TOYFLAG_USR|TOYFLAG_BIN))
+USE_IPCS(NEWTOY(ipcs, "acptulsqmi#", TOYFLAG_USR|TOYFLAG_BIN))
+USE_IP(OLDTOY(iplink, ip, TOYFLAG_SBIN))
+USE_IP(OLDTOY(iproute, ip, TOYFLAG_SBIN))
+USE_IP(OLDTOY(iprule, ip, TOYFLAG_SBIN))
+USE_IP(OLDTOY(iptunnel, ip, TOYFLAG_SBIN))
+USE_KILL(NEWTOY(kill, "?ls: ", TOYFLAG_BIN))
+USE_KILLALL(NEWTOY(killall, "?s:lqvi", TOYFLAG_USR|TOYFLAG_BIN))
+USE_KILLALL5(NEWTOY(killall5, "?o*ls: [!lo][!ls]", TOYFLAG_SBIN))
+USE_KLOGD(NEWTOY(klogd, "c#<1>8n", TOYFLAG_SBIN))
+USE_LAST(NEWTOY(last, "f:W", TOYFLAG_BIN))
+USE_LINK(NEWTOY(link, "<2>2", TOYFLAG_USR|TOYFLAG_BIN))
+USE_LN(NEWTOY(ln, "<1vnfs", TOYFLAG_BIN))
+USE_LOAD_POLICY(NEWTOY(load_policy, "<1>1", TOYFLAG_USR|TOYFLAG_SBIN))
+USE_LOG(NEWTOY(log, "<1p:t:", TOYFLAG_USR|TOYFLAG_SBIN))
+USE_LOGGER(NEWTOY(logger, "st:p:", TOYFLAG_USR|TOYFLAG_BIN))
+USE_LOGIN(NEWTOY(login, ">1f:ph:", TOYFLAG_BIN|TOYFLAG_NEEDROOT))
+USE_LOGNAME(NEWTOY(logname, ">0", TOYFLAG_USR|TOYFLAG_BIN))
+USE_LOSETUP(NEWTOY(losetup, ">2S(sizelimit)#s(show)ro#j:fdca[!afj]", TOYFLAG_SBIN))
+USE_LS(NEWTOY(ls, "(color):;(full-time)(show-control-chars)ZgoACFHLRSabcdfhikl@mnpqrstux1[-Cxm1][-Cxml][-Cxmo][-Cxmg][-cu][-ftS][-HL][!qb]", TOYFLAG_BIN|TOYFLAG_LOCALE))
+USE_LSATTR(NEWTOY(lsattr, "vldaR", TOYFLAG_BIN))
+USE_LSMOD(NEWTOY(lsmod, NULL, TOYFLAG_SBIN))
+USE_LSOF(NEWTOY(lsof, "lp*t", TOYFLAG_USR|TOYFLAG_BIN))
+USE_LSPCI(NEWTOY(lspci, "emkn"USE_LSPCI_TEXT("@i:"), TOYFLAG_USR|TOYFLAG_BIN))
+USE_LSUSB(NEWTOY(lsusb, NULL, TOYFLAG_USR|TOYFLAG_BIN))
+USE_MAKEDEVS(NEWTOY(makedevs, "<1>1d:", TOYFLAG_USR|TOYFLAG_BIN))
+USE_MD5SUM(NEWTOY(md5sum, "bc*[!bc]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_MDEV(NEWTOY(mdev, "s", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_UMASK))
+USE_MICROCOM(NEWTOY(microcom, "<1>1s:X", TOYFLAG_BIN))
+USE_MIX(NEWTOY(mix, "c:d:l#r#", TOYFLAG_USR|TOYFLAG_BIN))
+USE_MKDIR(NEWTOY(mkdir, "<1"USE_MKDIR_Z("Z:")"vp(parent)(parents)m:", TOYFLAG_BIN|TOYFLAG_UMASK))
+USE_MKE2FS(NEWTOY(mke2fs, "<1>2g:Fnqm#N#i#b#", TOYFLAG_SBIN))
+USE_MKFIFO(NEWTOY(mkfifo, "<1"USE_MKFIFO_Z("Z:")"m:", TOYFLAG_USR|TOYFLAG_BIN))
+USE_MKNOD(NEWTOY(mknod, "<2>4m(mode):"USE_MKNOD_Z("Z:"), TOYFLAG_BIN|TOYFLAG_UMASK))
+USE_MKPASSWD(NEWTOY(mkpasswd, ">2S:m:P#=0<0", TOYFLAG_USR|TOYFLAG_BIN))
+USE_MKSWAP(NEWTOY(mkswap, "<1>1L:", TOYFLAG_SBIN))
+USE_MKTEMP(NEWTOY(mktemp, ">1uqd(directory)p(tmpdir):", TOYFLAG_BIN))
+USE_MODINFO(NEWTOY(modinfo, "<1b:k:F:0", TOYFLAG_BIN))
+USE_MODPROBE(NEWTOY(modprobe, "alrqvsDbd*", TOYFLAG_SBIN))
+USE_MORE(NEWTOY(more, 0, TOYFLAG_USR|TOYFLAG_BIN))
+USE_MOUNT(NEWTOY(mount, "?O:afnrvwt:o*[-rw]", TOYFLAG_BIN|TOYFLAG_STAYROOT))
+USE_MOUNTPOINT(NEWTOY(mountpoint, "<1qdx[-dx]", TOYFLAG_BIN))
+USE_MV(NEWTOY(mv, "<2vnF(remove-destination)fi[-ni]", TOYFLAG_BIN))
+USE_NBD_CLIENT(OLDTOY(nbd-client, nbd_client, TOYFLAG_USR|TOYFLAG_BIN))
+USE_NBD_CLIENT(NEWTOY(nbd_client, "<3>3ns", 0))
+USE_NETCAT(OLDTOY(nc, netcat, TOYFLAG_USR|TOYFLAG_BIN))
+USE_NETCAT(NEWTOY(netcat, USE_NETCAT_LISTEN("^tlL")"w#<1W#<1p#<1>65535q#<1s:f:"USE_NETCAT_LISTEN("[!tlL][!Lw]"), TOYFLAG_BIN))
+USE_NETSTAT(NEWTOY(netstat, "pWrxwutneal", TOYFLAG_BIN))
+USE_NICE(NEWTOY(nice, "^<1n#", TOYFLAG_USR|TOYFLAG_BIN))
+USE_NL(NEWTOY(nl, "v#<1=1l#w#<0=6Eb:n:s:", TOYFLAG_BIN))
+USE_NOHUP(NEWTOY(nohup, "<1^", TOYFLAG_USR|TOYFLAG_BIN))
+USE_NPROC(NEWTOY(nproc, "(all)", TOYFLAG_USR|TOYFLAG_BIN))
+USE_NSENTER(NEWTOY(nsenter, "<1F(no-fork)t#<1(target)i:(ipc);m:(mount);n:(net);p:(pid);u:(uts);U:(user);", TOYFLAG_USR|TOYFLAG_BIN))
+USE_OD(NEWTOY(od, "j#vw#<1=16N#xsodcbA:t*", TOYFLAG_USR|TOYFLAG_BIN))
+USE_ONEIT(NEWTOY(oneit, "^<1nc:p3[!pn]", TOYFLAG_SBIN))
+USE_OPENVT(NEWTOY(openvt, "c#<1>63sw", TOYFLAG_BIN|TOYFLAG_NEEDROOT))
+USE_PARTPROBE(NEWTOY(partprobe, "<1", TOYFLAG_SBIN))
+USE_PASSWD(NEWTOY(passwd, ">1a:dlu", TOYFLAG_STAYROOT|TOYFLAG_USR|TOYFLAG_BIN))
+USE_PASTE(NEWTOY(paste, "d:s", TOYFLAG_BIN|TOYFLAG_LOCALE))
+USE_PATCH(NEWTOY(patch, "(dry-run)"USE_TOYBOX_DEBUG("x")"ulp#d:i:R", TOYFLAG_USR|TOYFLAG_BIN))
+USE_PGREP(NEWTOY(pgrep, "?cld:u*U*t*s*P*g*G*fnovxL:[-no]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_PIDOF(NEWTOY(pidof, "<1so:", TOYFLAG_BIN))
+USE_PING(NEWTOY(ping, "<1>1m#t#<0>255=64c#<0=3s#<0>4088=56i%W#<0=3w#<0qf46I:[-46]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_PING(OLDTOY(ping6, ping, TOYFLAG_USR|TOYFLAG_BIN))
+USE_PIVOT_ROOT(NEWTOY(pivot_root, "<2>2", TOYFLAG_SBIN))
+USE_PKILL(NEWTOY(pkill, "?Vu*U*t*s*P*g*G*fnovxl:[-no]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_PMAP(NEWTOY(pmap, "<1xq", TOYFLAG_BIN))
+USE_REBOOT(OLDTOY(poweroff, reboot, TOYFLAG_SBIN|TOYFLAG_NEEDROOT))
+USE_PRINTENV(NEWTOY(printenv, "0(null)", TOYFLAG_USR|TOYFLAG_BIN))
+USE_PRINTF(NEWTOY(printf, "<1?^", TOYFLAG_USR|TOYFLAG_BIN))
+USE_ULIMIT(OLDTOY(prlimit, ulimit, TOYFLAG_USR|TOYFLAG_BIN))
+USE_PS(NEWTOY(ps, "k(sort)*P(ppid)*aAdeflMno*O*p(pid)*s*t*Tu*U*g*G*wZ[!ol][+Ae][!oO]", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE))
+USE_PWD(NEWTOY(pwd, ">0LP[-LP]", TOYFLAG_BIN))
+USE_PWDX(NEWTOY(pwdx, "<1a", TOYFLAG_USR|TOYFLAG_BIN))
+USE_READAHEAD(NEWTOY(readahead, NULL, TOYFLAG_BIN))
+USE_READLINK(NEWTOY(readlink, "<1>1nqmef[-mef]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_REALPATH(NEWTOY(realpath, "<1", TOYFLAG_USR|TOYFLAG_BIN))
+USE_REBOOT(NEWTOY(reboot, "fn", TOYFLAG_SBIN|TOYFLAG_NEEDROOT))
+USE_RENICE(NEWTOY(renice, "<1gpun#|", TOYFLAG_USR|TOYFLAG_BIN))
+USE_RESET(NEWTOY(reset, 0, TOYFLAG_USR|TOYFLAG_BIN))
+USE_RESTORECON(NEWTOY(restorecon, "<1DFnRrv", TOYFLAG_USR|TOYFLAG_SBIN))
+USE_REV(NEWTOY(rev, NULL, TOYFLAG_USR|TOYFLAG_BIN))
+USE_RFKILL(NEWTOY(rfkill, "<1>2", TOYFLAG_USR|TOYFLAG_SBIN))
+USE_RM(NEWTOY(rm, "fiRr[-fi]", TOYFLAG_BIN))
+USE_RMDIR(NEWTOY(rmdir, "<1p", TOYFLAG_BIN))
+USE_RMMOD(NEWTOY(rmmod, "<1wf", TOYFLAG_SBIN|TOYFLAG_NEEDROOT))
+USE_ROUTE(NEWTOY(route, "?neA:", TOYFLAG_BIN))
+USE_RUNCON(NEWTOY(runcon, "<2", TOYFLAG_USR|TOYFLAG_SBIN))
+USE_SED(NEWTOY(sed, "(help)(version)e*f*inEr[+Er]", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE|TOYFLAG_NOHELP))
+USE_SENDEVENT(NEWTOY(sendevent, "<4>4", TOYFLAG_USR|TOYFLAG_SBIN))
+USE_SEQ(NEWTOY(seq, "<1>3?f:s:w[!fw]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_SETENFORCE(NEWTOY(setenforce, "<1>1", TOYFLAG_USR|TOYFLAG_SBIN))
+USE_SETFATTR(NEWTOY(setfattr, "hn:|v:x:|[!xv]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_SETPROP(NEWTOY(setprop, "<2>2", TOYFLAG_USR|TOYFLAG_SBIN))
+USE_SETSID(NEWTOY(setsid, "^<1t", TOYFLAG_USR|TOYFLAG_BIN))
+USE_SH(NEWTOY(sh, "c:i", TOYFLAG_BIN))
+USE_SHA1SUM(NEWTOY(sha1sum, "bc*[!bc]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_SHA224SUM(OLDTOY(sha224sum, sha1sum, TOYFLAG_USR|TOYFLAG_BIN))
+USE_SHA256SUM(OLDTOY(sha256sum, sha1sum, TOYFLAG_USR|TOYFLAG_BIN))
+USE_SHA384SUM(OLDTOY(sha384sum, sha1sum, TOYFLAG_USR|TOYFLAG_BIN))
+USE_SHA512SUM(OLDTOY(sha512sum, sha1sum, TOYFLAG_USR|TOYFLAG_BIN))
+USE_SHRED(NEWTOY(shred, "<1zxus#<1n#<1o#<0f", TOYFLAG_USR|TOYFLAG_BIN))
+USE_SKELETON(NEWTOY(skeleton, "(walrus)(blubber):;(also):e@d*c#b:a", TOYFLAG_USR|TOYFLAG_BIN))
+USE_SKELETON_ALIAS(NEWTOY(skeleton_alias, "b#dq", TOYFLAG_USR|TOYFLAG_BIN))
+USE_SLEEP(NEWTOY(sleep, "<1", TOYFLAG_BIN))
+USE_SORT(NEWTOY(sort, USE_SORT_FLOAT("g")USE_SORT_BIG("S:T:m" "o:k*t:xbMcszdfi") "run", TOYFLAG_USR|TOYFLAG_BIN))
+USE_SPLIT(NEWTOY(split, ">2a#<1=2>9b#<1l#<1[!bl]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_START(NEWTOY(start, "", TOYFLAG_USR|TOYFLAG_SBIN))
+USE_STAT(NEWTOY(stat, "<1c:fLt", TOYFLAG_BIN))
+USE_STOP(NEWTOY(stop, "", TOYFLAG_USR|TOYFLAG_SBIN))
+USE_STRINGS(NEWTOY(strings, "t:an#=4<1fo", TOYFLAG_USR|TOYFLAG_BIN))
+USE_STTY(NEWTOY(stty, "?aF:g[!ag]", TOYFLAG_BIN))
+USE_SU(NEWTOY(su, "lmpc:s:", TOYFLAG_BIN|TOYFLAG_ROOTONLY))
+USE_SULOGIN(NEWTOY(sulogin, "t#<0=0", TOYFLAG_SBIN|TOYFLAG_NEEDROOT))
+USE_SWAPOFF(NEWTOY(swapoff, "<1>1", TOYFLAG_SBIN|TOYFLAG_NEEDROOT))
+USE_SWAPON(NEWTOY(swapon, "<1>1p#<0>32767d", TOYFLAG_SBIN|TOYFLAG_NEEDROOT))
+USE_SWITCH_ROOT(NEWTOY(switch_root, "<2c:h", TOYFLAG_SBIN))
+USE_SYNC(NEWTOY(sync, NULL, TOYFLAG_BIN))
+USE_SYSCTL(NEWTOY(sysctl, "^neNqwpaA[!ap][!aq][!aw][+aA]", TOYFLAG_SBIN))
+USE_SYSLOGD(NEWTOY(syslogd,">0l#<1>8=8R:b#<0>99=1s#<0=200m#<0>71582787=20O:p:f:a:nSKLD", TOYFLAG_SBIN|TOYFLAG_STAYROOT))
+USE_TAC(NEWTOY(tac, NULL, TOYFLAG_USR|TOYFLAG_BIN))
+USE_TAIL(NEWTOY(tail, "?fc-n-[-cn]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_TAR(NEWTOY(tar, "&(no-recursion)(numeric-owner)(no-same-permissions)(overwrite)(exclude)*(to-command):o(no-same-owner)p(same-permissions)k(keep-old)c(create)|h(dereference)x(extract)|t(list)|v(verbose)j(bzip2)z(gzip)O(to-stdout)m(touch)X(exclude-from)*T(files-from)*C(directory):f(file):[!txc][!jz]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_TASKSET(NEWTOY(taskset, "<1^pa", TOYFLAG_BIN|TOYFLAG_STAYROOT))
+USE_TCPSVD(NEWTOY(tcpsvd, "^<3c#=30<1C:b#=20<0u:l:hEv", TOYFLAG_USR|TOYFLAG_BIN))
+USE_TEE(NEWTOY(tee, "ia", TOYFLAG_USR|TOYFLAG_BIN))
+USE_TELNET(NEWTOY(telnet, "<1>2", TOYFLAG_BIN))
+USE_TELNETD(NEWTOY(telnetd, "w#<0b:p#<0>65535=23f:l:FSKi[!wi]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_TEST(NEWTOY(test, NULL, TOYFLAG_USR|TOYFLAG_BIN))
+USE_TFTP(NEWTOY(tftp, "<1b#<8>65464r:l:g|p|[!gp]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_TFTPD(NEWTOY(tftpd, "rcu:l", TOYFLAG_BIN))
+USE_TIME(NEWTOY(time, "<1^pv", TOYFLAG_USR|TOYFLAG_BIN))
+USE_TIMEOUT(NEWTOY(timeout, "<2^vk:s: ", TOYFLAG_BIN))
+USE_TOP(NEWTOY(top, ">0O*" "Hk*o*p*u*s#<1d%<100=3000m#n#<1bq[!oO]", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE))
+USE_TOUCH(NEWTOY(touch, "<1acd:fmr:t:h[!dtr]", TOYFLAG_BIN))
+USE_SH(OLDTOY(toysh, sh, TOYFLAG_BIN))
+USE_TR(NEWTOY(tr, "^>2<1Ccsd[+cC]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_TRACEROUTE(NEWTOY(traceroute, "<1>2i:f#<1>255=1z#<0>86400=0g*w#<0>86400=5t#<0>255=0s:q#<1>255=3p#<1>65535=33434m#<1>255=30rvndlIUF64", TOYFLAG_STAYROOT|TOYFLAG_USR|TOYFLAG_BIN))
+USE_TRACEROUTE(OLDTOY(traceroute6,traceroute, TOYFLAG_STAYROOT|TOYFLAG_USR|TOYFLAG_BIN))
+USE_TRUE(NEWTOY(true, NULL, TOYFLAG_BIN|TOYFLAG_NOHELP))
+USE_TRUNCATE(NEWTOY(truncate, "<1s:|c", TOYFLAG_BIN))
+USE_TTY(NEWTOY(tty, "s", TOYFLAG_USR|TOYFLAG_BIN))
+USE_TUNCTL(NEWTOY(tunctl, "<1>1t|d|u:T[!td]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_TCPSVD(OLDTOY(udpsvd, tcpsvd, TOYFLAG_USR|TOYFLAG_BIN))
+USE_ULIMIT(NEWTOY(ulimit, ">1P#<1SHavutsrRqpnmlifedc[-SH][!apvutsrRqnmlifedc]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_UMOUNT(NEWTOY(umount, "cndDflrat*v[!na]", TOYFLAG_BIN|TOYFLAG_STAYROOT))
+USE_UNAME(NEWTOY(uname, "oamvrns[+os]", TOYFLAG_BIN))
+USE_UNIQ(NEWTOY(uniq, "f#s#w#zicdu", TOYFLAG_USR|TOYFLAG_BIN))
+USE_UNIX2DOS(NEWTOY(unix2dos, 0, TOYFLAG_BIN))
+USE_UNLINK(NEWTOY(unlink, "<1>1", TOYFLAG_USR|TOYFLAG_BIN))
+USE_UNSHARE(NEWTOY(unshare, "<1^f(fork);r(map-root-user);i:(ipc);m:(mount);n:(net);p:(pid);u:(uts);U:(user);", TOYFLAG_USR|TOYFLAG_BIN))
+USE_UPTIME(NEWTOY(uptime, ">0ps", TOYFLAG_USR|TOYFLAG_BIN))
+USE_USERADD(NEWTOY(useradd, "<1>2u#<0G:s:g:h:SDH", TOYFLAG_NEEDROOT|TOYFLAG_UMASK|TOYFLAG_SBIN))
+USE_USERDEL(NEWTOY(userdel, "<1>1r", TOYFLAG_NEEDROOT|TOYFLAG_SBIN))
+USE_USLEEP(NEWTOY(usleep, "<1", TOYFLAG_BIN))
+USE_UUDECODE(NEWTOY(uudecode, ">1o:", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_UMASK))
+USE_UUENCODE(NEWTOY(uuencode, "<1>2m", TOYFLAG_USR|TOYFLAG_BIN))
+USE_UUIDGEN(NEWTOY(uuidgen, ">0r(random)", TOYFLAG_USR|TOYFLAG_BIN))
+USE_VCONFIG(NEWTOY(vconfig, "<2>4", TOYFLAG_NEEDROOT|TOYFLAG_SBIN))
+USE_VI(NEWTOY(vi, "<1>1", TOYFLAG_USR|TOYFLAG_BIN))
+USE_VMSTAT(NEWTOY(vmstat, ">2n", TOYFLAG_BIN))
+USE_W(NEWTOY(w, NULL, TOYFLAG_USR|TOYFLAG_BIN))
+USE_WATCH(NEWTOY(watch, "^<1n%<100=2000tebx", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE))
+USE_WC(NEWTOY(wc, "mcwl", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_LOCALE))
+USE_WGET(NEWTOY(wget, "f:", TOYFLAG_USR|TOYFLAG_BIN))
+USE_WHICH(NEWTOY(which, "<1a", TOYFLAG_USR|TOYFLAG_BIN))
+USE_WHO(NEWTOY(who, "a", TOYFLAG_USR|TOYFLAG_BIN))
+USE_WHOAMI(OLDTOY(whoami, logname, TOYFLAG_USR|TOYFLAG_BIN))
+USE_XARGS(NEWTOY(xargs, "^I:E:L#ptxrn#<1s#0[!0E]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_XXD(NEWTOY(xxd, ">1c#l#o#g#<1=2iprs#[!rs]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_XZCAT(NEWTOY(xzcat, NULL, TOYFLAG_USR|TOYFLAG_BIN))
+USE_YES(NEWTOY(yes, NULL, TOYFLAG_USR|TOYFLAG_BIN))
+USE_ZCAT(NEWTOY(zcat, "cdfk123456789[-123456789]", TOYFLAG_USR|TOYFLAG_BIN))
diff --git a/login/tags b/login/tags
@@ -0,0 +1,3124 @@
+!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
+!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
+!_TAG_OUTPUT_EXCMD mixed /number, pattern, mixed, or combineV2/
+!_TAG_OUTPUT_FILESEP slash /slash or backslash/
+!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/
+!_TAG_PATTERN_LENGTH_LIMIT 96 /0 for no limit/
+!_TAG_PROC_CWD /home/ccx/bzr/logincaps/login/ //
+!_TAG_PROGRAM_AUTHOR Universal Ctags Team //
+!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/
+!_TAG_PROGRAM_URL https://ctags.io/ /official site/
+!_TAG_PROGRAM_VERSION 5.9.0 //
+A globals.h /^ char *A;$/;" m struct:od_data typeref:typename:char *
+A globals.h /^ long m, A, B, C;$/;" m struct:grep_data typeref:typename:long
+ANDROID_LOG_DEBUG lib/portability.h /^ ANDROID_LOG_DEBUG,$/;" e enum:android_LogPriority
+ANDROID_LOG_DEFAULT lib/portability.h /^ ANDROID_LOG_DEFAULT,$/;" e enum:android_LogPriority
+ANDROID_LOG_ERROR lib/portability.h /^ ANDROID_LOG_ERROR,$/;" e enum:android_LogPriority
+ANDROID_LOG_FATAL lib/portability.h /^ ANDROID_LOG_FATAL,$/;" e enum:android_LogPriority
+ANDROID_LOG_INFO lib/portability.h /^ ANDROID_LOG_INFO,$/;" e enum:android_LogPriority
+ANDROID_LOG_SILENT lib/portability.h /^ ANDROID_LOG_SILENT,$/;" e enum:android_LogPriority
+ANDROID_LOG_UNKNOWN lib/portability.h /^ ANDROID_LOG_UNKNOWN = 0,$/;" e enum:android_LogPriority
+ANDROID_LOG_VERBOSE lib/portability.h /^ ANDROID_LOG_VERBOSE,$/;" e enum:android_LogPriority
+ANDROID_LOG_WARN lib/portability.h /^ ANDROID_LOG_WARN,$/;" e enum:android_LogPriority
+ARRAY_LEN toys.h /^#define ARRAY_LEN(/;" d
+AT_FDCWD lib/portability.h /^#define AT_FDCWD /;" d
+AT_REMOVEDIR lib/portability.h /^#define AT_REMOVEDIR /;" d
+AT_SYMLINK_NOFOLLOW lib/portability.h /^#define AT_SYMLINK_NOFOLLOW /;" d
+B globals.h /^ long m, A, B, C;$/;" m struct:grep_data typeref:typename:long
+C globals.h /^ long m, A, B, C;$/;" m struct:grep_data typeref:typename:long
+CFG_ACPI config.h /^#define CFG_ACPI /;" d
+CFG_ARP config.h /^#define CFG_ARP /;" d
+CFG_ARPING config.h /^#define CFG_ARPING /;" d
+CFG_ASCII config.h /^#define CFG_ASCII /;" d
+CFG_BASE64 config.h /^#define CFG_BASE64 /;" d
+CFG_BASENAME config.h /^#define CFG_BASENAME /;" d
+CFG_BC config.h /^#define CFG_BC /;" d
+CFG_BLKID config.h /^#define CFG_BLKID /;" d
+CFG_BLOCKDEV config.h /^#define CFG_BLOCKDEV /;" d
+CFG_BOOTCHARTD config.h /^#define CFG_BOOTCHARTD /;" d
+CFG_BRCTL config.h /^#define CFG_BRCTL /;" d
+CFG_BUNZIP2 config.h /^#define CFG_BUNZIP2 /;" d
+CFG_BZCAT config.h /^#define CFG_BZCAT /;" d
+CFG_CAL config.h /^#define CFG_CAL /;" d
+CFG_CAT config.h /^#define CFG_CAT /;" d
+CFG_CATV config.h /^#define CFG_CATV /;" d
+CFG_CAT_V config.h /^#define CFG_CAT_V /;" d
+CFG_CD config.h /^#define CFG_CD /;" d
+CFG_CHATTR config.h /^#define CFG_CHATTR /;" d
+CFG_CHCON config.h /^#define CFG_CHCON /;" d
+CFG_CHGRP config.h /^#define CFG_CHGRP /;" d
+CFG_CHMOD config.h /^#define CFG_CHMOD /;" d
+CFG_CHOWN config.h /^#define CFG_CHOWN /;" d
+CFG_CHROOT config.h /^#define CFG_CHROOT /;" d
+CFG_CHRT config.h /^#define CFG_CHRT /;" d
+CFG_CHVT config.h /^#define CFG_CHVT /;" d
+CFG_CKSUM config.h /^#define CFG_CKSUM /;" d
+CFG_CLEAR config.h /^#define CFG_CLEAR /;" d
+CFG_CMP config.h /^#define CFG_CMP /;" d
+CFG_COMM config.h /^#define CFG_COMM /;" d
+CFG_COUNT config.h /^#define CFG_COUNT /;" d
+CFG_CP config.h /^#define CFG_CP /;" d
+CFG_CPIO config.h /^#define CFG_CPIO /;" d
+CFG_CP_PRESERVE config.h /^#define CFG_CP_PRESERVE /;" d
+CFG_CRC32 config.h /^#define CFG_CRC32 /;" d
+CFG_CROND config.h /^#define CFG_CROND /;" d
+CFG_CRONTAB config.h /^#define CFG_CRONTAB /;" d
+CFG_CUT config.h /^#define CFG_CUT /;" d
+CFG_DATE config.h /^#define CFG_DATE /;" d
+CFG_DD config.h /^#define CFG_DD /;" d
+CFG_DEALLOCVT config.h /^#define CFG_DEALLOCVT /;" d
+CFG_DEBUG_DHCP config.h /^#define CFG_DEBUG_DHCP /;" d
+CFG_DEMO_MANY_OPTIONS config.h /^#define CFG_DEMO_MANY_OPTIONS /;" d
+CFG_DEMO_NUMBER config.h /^#define CFG_DEMO_NUMBER /;" d
+CFG_DEMO_SCANKEY config.h /^#define CFG_DEMO_SCANKEY /;" d
+CFG_DEMO_UTF8TOWC config.h /^#define CFG_DEMO_UTF8TOWC /;" d
+CFG_DF config.h /^#define CFG_DF /;" d
+CFG_DHCP config.h /^#define CFG_DHCP /;" d
+CFG_DHCP6 config.h /^#define CFG_DHCP6 /;" d
+CFG_DHCPD config.h /^#define CFG_DHCPD /;" d
+CFG_DIFF config.h /^#define CFG_DIFF /;" d
+CFG_DIRNAME config.h /^#define CFG_DIRNAME /;" d
+CFG_DMESG config.h /^#define CFG_DMESG /;" d
+CFG_DOS2UNIX config.h /^#define CFG_DOS2UNIX /;" d
+CFG_DU config.h /^#define CFG_DU /;" d
+CFG_DUMPLEASES config.h /^#define CFG_DUMPLEASES /;" d
+CFG_ECHO config.h /^#define CFG_ECHO /;" d
+CFG_EGREP config.h /^#define CFG_EGREP /;" d
+CFG_EJECT config.h /^#define CFG_EJECT /;" d
+CFG_ENV config.h /^#define CFG_ENV /;" d
+CFG_EXIT config.h /^#define CFG_EXIT /;" d
+CFG_EXPAND config.h /^#define CFG_EXPAND /;" d
+CFG_EXPR config.h /^#define CFG_EXPR /;" d
+CFG_FACTOR config.h /^#define CFG_FACTOR /;" d
+CFG_FALLOCATE config.h /^#define CFG_FALLOCATE /;" d
+CFG_FALSE config.h /^#define CFG_FALSE /;" d
+CFG_FDISK config.h /^#define CFG_FDISK /;" d
+CFG_FGREP config.h /^#define CFG_FGREP /;" d
+CFG_FILE config.h /^#define CFG_FILE /;" d
+CFG_FIND config.h /^#define CFG_FIND /;" d
+CFG_FLOCK config.h /^#define CFG_FLOCK /;" d
+CFG_FMT config.h /^#define CFG_FMT /;" d
+CFG_FOLD config.h /^#define CFG_FOLD /;" d
+CFG_FREE config.h /^#define CFG_FREE /;" d
+CFG_FREERAMDISK config.h /^#define CFG_FREERAMDISK /;" d
+CFG_FSCK config.h /^#define CFG_FSCK /;" d
+CFG_FSFREEZE config.h /^#define CFG_FSFREEZE /;" d
+CFG_FSTYPE config.h /^#define CFG_FSTYPE /;" d
+CFG_FSYNC config.h /^#define CFG_FSYNC /;" d
+CFG_FTPGET config.h /^#define CFG_FTPGET /;" d
+CFG_FTPPUT config.h /^#define CFG_FTPPUT /;" d
+CFG_GETCONF config.h /^#define CFG_GETCONF /;" d
+CFG_GETENFORCE config.h /^#define CFG_GETENFORCE /;" d
+CFG_GETFATTR config.h /^#define CFG_GETFATTR /;" d
+CFG_GETPROP config.h /^#define CFG_GETPROP /;" d
+CFG_GETTY config.h /^#define CFG_GETTY /;" d
+CFG_GREP config.h /^#define CFG_GREP /;" d
+CFG_GROUPADD config.h /^#define CFG_GROUPADD /;" d
+CFG_GROUPDEL config.h /^#define CFG_GROUPDEL /;" d
+CFG_GROUPS config.h /^#define CFG_GROUPS /;" d
+CFG_GUNZIP config.h /^#define CFG_GUNZIP /;" d
+CFG_GZIP config.h /^#define CFG_GZIP /;" d
+CFG_HEAD config.h /^#define CFG_HEAD /;" d
+CFG_HELLO config.h /^#define CFG_HELLO /;" d
+CFG_HELP config.h /^#define CFG_HELP /;" d
+CFG_HELP_EXTRAS config.h /^#define CFG_HELP_EXTRAS /;" d
+CFG_HEXEDIT config.h /^#define CFG_HEXEDIT /;" d
+CFG_HOST config.h /^#define CFG_HOST /;" d
+CFG_HOSTID config.h /^#define CFG_HOSTID /;" d
+CFG_HOSTNAME config.h /^#define CFG_HOSTNAME /;" d
+CFG_HWCLOCK config.h /^#define CFG_HWCLOCK /;" d
+CFG_I2CDETECT config.h /^#define CFG_I2CDETECT /;" d
+CFG_I2CDUMP config.h /^#define CFG_I2CDUMP /;" d
+CFG_I2CGET config.h /^#define CFG_I2CGET /;" d
+CFG_I2CSET config.h /^#define CFG_I2CSET /;" d
+CFG_ICONV config.h /^#define CFG_ICONV /;" d
+CFG_ID config.h /^#define CFG_ID /;" d
+CFG_ID_Z config.h /^#define CFG_ID_Z /;" d
+CFG_IFCONFIG config.h /^#define CFG_IFCONFIG /;" d
+CFG_INIT config.h /^#define CFG_INIT /;" d
+CFG_INOTIFYD config.h /^#define CFG_INOTIFYD /;" d
+CFG_INSMOD config.h /^#define CFG_INSMOD /;" d
+CFG_INSTALL config.h /^#define CFG_INSTALL /;" d
+CFG_IONICE config.h /^#define CFG_IONICE /;" d
+CFG_IORENICE config.h /^#define CFG_IORENICE /;" d
+CFG_IOTOP config.h /^#define CFG_IOTOP /;" d
+CFG_IP config.h /^#define CFG_IP /;" d
+CFG_IPCRM config.h /^#define CFG_IPCRM /;" d
+CFG_IPCS config.h /^#define CFG_IPCS /;" d
+CFG_KILL config.h /^#define CFG_KILL /;" d
+CFG_KILLALL config.h /^#define CFG_KILLALL /;" d
+CFG_KILLALL5 config.h /^#define CFG_KILLALL5 /;" d
+CFG_KLOGD config.h /^#define CFG_KLOGD /;" d
+CFG_KLOGD_SOURCE_RING_BUFFER config.h /^#define CFG_KLOGD_SOURCE_RING_BUFFER /;" d
+CFG_LAST config.h /^#define CFG_LAST /;" d
+CFG_LINK config.h /^#define CFG_LINK /;" d
+CFG_LN config.h /^#define CFG_LN /;" d
+CFG_LOAD_POLICY config.h /^#define CFG_LOAD_POLICY /;" d
+CFG_LOG config.h /^#define CFG_LOG /;" d
+CFG_LOGGER config.h /^#define CFG_LOGGER /;" d
+CFG_LOGIN config.h /^#define CFG_LOGIN /;" d
+CFG_LOGNAME config.h /^#define CFG_LOGNAME /;" d
+CFG_LOSETUP config.h /^#define CFG_LOSETUP /;" d
+CFG_LS config.h /^#define CFG_LS /;" d
+CFG_LSATTR config.h /^#define CFG_LSATTR /;" d
+CFG_LSMOD config.h /^#define CFG_LSMOD /;" d
+CFG_LSOF config.h /^#define CFG_LSOF /;" d
+CFG_LSPCI config.h /^#define CFG_LSPCI /;" d
+CFG_LSPCI_TEXT config.h /^#define CFG_LSPCI_TEXT /;" d
+CFG_LSUSB config.h /^#define CFG_LSUSB /;" d
+CFG_MAKEDEVS config.h /^#define CFG_MAKEDEVS /;" d
+CFG_MD5SUM config.h /^#define CFG_MD5SUM /;" d
+CFG_MDEV config.h /^#define CFG_MDEV /;" d
+CFG_MDEV_CONF config.h /^#define CFG_MDEV_CONF /;" d
+CFG_MICROCOM config.h /^#define CFG_MICROCOM /;" d
+CFG_MIX config.h /^#define CFG_MIX /;" d
+CFG_MKDIR config.h /^#define CFG_MKDIR /;" d
+CFG_MKDIR_Z config.h /^#define CFG_MKDIR_Z /;" d
+CFG_MKE2FS config.h /^#define CFG_MKE2FS /;" d
+CFG_MKE2FS_EXTENDED config.h /^#define CFG_MKE2FS_EXTENDED /;" d
+CFG_MKE2FS_GEN config.h /^#define CFG_MKE2FS_GEN /;" d
+CFG_MKE2FS_JOURNAL config.h /^#define CFG_MKE2FS_JOURNAL /;" d
+CFG_MKE2FS_LABEL config.h /^#define CFG_MKE2FS_LABEL /;" d
+CFG_MKFIFO config.h /^#define CFG_MKFIFO /;" d
+CFG_MKFIFO_Z config.h /^#define CFG_MKFIFO_Z /;" d
+CFG_MKNOD config.h /^#define CFG_MKNOD /;" d
+CFG_MKNOD_Z config.h /^#define CFG_MKNOD_Z /;" d
+CFG_MKPASSWD config.h /^#define CFG_MKPASSWD /;" d
+CFG_MKSWAP config.h /^#define CFG_MKSWAP /;" d
+CFG_MKTEMP config.h /^#define CFG_MKTEMP /;" d
+CFG_MODINFO config.h /^#define CFG_MODINFO /;" d
+CFG_MODPROBE config.h /^#define CFG_MODPROBE /;" d
+CFG_MORE config.h /^#define CFG_MORE /;" d
+CFG_MOUNT config.h /^#define CFG_MOUNT /;" d
+CFG_MOUNTPOINT config.h /^#define CFG_MOUNTPOINT /;" d
+CFG_MV config.h /^#define CFG_MV /;" d
+CFG_NBD_CLIENT config.h /^#define CFG_NBD_CLIENT /;" d
+CFG_NETCAT config.h /^#define CFG_NETCAT /;" d
+CFG_NETCAT_LISTEN config.h /^#define CFG_NETCAT_LISTEN /;" d
+CFG_NETSTAT config.h /^#define CFG_NETSTAT /;" d
+CFG_NICE config.h /^#define CFG_NICE /;" d
+CFG_NL config.h /^#define CFG_NL /;" d
+CFG_NOHUP config.h /^#define CFG_NOHUP /;" d
+CFG_NPROC config.h /^#define CFG_NPROC /;" d
+CFG_NSENTER config.h /^#define CFG_NSENTER /;" d
+CFG_OD config.h /^#define CFG_OD /;" d
+CFG_ONEIT config.h /^#define CFG_ONEIT /;" d
+CFG_OPENVT config.h /^#define CFG_OPENVT /;" d
+CFG_PARTPROBE config.h /^#define CFG_PARTPROBE /;" d
+CFG_PASSWD config.h /^#define CFG_PASSWD /;" d
+CFG_PASSWD_SAD config.h /^#define CFG_PASSWD_SAD /;" d
+CFG_PASTE config.h /^#define CFG_PASTE /;" d
+CFG_PATCH config.h /^#define CFG_PATCH /;" d
+CFG_PGREP config.h /^#define CFG_PGREP /;" d
+CFG_PIDOF config.h /^#define CFG_PIDOF /;" d
+CFG_PING config.h /^#define CFG_PING /;" d
+CFG_PIVOT_ROOT config.h /^#define CFG_PIVOT_ROOT /;" d
+CFG_PKILL config.h /^#define CFG_PKILL /;" d
+CFG_PMAP config.h /^#define CFG_PMAP /;" d
+CFG_PRINTENV config.h /^#define CFG_PRINTENV /;" d
+CFG_PRINTF config.h /^#define CFG_PRINTF /;" d
+CFG_PS config.h /^#define CFG_PS /;" d
+CFG_PWD config.h /^#define CFG_PWD /;" d
+CFG_PWDX config.h /^#define CFG_PWDX /;" d
+CFG_READAHEAD config.h /^#define CFG_READAHEAD /;" d
+CFG_READLINK config.h /^#define CFG_READLINK /;" d
+CFG_REALPATH config.h /^#define CFG_REALPATH /;" d
+CFG_REBOOT config.h /^#define CFG_REBOOT /;" d
+CFG_RENICE config.h /^#define CFG_RENICE /;" d
+CFG_RESET config.h /^#define CFG_RESET /;" d
+CFG_RESTORECON config.h /^#define CFG_RESTORECON /;" d
+CFG_REV config.h /^#define CFG_REV /;" d
+CFG_RFKILL config.h /^#define CFG_RFKILL /;" d
+CFG_RM config.h /^#define CFG_RM /;" d
+CFG_RMDIR config.h /^#define CFG_RMDIR /;" d
+CFG_RMMOD config.h /^#define CFG_RMMOD /;" d
+CFG_ROUTE config.h /^#define CFG_ROUTE /;" d
+CFG_RUNCON config.h /^#define CFG_RUNCON /;" d
+CFG_SED config.h /^#define CFG_SED /;" d
+CFG_SENDEVENT config.h /^#define CFG_SENDEVENT /;" d
+CFG_SEQ config.h /^#define CFG_SEQ /;" d
+CFG_SETENFORCE config.h /^#define CFG_SETENFORCE /;" d
+CFG_SETFATTR config.h /^#define CFG_SETFATTR /;" d
+CFG_SETPROP config.h /^#define CFG_SETPROP /;" d
+CFG_SETSID config.h /^#define CFG_SETSID /;" d
+CFG_SH config.h /^#define CFG_SH /;" d
+CFG_SHA1SUM config.h /^#define CFG_SHA1SUM /;" d
+CFG_SHA224SUM config.h /^#define CFG_SHA224SUM /;" d
+CFG_SHA256SUM config.h /^#define CFG_SHA256SUM /;" d
+CFG_SHA384SUM config.h /^#define CFG_SHA384SUM /;" d
+CFG_SHA512SUM config.h /^#define CFG_SHA512SUM /;" d
+CFG_SHRED config.h /^#define CFG_SHRED /;" d
+CFG_SKELETON config.h /^#define CFG_SKELETON /;" d
+CFG_SKELETON_ALIAS config.h /^#define CFG_SKELETON_ALIAS /;" d
+CFG_SLEEP config.h /^#define CFG_SLEEP /;" d
+CFG_SLEEP_FLOAT config.h /^#define CFG_SLEEP_FLOAT /;" d
+CFG_SORT config.h /^#define CFG_SORT /;" d
+CFG_SORT_BIG config.h /^#define CFG_SORT_BIG /;" d
+CFG_SORT_FLOAT config.h /^#define CFG_SORT_FLOAT /;" d
+CFG_SPLIT config.h /^#define CFG_SPLIT /;" d
+CFG_START config.h /^#define CFG_START /;" d
+CFG_STAT config.h /^#define CFG_STAT /;" d
+CFG_STOP config.h /^#define CFG_STOP /;" d
+CFG_STRINGS config.h /^#define CFG_STRINGS /;" d
+CFG_STTY config.h /^#define CFG_STTY /;" d
+CFG_SU config.h /^#define CFG_SU /;" d
+CFG_SULOGIN config.h /^#define CFG_SULOGIN /;" d
+CFG_SWAPOFF config.h /^#define CFG_SWAPOFF /;" d
+CFG_SWAPON config.h /^#define CFG_SWAPON /;" d
+CFG_SWITCH_ROOT config.h /^#define CFG_SWITCH_ROOT /;" d
+CFG_SYNC config.h /^#define CFG_SYNC /;" d
+CFG_SYSCTL config.h /^#define CFG_SYSCTL /;" d
+CFG_SYSLOGD config.h /^#define CFG_SYSLOGD /;" d
+CFG_TAC config.h /^#define CFG_TAC /;" d
+CFG_TAIL config.h /^#define CFG_TAIL /;" d
+CFG_TAIL_SEEK config.h /^#define CFG_TAIL_SEEK /;" d
+CFG_TAR config.h /^#define CFG_TAR /;" d
+CFG_TASKSET config.h /^#define CFG_TASKSET /;" d
+CFG_TCPSVD config.h /^#define CFG_TCPSVD /;" d
+CFG_TEE config.h /^#define CFG_TEE /;" d
+CFG_TELNET config.h /^#define CFG_TELNET /;" d
+CFG_TELNETD config.h /^#define CFG_TELNETD /;" d
+CFG_TEST config.h /^#define CFG_TEST /;" d
+CFG_TFTP config.h /^#define CFG_TFTP /;" d
+CFG_TFTPD config.h /^#define CFG_TFTPD /;" d
+CFG_TIME config.h /^#define CFG_TIME /;" d
+CFG_TIMEOUT config.h /^#define CFG_TIMEOUT /;" d
+CFG_TOP config.h /^#define CFG_TOP /;" d
+CFG_TOUCH config.h /^#define CFG_TOUCH /;" d
+CFG_TOYBOX config.h /^#define CFG_TOYBOX /;" d
+CFG_TOYBOX_ANDROID_SCHEDPOLICY config.h /^#define CFG_TOYBOX_ANDROID_SCHEDPOLICY /;" d
+CFG_TOYBOX_CONTAINER config.h /^#define CFG_TOYBOX_CONTAINER /;" d
+CFG_TOYBOX_DEBUG config.h /^#define CFG_TOYBOX_DEBUG /;" d
+CFG_TOYBOX_FALLOCATE config.h /^#define CFG_TOYBOX_FALLOCATE /;" d
+CFG_TOYBOX_FIFREEZE config.h /^#define CFG_TOYBOX_FIFREEZE /;" d
+CFG_TOYBOX_FLOAT config.h /^#define CFG_TOYBOX_FLOAT /;" d
+CFG_TOYBOX_FORK config.h /^#define CFG_TOYBOX_FORK /;" d
+CFG_TOYBOX_FREE config.h /^#define CFG_TOYBOX_FREE /;" d
+CFG_TOYBOX_GETRANDOM config.h /^#define CFG_TOYBOX_GETRANDOM /;" d
+CFG_TOYBOX_HELP config.h /^#define CFG_TOYBOX_HELP /;" d
+CFG_TOYBOX_HELP_DASHDASH config.h /^#define CFG_TOYBOX_HELP_DASHDASH /;" d
+CFG_TOYBOX_I18N config.h /^#define CFG_TOYBOX_I18N /;" d
+CFG_TOYBOX_ICONV config.h /^#define CFG_TOYBOX_ICONV /;" d
+CFG_TOYBOX_LIBCRYPTO config.h /^#define CFG_TOYBOX_LIBCRYPTO /;" d
+CFG_TOYBOX_LIBZ config.h /^#define CFG_TOYBOX_LIBZ /;" d
+CFG_TOYBOX_LSM_NONE config.h /^#define CFG_TOYBOX_LSM_NONE /;" d
+CFG_TOYBOX_MUSL_NOMMU_IS_BROKEN config.h /^#define CFG_TOYBOX_MUSL_NOMMU_IS_BROKEN /;" d
+CFG_TOYBOX_NORECURSE config.h /^#define CFG_TOYBOX_NORECURSE /;" d
+CFG_TOYBOX_ON_ANDROID config.h /^#define CFG_TOYBOX_ON_ANDROID /;" d
+CFG_TOYBOX_PEDANTIC_ARGS config.h /^#define CFG_TOYBOX_PEDANTIC_ARGS /;" d
+CFG_TOYBOX_PRLIMIT config.h /^#define CFG_TOYBOX_PRLIMIT /;" d
+CFG_TOYBOX_SELINUX config.h /^#define CFG_TOYBOX_SELINUX /;" d
+CFG_TOYBOX_SHADOW config.h /^#define CFG_TOYBOX_SHADOW /;" d
+CFG_TOYBOX_SMACK config.h /^#define CFG_TOYBOX_SMACK /;" d
+CFG_TOYBOX_SUID config.h /^#define CFG_TOYBOX_SUID /;" d
+CFG_TOYBOX_UID_SYS config.h /^#define CFG_TOYBOX_UID_SYS /;" d
+CFG_TOYBOX_UID_USR config.h /^#define CFG_TOYBOX_UID_USR /;" d
+CFG_TOYBOX_UTMPX config.h /^#define CFG_TOYBOX_UTMPX /;" d
+CFG_TR config.h /^#define CFG_TR /;" d
+CFG_TRACEROUTE config.h /^#define CFG_TRACEROUTE /;" d
+CFG_TRUE config.h /^#define CFG_TRUE /;" d
+CFG_TRUNCATE config.h /^#define CFG_TRUNCATE /;" d
+CFG_TTY config.h /^#define CFG_TTY /;" d
+CFG_TUNCTL config.h /^#define CFG_TUNCTL /;" d
+CFG_ULIMIT config.h /^#define CFG_ULIMIT /;" d
+CFG_UMOUNT config.h /^#define CFG_UMOUNT /;" d
+CFG_UNAME config.h /^#define CFG_UNAME /;" d
+CFG_UNIQ config.h /^#define CFG_UNIQ /;" d
+CFG_UNIX2DOS config.h /^#define CFG_UNIX2DOS /;" d
+CFG_UNLINK config.h /^#define CFG_UNLINK /;" d
+CFG_UNSHARE config.h /^#define CFG_UNSHARE /;" d
+CFG_UPTIME config.h /^#define CFG_UPTIME /;" d
+CFG_USERADD config.h /^#define CFG_USERADD /;" d
+CFG_USERDEL config.h /^#define CFG_USERDEL /;" d
+CFG_USLEEP config.h /^#define CFG_USLEEP /;" d
+CFG_UUDECODE config.h /^#define CFG_UUDECODE /;" d
+CFG_UUENCODE config.h /^#define CFG_UUENCODE /;" d
+CFG_UUIDGEN config.h /^#define CFG_UUIDGEN /;" d
+CFG_VCONFIG config.h /^#define CFG_VCONFIG /;" d
+CFG_VI config.h /^#define CFG_VI /;" d
+CFG_VMSTAT config.h /^#define CFG_VMSTAT /;" d
+CFG_W config.h /^#define CFG_W /;" d
+CFG_WATCH config.h /^#define CFG_WATCH /;" d
+CFG_WC config.h /^#define CFG_WC /;" d
+CFG_WGET config.h /^#define CFG_WGET /;" d
+CFG_WHICH config.h /^#define CFG_WHICH /;" d
+CFG_WHO config.h /^#define CFG_WHO /;" d
+CFG_WHOAMI config.h /^#define CFG_WHOAMI /;" d
+CFG_XARGS config.h /^#define CFG_XARGS /;" d
+CFG_XARGS_PEDANTIC config.h /^#define CFG_XARGS_PEDANTIC /;" d
+CFG_XXD config.h /^#define CFG_XXD /;" d
+CFG_XZCAT config.h /^#define CFG_XZCAT /;" d
+CFG_YES config.h /^#define CFG_YES /;" d
+CFG_ZCAT config.h /^#define CFG_ZCAT /;" d
+CODE lib/portability.h /^typedef struct {char *c_name; int c_val;} CODE;$/;" t typeref:struct:__anon24da09b40108
+CP_context tags.h /^#define CP_context /;" d
+CP_mode tags.h /^#define CP_mode /;" d
+CP_ownership tags.h /^#define CP_ownership /;" d
+CP_timestamps tags.h /^#define CP_timestamps /;" d
+CP_xattr tags.h /^#define CP_xattr /;" d
+D globals.h /^ char *r, *D, *d;$/;" m struct:date_data typeref:typename:char *
+DIRTREE_ABORT lib/lib.h /^#define DIRTREE_ABORT /;" d
+DIRTREE_ABORTVAL lib/lib.h /^#define DIRTREE_ABORTVAL /;" d
+DIRTREE_BREADTH lib/lib.h /^#define DIRTREE_BREADTH /;" d
+DIRTREE_COMEAGAIN lib/lib.h /^#define DIRTREE_COMEAGAIN /;" d
+DIRTREE_PROC lib/lib.h /^#define DIRTREE_PROC /;" d
+DIRTREE_RECURSE lib/lib.h /^#define DIRTREE_RECURSE /;" d
+DIRTREE_SAVE lib/lib.h /^#define DIRTREE_SAVE /;" d
+DIRTREE_SHUTUP lib/lib.h /^#define DIRTREE_SHUTUP /;" d
+DIRTREE_SYMFOLLOW lib/lib.h /^#define DIRTREE_SYMFOLLOW /;" d
+E globals.h /^ char *E, *I;$/;" m struct:xargs_data typeref:typename:char *
+F globals.h /^ char *F, *k, *b;$/;" m struct:modinfo_data typeref:typename:char *
+F globals.h /^ char *F, *p, *H;$/;" m struct:cpio_data typeref:typename:char *
+F globals.h /^ char *F;$/;" m struct:hostname_data typeref:typename:char *
+FLAGS_NODASH lib/lib.h /^#define FLAGS_NODASH /;" d
+FLAG_0 flags.h /^#define FLAG_0 /;" d
+FLAG_1 flags.h /^#define FLAG_1 /;" d
+FLAG_2 flags.h /^#define FLAG_2 /;" d
+FLAG_3 flags.h /^#define FLAG_3 /;" d
+FLAG_4 flags.h /^#define FLAG_4 /;" d
+FLAG_5 flags.h /^#define FLAG_5 /;" d
+FLAG_6 flags.h /^#define FLAG_6 /;" d
+FLAG_7 flags.h /^#define FLAG_7 /;" d
+FLAG_8 flags.h /^#define FLAG_8 /;" d
+FLAG_9 flags.h /^#define FLAG_9 /;" d
+FLAG_A flags.h /^#define FLAG_A /;" d
+FLAG_B flags.h /^#define FLAG_B /;" d
+FLAG_C flags.h /^#define FLAG_C /;" d
+FLAG_D flags.h /^#define FLAG_D /;" d
+FLAG_E flags.h /^#define FLAG_E /;" d
+FLAG_F flags.h /^#define FLAG_F /;" d
+FLAG_G flags.h /^#define FLAG_G /;" d
+FLAG_H flags.h /^#define FLAG_H /;" d
+FLAG_I flags.h /^#define FLAG_I /;" d
+FLAG_J flags.h /^#define FLAG_J /;" d
+FLAG_K flags.h /^#define FLAG_K /;" d
+FLAG_L flags.h /^#define FLAG_L /;" d
+FLAG_M flags.h /^#define FLAG_M /;" d
+FLAG_N flags.h /^#define FLAG_N /;" d
+FLAG_O flags.h /^#define FLAG_O /;" d
+FLAG_P flags.h /^#define FLAG_P /;" d
+FLAG_Q flags.h /^#define FLAG_Q /;" d
+FLAG_R flags.h /^#define FLAG_R /;" d
+FLAG_S flags.h /^#define FLAG_S /;" d
+FLAG_T flags.h /^#define FLAG_T /;" d
+FLAG_U flags.h /^#define FLAG_U /;" d
+FLAG_V flags.h /^#define FLAG_V /;" d
+FLAG_W flags.h /^#define FLAG_W /;" d
+FLAG_X flags.h /^#define FLAG_X /;" d
+FLAG_Y flags.h /^#define FLAG_Y /;" d
+FLAG_Z flags.h /^#define FLAG_Z /;" d
+FLAG_a flags.h /^#define FLAG_a /;" d
+FLAG_all flags.h /^#define FLAG_all /;" d
+FLAG_also flags.h /^#define FLAG_also /;" d
+FLAG_b flags.h /^#define FLAG_b /;" d
+FLAG_blubber flags.h /^#define FLAG_blubber /;" d
+FLAG_brief flags.h /^#define FLAG_brief /;" d
+FLAG_bzip2 flags.h /^#define FLAG_bzip2 /;" d
+FLAG_c flags.h /^#define FLAG_c /;" d
+FLAG_color flags.h /^#define FLAG_color /;" d
+FLAG_create flags.h /^#define FLAG_create /;" d
+FLAG_d flags.h /^#define FLAG_d /;" d
+FLAG_dereference flags.h /^#define FLAG_dereference /;" d
+FLAG_directory flags.h /^#define FLAG_directory /;" d
+FLAG_dry_run flags.h /^#define FLAG_dry_run /;" d
+FLAG_e flags.h /^#define FLAG_e /;" d
+FLAG_exclude flags.h /^#define FLAG_exclude /;" d
+FLAG_exclude_from flags.h /^#define FLAG_exclude_from /;" d
+FLAG_expand_tabs flags.h /^#define FLAG_expand_tabs /;" d
+FLAG_extract flags.h /^#define FLAG_extract /;" d
+FLAG_f flags.h /^#define FLAG_f /;" d
+FLAG_fast flags.h /^#define FLAG_fast /;" d
+FLAG_file flags.h /^#define FLAG_file /;" d
+FLAG_files_from flags.h /^#define FLAG_files_from /;" d
+FLAG_flushbufs flags.h /^#define FLAG_flushbufs /;" d
+FLAG_follow flags.h /^#define FLAG_follow /;" d
+FLAG_fork flags.h /^#define FLAG_fork /;" d
+FLAG_full_time flags.h /^#define FLAG_full_time /;" d
+FLAG_g flags.h /^#define FLAG_g /;" d
+FLAG_getbsz flags.h /^#define FLAG_getbsz /;" d
+FLAG_getra flags.h /^#define FLAG_getra /;" d
+FLAG_getro flags.h /^#define FLAG_getro /;" d
+FLAG_getsize flags.h /^#define FLAG_getsize /;" d
+FLAG_getsize64 flags.h /^#define FLAG_getsize64 /;" d
+FLAG_getss flags.h /^#define FLAG_getss /;" d
+FLAG_getsz flags.h /^#define FLAG_getsz /;" d
+FLAG_gzip flags.h /^#define FLAG_gzip /;" d
+FLAG_h flags.h /^#define FLAG_h /;" d
+FLAG_hctosys flags.h /^#define FLAG_hctosys /;" d
+FLAG_help flags.h /^#define FLAG_help /;" d
+FLAG_i flags.h /^#define FLAG_i /;" d
+FLAG_ignore_all_space flags.h /^#define FLAG_ignore_all_space /;" d
+FLAG_ignore_blank_lines flags.h /^#define FLAG_ignore_blank_lines /;" d
+FLAG_ignore_case flags.h /^#define FLAG_ignore_case /;" d
+FLAG_ignore_space_change flags.h /^#define FLAG_ignore_space_change /;" d
+FLAG_include flags.h /^#define FLAG_include /;" d
+FLAG_initial_tab flags.h /^#define FLAG_initial_tab /;" d
+FLAG_interactive flags.h /^#define FLAG_interactive /;" d
+FLAG_ipc flags.h /^#define FLAG_ipc /;" d
+FLAG_j flags.h /^#define FLAG_j /;" d
+FLAG_k flags.h /^#define FLAG_k /;" d
+FLAG_keep_old flags.h /^#define FLAG_keep_old /;" d
+FLAG_l flags.h /^#define FLAG_l /;" d
+FLAG_label flags.h /^#define FLAG_label /;" d
+FLAG_list flags.h /^#define FLAG_list /;" d
+FLAG_localtime flags.h /^#define FLAG_localtime /;" d
+FLAG_m flags.h /^#define FLAG_m /;" d
+FLAG_map_root_user flags.h /^#define FLAG_map_root_user /;" d
+FLAG_mathlib flags.h /^#define FLAG_mathlib /;" d
+FLAG_minimal flags.h /^#define FLAG_minimal /;" d
+FLAG_mode flags.h /^#define FLAG_mode /;" d
+FLAG_mount flags.h /^#define FLAG_mount /;" d
+FLAG_n flags.h /^#define FLAG_n /;" d
+FLAG_net flags.h /^#define FLAG_net /;" d
+FLAG_new_file flags.h /^#define FLAG_new_file /;" d
+FLAG_no_fork flags.h /^#define FLAG_no_fork /;" d
+FLAG_no_preserve_owner flags.h /^#define FLAG_no_preserve_owner /;" d
+FLAG_no_recursion flags.h /^#define FLAG_no_recursion /;" d
+FLAG_no_same_owner flags.h /^#define FLAG_no_same_owner /;" d
+FLAG_no_same_permissions flags.h /^#define FLAG_no_same_permissions /;" d
+FLAG_null flags.h /^#define FLAG_null /;" d
+FLAG_numeric_owner flags.h /^#define FLAG_numeric_owner /;" d
+FLAG_o flags.h /^#define FLAG_o /;" d
+FLAG_output_delimiter flags.h /^#define FLAG_output_delimiter /;" d
+FLAG_overwrite flags.h /^#define FLAG_overwrite /;" d
+FLAG_p flags.h /^#define FLAG_p /;" d
+FLAG_parent flags.h /^#define FLAG_parent /;" d
+FLAG_parents flags.h /^#define FLAG_parents /;" d
+FLAG_pid flags.h /^#define FLAG_pid /;" d
+FLAG_ppid flags.h /^#define FLAG_ppid /;" d
+FLAG_preserve flags.h /^#define FLAG_preserve /;" d
+FLAG_q flags.h /^#define FLAG_q /;" d
+FLAG_quiet flags.h /^#define FLAG_quiet /;" d
+FLAG_r flags.h /^#define FLAG_r /;" d
+FLAG_random flags.h /^#define FLAG_random /;" d
+FLAG_recursive flags.h /^#define FLAG_recursive /;" d
+FLAG_remove_destination flags.h /^#define FLAG_remove_destination /;" d
+FLAG_report_identical_files flags.h /^#define FLAG_report_identical_files /;" d
+FLAG_rereadpt flags.h /^#define FLAG_rereadpt /;" d
+FLAG_rtc flags.h /^#define FLAG_rtc /;" d
+FLAG_s flags.h /^#define FLAG_s /;" d
+FLAG_same_permissions flags.h /^#define FLAG_same_permissions /;" d
+FLAG_setbsz flags.h /^#define FLAG_setbsz /;" d
+FLAG_setra flags.h /^#define FLAG_setra /;" d
+FLAG_setro flags.h /^#define FLAG_setro /;" d
+FLAG_setrw flags.h /^#define FLAG_setrw /;" d
+FLAG_show flags.h /^#define FLAG_show /;" d
+FLAG_show_control_chars flags.h /^#define FLAG_show_control_chars /;" d
+FLAG_silent flags.h /^#define FLAG_silent /;" d
+FLAG_sizelimit flags.h /^#define FLAG_sizelimit /;" d
+FLAG_sort flags.h /^#define FLAG_sort /;" d
+FLAG_standard flags.h /^#define FLAG_standard /;" d
+FLAG_starting_file flags.h /^#define FLAG_starting_file /;" d
+FLAG_systohc flags.h /^#define FLAG_systohc /;" d
+FLAG_systz flags.h /^#define FLAG_systz /;" d
+FLAG_t flags.h /^#define FLAG_t /;" d
+FLAG_target flags.h /^#define FLAG_target /;" d
+FLAG_text flags.h /^#define FLAG_text /;" d
+FLAG_tmpdir flags.h /^#define FLAG_tmpdir /;" d
+FLAG_to_command flags.h /^#define FLAG_to_command /;" d
+FLAG_to_stdout flags.h /^#define FLAG_to_stdout /;" d
+FLAG_touch flags.h /^#define FLAG_touch /;" d
+FLAG_trailer flags.h /^#define FLAG_trailer /;" d
+FLAG_u flags.h /^#define FLAG_u /;" d
+FLAG_unified flags.h /^#define FLAG_unified /;" d
+FLAG_user flags.h /^#define FLAG_user /;" d
+FLAG_utc flags.h /^#define FLAG_utc /;" d
+FLAG_uts flags.h /^#define FLAG_uts /;" d
+FLAG_v flags.h /^#define FLAG_v /;" d
+FLAG_verbose flags.h /^#define FLAG_verbose /;" d
+FLAG_version flags.h /^#define FLAG_version /;" d
+FLAG_w flags.h /^#define FLAG_w /;" d
+FLAG_walrus flags.h /^#define FLAG_walrus /;" d
+FLAG_warn flags.h /^#define FLAG_warn /;" d
+FLAG_x flags.h /^#define FLAG_x /;" d
+FLAG_y flags.h /^#define FLAG_y /;" d
+FLAG_z flags.h /^#define FLAG_z /;" d
+FLOAT lib/portability.h /^typedef double FLOAT;$/;" t typeref:typename:double
+FLOAT lib/portability.h /^typedef float FLOAT;$/;" t typeref:typename:float
+FORCED_FLAG flags.h /^#define FORCED_FLAG /;" d
+FORCED_FLAGLL flags.h /^#define FORCED_FLAGLL /;" d
+FOR_login login.c /^#define FOR_login$/;" d file:
+F_GETPIPE_SZ lib/portability.h /^#define F_GETPIPE_SZ /;" d
+F_SETPIPE_SZ lib/portability.h /^#define F_SETPIPE_SZ /;" d
+G globals.h /^ struct arg_list *G, *g, *P, *s, *t, *U, *u;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0d08 typeref:struct:arg_list *
+G globals.h /^ struct arg_list *G, *g, *U, *u, *t, *s, *p, *O, *o, *P, *k;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0b08 typeref:struct:arg_list *
+GG globals.h /^ struct ptr_len gg, GG, pp, PP, ss, tt, uu, UU;$/;" m struct:ps_data typeref:struct:ptr_len
+GLOBALS login.c /^GLOBALS($/;" f file:
+GLOBALS toys.h /^#define GLOBALS(/;" d
+H globals.h /^ char *F, *p, *H;$/;" m struct:cpio_data typeref:typename:char *
+HELP_acpi help.h /^#define HELP_acpi /;" d
+HELP_arp help.h /^#define HELP_arp /;" d
+HELP_arping help.h /^#define HELP_arping /;" d
+HELP_ascii help.h /^#define HELP_ascii /;" d
+HELP_base64 help.h /^#define HELP_base64 /;" d
+HELP_basename help.h /^#define HELP_basename /;" d
+HELP_bc help.h /^#define HELP_bc /;" d
+HELP_blkid help.h /^#define HELP_blkid /;" d
+HELP_blockdev help.h /^#define HELP_blockdev /;" d
+HELP_bootchartd help.h /^#define HELP_bootchartd /;" d
+HELP_brctl help.h /^#define HELP_brctl /;" d
+HELP_bunzip2 help.h /^#define HELP_bunzip2 /;" d
+HELP_bzcat help.h /^#define HELP_bzcat /;" d
+HELP_cal help.h /^#define HELP_cal /;" d
+HELP_cat help.h /^#define HELP_cat /;" d
+HELP_cat_v help.h /^#define HELP_cat_v /;" d
+HELP_catv help.h /^#define HELP_catv /;" d
+HELP_cd help.h /^#define HELP_cd /;" d
+HELP_chattr help.h /^#define HELP_chattr /;" d
+HELP_chcon help.h /^#define HELP_chcon /;" d
+HELP_chgrp help.h /^#define HELP_chgrp /;" d
+HELP_chmod help.h /^#define HELP_chmod /;" d
+HELP_chown help.h /^#define HELP_chown /;" d
+HELP_chroot help.h /^#define HELP_chroot /;" d
+HELP_chrt help.h /^#define HELP_chrt /;" d
+HELP_chvt help.h /^#define HELP_chvt /;" d
+HELP_cksum help.h /^#define HELP_cksum /;" d
+HELP_clear help.h /^#define HELP_clear /;" d
+HELP_cmp help.h /^#define HELP_cmp /;" d
+HELP_comm help.h /^#define HELP_comm /;" d
+HELP_count help.h /^#define HELP_count /;" d
+HELP_cp help.h /^#define HELP_cp /;" d
+HELP_cp_preserve help.h /^#define HELP_cp_preserve /;" d
+HELP_cpio help.h /^#define HELP_cpio /;" d
+HELP_crc32 help.h /^#define HELP_crc32 /;" d
+HELP_crond help.h /^#define HELP_crond /;" d
+HELP_crontab help.h /^#define HELP_crontab /;" d
+HELP_cut help.h /^#define HELP_cut /;" d
+HELP_date help.h /^#define HELP_date /;" d
+HELP_dd help.h /^#define HELP_dd /;" d
+HELP_deallocvt help.h /^#define HELP_deallocvt /;" d
+HELP_demo_many_options help.h /^#define HELP_demo_many_options /;" d
+HELP_demo_number help.h /^#define HELP_demo_number /;" d
+HELP_demo_scankey help.h /^#define HELP_demo_scankey /;" d
+HELP_demo_utf8towc help.h /^#define HELP_demo_utf8towc /;" d
+HELP_df help.h /^#define HELP_df /;" d
+HELP_dhcp help.h /^#define HELP_dhcp /;" d
+HELP_dhcp6 help.h /^#define HELP_dhcp6 /;" d
+HELP_dhcpd help.h /^#define HELP_dhcpd /;" d
+HELP_diff help.h /^#define HELP_diff /;" d
+HELP_dirname help.h /^#define HELP_dirname /;" d
+HELP_dmesg help.h /^#define HELP_dmesg /;" d
+HELP_dos2unix help.h /^#define HELP_dos2unix /;" d
+HELP_du help.h /^#define HELP_du /;" d
+HELP_dumpleases help.h /^#define HELP_dumpleases /;" d
+HELP_echo help.h /^#define HELP_echo /;" d
+HELP_eject help.h /^#define HELP_eject /;" d
+HELP_env help.h /^#define HELP_env /;" d
+HELP_exit help.h /^#define HELP_exit /;" d
+HELP_expand help.h /^#define HELP_expand /;" d
+HELP_expr help.h /^#define HELP_expr /;" d
+HELP_factor help.h /^#define HELP_factor /;" d
+HELP_fallocate help.h /^#define HELP_fallocate /;" d
+HELP_false help.h /^#define HELP_false /;" d
+HELP_fdisk help.h /^#define HELP_fdisk /;" d
+HELP_file help.h /^#define HELP_file /;" d
+HELP_find help.h /^#define HELP_find /;" d
+HELP_flock help.h /^#define HELP_flock /;" d
+HELP_fmt help.h /^#define HELP_fmt /;" d
+HELP_fold help.h /^#define HELP_fold /;" d
+HELP_free help.h /^#define HELP_free /;" d
+HELP_freeramdisk help.h /^#define HELP_freeramdisk /;" d
+HELP_fsck help.h /^#define HELP_fsck /;" d
+HELP_fsfreeze help.h /^#define HELP_fsfreeze /;" d
+HELP_fstype help.h /^#define HELP_fstype /;" d
+HELP_fsync help.h /^#define HELP_fsync /;" d
+HELP_ftpget help.h /^#define HELP_ftpget /;" d
+HELP_ftpput help.h /^#define HELP_ftpput /;" d
+HELP_getconf help.h /^#define HELP_getconf /;" d
+HELP_getenforce help.h /^#define HELP_getenforce /;" d
+HELP_getfattr help.h /^#define HELP_getfattr /;" d
+HELP_getprop help.h /^#define HELP_getprop /;" d
+HELP_getty help.h /^#define HELP_getty /;" d
+HELP_grep help.h /^#define HELP_grep /;" d
+HELP_groupadd help.h /^#define HELP_groupadd /;" d
+HELP_groupdel help.h /^#define HELP_groupdel /;" d
+HELP_groups help.h /^#define HELP_groups /;" d
+HELP_gunzip help.h /^#define HELP_gunzip /;" d
+HELP_gzip help.h /^#define HELP_gzip /;" d
+HELP_head help.h /^#define HELP_head /;" d
+HELP_hello help.h /^#define HELP_hello /;" d
+HELP_help help.h /^#define HELP_help /;" d
+HELP_help_extras help.h /^#define HELP_help_extras /;" d
+HELP_hexedit help.h /^#define HELP_hexedit /;" d
+HELP_host help.h /^#define HELP_host /;" d
+HELP_hostid help.h /^#define HELP_hostid /;" d
+HELP_hostname help.h /^#define HELP_hostname /;" d
+HELP_hwclock help.h /^#define HELP_hwclock /;" d
+HELP_i2cdetect help.h /^#define HELP_i2cdetect /;" d
+HELP_i2cdump help.h /^#define HELP_i2cdump /;" d
+HELP_i2cget help.h /^#define HELP_i2cget /;" d
+HELP_i2cset help.h /^#define HELP_i2cset /;" d
+HELP_iconv help.h /^#define HELP_iconv /;" d
+HELP_id help.h /^#define HELP_id /;" d
+HELP_id_z help.h /^#define HELP_id_z /;" d
+HELP_ifconfig help.h /^#define HELP_ifconfig /;" d
+HELP_init help.h /^#define HELP_init /;" d
+HELP_inotifyd help.h /^#define HELP_inotifyd /;" d
+HELP_insmod help.h /^#define HELP_insmod /;" d
+HELP_install help.h /^#define HELP_install /;" d
+HELP_ionice help.h /^#define HELP_ionice /;" d
+HELP_iorenice help.h /^#define HELP_iorenice /;" d
+HELP_iotop help.h /^#define HELP_iotop /;" d
+HELP_ip help.h /^#define HELP_ip /;" d
+HELP_ipcrm help.h /^#define HELP_ipcrm /;" d
+HELP_ipcs help.h /^#define HELP_ipcs /;" d
+HELP_kill help.h /^#define HELP_kill /;" d
+HELP_killall help.h /^#define HELP_killall /;" d
+HELP_killall5 help.h /^#define HELP_killall5 /;" d
+HELP_klogd help.h /^#define HELP_klogd /;" d
+HELP_last help.h /^#define HELP_last /;" d
+HELP_link help.h /^#define HELP_link /;" d
+HELP_ln help.h /^#define HELP_ln /;" d
+HELP_load_policy help.h /^#define HELP_load_policy /;" d
+HELP_log help.h /^#define HELP_log /;" d
+HELP_logger help.h /^#define HELP_logger /;" d
+HELP_login help.h /^#define HELP_login /;" d
+HELP_logname help.h /^#define HELP_logname /;" d
+HELP_losetup help.h /^#define HELP_losetup /;" d
+HELP_ls help.h /^#define HELP_ls /;" d
+HELP_lsattr help.h /^#define HELP_lsattr /;" d
+HELP_lsmod help.h /^#define HELP_lsmod /;" d
+HELP_lsof help.h /^#define HELP_lsof /;" d
+HELP_lspci help.h /^#define HELP_lspci /;" d
+HELP_lspci_text help.h /^#define HELP_lspci_text /;" d
+HELP_lsusb help.h /^#define HELP_lsusb /;" d
+HELP_makedevs help.h /^#define HELP_makedevs /;" d
+HELP_md5sum help.h /^#define HELP_md5sum /;" d
+HELP_mdev help.h /^#define HELP_mdev /;" d
+HELP_mdev_conf help.h /^#define HELP_mdev_conf /;" d
+HELP_microcom help.h /^#define HELP_microcom /;" d
+HELP_mix help.h /^#define HELP_mix /;" d
+HELP_mkdir help.h /^#define HELP_mkdir /;" d
+HELP_mkdir_z help.h /^#define HELP_mkdir_z /;" d
+HELP_mke2fs help.h /^#define HELP_mke2fs /;" d
+HELP_mke2fs_extended help.h /^#define HELP_mke2fs_extended /;" d
+HELP_mke2fs_gen help.h /^#define HELP_mke2fs_gen /;" d
+HELP_mke2fs_journal help.h /^#define HELP_mke2fs_journal /;" d
+HELP_mke2fs_label help.h /^#define HELP_mke2fs_label /;" d
+HELP_mkfifo help.h /^#define HELP_mkfifo /;" d
+HELP_mkfifo_z help.h /^#define HELP_mkfifo_z /;" d
+HELP_mknod help.h /^#define HELP_mknod /;" d
+HELP_mknod_z help.h /^#define HELP_mknod_z /;" d
+HELP_mkpasswd help.h /^#define HELP_mkpasswd /;" d
+HELP_mkswap help.h /^#define HELP_mkswap /;" d
+HELP_mktemp help.h /^#define HELP_mktemp /;" d
+HELP_modinfo help.h /^#define HELP_modinfo /;" d
+HELP_modprobe help.h /^#define HELP_modprobe /;" d
+HELP_more help.h /^#define HELP_more /;" d
+HELP_mount help.h /^#define HELP_mount /;" d
+HELP_mountpoint help.h /^#define HELP_mountpoint /;" d
+HELP_mv help.h /^#define HELP_mv /;" d
+HELP_nbd_client help.h /^#define HELP_nbd_client /;" d
+HELP_netcat help.h /^#define HELP_netcat /;" d
+HELP_netcat_listen help.h /^#define HELP_netcat_listen /;" d
+HELP_netstat help.h /^#define HELP_netstat /;" d
+HELP_nice help.h /^#define HELP_nice /;" d
+HELP_nl help.h /^#define HELP_nl /;" d
+HELP_nohup help.h /^#define HELP_nohup /;" d
+HELP_nproc help.h /^#define HELP_nproc /;" d
+HELP_nsenter help.h /^#define HELP_nsenter /;" d
+HELP_od help.h /^#define HELP_od /;" d
+HELP_oneit help.h /^#define HELP_oneit /;" d
+HELP_openvt help.h /^#define HELP_openvt /;" d
+HELP_partprobe help.h /^#define HELP_partprobe /;" d
+HELP_passwd help.h /^#define HELP_passwd /;" d
+HELP_passwd_sad help.h /^#define HELP_passwd_sad /;" d
+HELP_paste help.h /^#define HELP_paste /;" d
+HELP_patch help.h /^#define HELP_patch /;" d
+HELP_pgrep help.h /^#define HELP_pgrep /;" d
+HELP_pidof help.h /^#define HELP_pidof /;" d
+HELP_ping help.h /^#define HELP_ping /;" d
+HELP_pivot_root help.h /^#define HELP_pivot_root /;" d
+HELP_pkill help.h /^#define HELP_pkill /;" d
+HELP_pmap help.h /^#define HELP_pmap /;" d
+HELP_printenv help.h /^#define HELP_printenv /;" d
+HELP_printf help.h /^#define HELP_printf /;" d
+HELP_ps help.h /^#define HELP_ps /;" d
+HELP_pwd help.h /^#define HELP_pwd /;" d
+HELP_pwdx help.h /^#define HELP_pwdx /;" d
+HELP_readahead help.h /^#define HELP_readahead /;" d
+HELP_readlink help.h /^#define HELP_readlink /;" d
+HELP_realpath help.h /^#define HELP_realpath /;" d
+HELP_reboot help.h /^#define HELP_reboot /;" d
+HELP_renice help.h /^#define HELP_renice /;" d
+HELP_reset help.h /^#define HELP_reset /;" d
+HELP_restorecon help.h /^#define HELP_restorecon /;" d
+HELP_rev help.h /^#define HELP_rev /;" d
+HELP_rfkill help.h /^#define HELP_rfkill /;" d
+HELP_rm help.h /^#define HELP_rm /;" d
+HELP_rmdir help.h /^#define HELP_rmdir /;" d
+HELP_rmmod help.h /^#define HELP_rmmod /;" d
+HELP_route help.h /^#define HELP_route /;" d
+HELP_runcon help.h /^#define HELP_runcon /;" d
+HELP_sed help.h /^#define HELP_sed /;" d
+HELP_sendevent help.h /^#define HELP_sendevent /;" d
+HELP_seq help.h /^#define HELP_seq /;" d
+HELP_setenforce help.h /^#define HELP_setenforce /;" d
+HELP_setfattr help.h /^#define HELP_setfattr /;" d
+HELP_setprop help.h /^#define HELP_setprop /;" d
+HELP_setsid help.h /^#define HELP_setsid /;" d
+HELP_sh help.h /^#define HELP_sh /;" d
+HELP_sha1sum help.h /^#define HELP_sha1sum /;" d
+HELP_sha224sum help.h /^#define HELP_sha224sum /;" d
+HELP_sha256sum help.h /^#define HELP_sha256sum /;" d
+HELP_sha384sum help.h /^#define HELP_sha384sum /;" d
+HELP_sha512sum help.h /^#define HELP_sha512sum /;" d
+HELP_shred help.h /^#define HELP_shred /;" d
+HELP_skeleton help.h /^#define HELP_skeleton /;" d
+HELP_skeleton_alias help.h /^#define HELP_skeleton_alias /;" d
+HELP_sleep help.h /^#define HELP_sleep /;" d
+HELP_sleep_float help.h /^#define HELP_sleep_float /;" d
+HELP_sort help.h /^#define HELP_sort /;" d
+HELP_sort_big help.h /^#define HELP_sort_big /;" d
+HELP_sort_float help.h /^#define HELP_sort_float /;" d
+HELP_split help.h /^#define HELP_split /;" d
+HELP_start help.h /^#define HELP_start /;" d
+HELP_stat help.h /^#define HELP_stat /;" d
+HELP_stop help.h /^#define HELP_stop /;" d
+HELP_strings help.h /^#define HELP_strings /;" d
+HELP_stty help.h /^#define HELP_stty /;" d
+HELP_su help.h /^#define HELP_su /;" d
+HELP_sulogin help.h /^#define HELP_sulogin /;" d
+HELP_swapoff help.h /^#define HELP_swapoff /;" d
+HELP_swapon help.h /^#define HELP_swapon /;" d
+HELP_switch_root help.h /^#define HELP_switch_root /;" d
+HELP_sync help.h /^#define HELP_sync /;" d
+HELP_sysctl help.h /^#define HELP_sysctl /;" d
+HELP_syslogd help.h /^#define HELP_syslogd /;" d
+HELP_tac help.h /^#define HELP_tac /;" d
+HELP_tail help.h /^#define HELP_tail /;" d
+HELP_tail_seek help.h /^#define HELP_tail_seek /;" d
+HELP_tar help.h /^#define HELP_tar /;" d
+HELP_taskset help.h /^#define HELP_taskset /;" d
+HELP_tcpsvd help.h /^#define HELP_tcpsvd /;" d
+HELP_tee help.h /^#define HELP_tee /;" d
+HELP_telnet help.h /^#define HELP_telnet /;" d
+HELP_telnetd help.h /^#define HELP_telnetd /;" d
+HELP_test help.h /^#define HELP_test /;" d
+HELP_tftp help.h /^#define HELP_tftp /;" d
+HELP_tftpd help.h /^#define HELP_tftpd /;" d
+HELP_time help.h /^#define HELP_time /;" d
+HELP_timeout help.h /^#define HELP_timeout /;" d
+HELP_top help.h /^#define HELP_top /;" d
+HELP_touch help.h /^#define HELP_touch /;" d
+HELP_toybox help.h /^#define HELP_toybox /;" d
+HELP_toybox_debug help.h /^#define HELP_toybox_debug /;" d
+HELP_toybox_float help.h /^#define HELP_toybox_float /;" d
+HELP_toybox_free help.h /^#define HELP_toybox_free /;" d
+HELP_toybox_help help.h /^#define HELP_toybox_help /;" d
+HELP_toybox_help_dashdash help.h /^#define HELP_toybox_help_dashdash /;" d
+HELP_toybox_i18n help.h /^#define HELP_toybox_i18n /;" d
+HELP_toybox_libcrypto help.h /^#define HELP_toybox_libcrypto /;" d
+HELP_toybox_libz help.h /^#define HELP_toybox_libz /;" d
+HELP_toybox_lsm_none help.h /^#define HELP_toybox_lsm_none /;" d
+HELP_toybox_musl_nommu_is_broken help.h /^#define HELP_toybox_musl_nommu_is_broken /;" d
+HELP_toybox_norecurse help.h /^#define HELP_toybox_norecurse /;" d
+HELP_toybox_pedantic_args help.h /^#define HELP_toybox_pedantic_args /;" d
+HELP_toybox_selinux help.h /^#define HELP_toybox_selinux /;" d
+HELP_toybox_smack help.h /^#define HELP_toybox_smack /;" d
+HELP_toybox_suid help.h /^#define HELP_toybox_suid /;" d
+HELP_toybox_uid_sys help.h /^#define HELP_toybox_uid_sys /;" d
+HELP_toybox_uid_usr help.h /^#define HELP_toybox_uid_usr /;" d
+HELP_tr help.h /^#define HELP_tr /;" d
+HELP_traceroute help.h /^#define HELP_traceroute /;" d
+HELP_true help.h /^#define HELP_true /;" d
+HELP_truncate help.h /^#define HELP_truncate /;" d
+HELP_tty help.h /^#define HELP_tty /;" d
+HELP_tunctl help.h /^#define HELP_tunctl /;" d
+HELP_ulimit help.h /^#define HELP_ulimit /;" d
+HELP_umount help.h /^#define HELP_umount /;" d
+HELP_uname help.h /^#define HELP_uname /;" d
+HELP_uniq help.h /^#define HELP_uniq /;" d
+HELP_unix2dos help.h /^#define HELP_unix2dos /;" d
+HELP_unlink help.h /^#define HELP_unlink /;" d
+HELP_unshare help.h /^#define HELP_unshare /;" d
+HELP_uptime help.h /^#define HELP_uptime /;" d
+HELP_useradd help.h /^#define HELP_useradd /;" d
+HELP_userdel help.h /^#define HELP_userdel /;" d
+HELP_usleep help.h /^#define HELP_usleep /;" d
+HELP_uudecode help.h /^#define HELP_uudecode /;" d
+HELP_uuencode help.h /^#define HELP_uuencode /;" d
+HELP_uuidgen help.h /^#define HELP_uuidgen /;" d
+HELP_vconfig help.h /^#define HELP_vconfig /;" d
+HELP_vi help.h /^#define HELP_vi /;" d
+HELP_vmstat help.h /^#define HELP_vmstat /;" d
+HELP_w help.h /^#define HELP_w /;" d
+HELP_watch help.h /^#define HELP_watch /;" d
+HELP_wc help.h /^#define HELP_wc /;" d
+HELP_wget help.h /^#define HELP_wget /;" d
+HELP_which help.h /^#define HELP_which /;" d
+HELP_who help.h /^#define HELP_who /;" d
+HELP_whoami help.h /^#define HELP_whoami /;" d
+HELP_xargs help.h /^#define HELP_xargs /;" d
+HELP_xargs_pedantic help.h /^#define HELP_xargs_pedantic /;" d
+HELP_xxd help.h /^#define HELP_xxd /;" d
+HELP_xzcat help.h /^#define HELP_xzcat /;" d
+HELP_yes help.h /^#define HELP_yes /;" d
+HELP_zcat help.h /^#define HELP_zcat /;" d
+HR_1000 lib/lib.h /^#define HR_1000 /;" d
+HR_B lib/lib.h /^#define HR_B /;" d
+HR_SPACE lib/lib.h /^#define HR_SPACE /;" d
+I globals.h /^ char *E, *I;$/;" m struct:xargs_data typeref:typename:char *
+I globals.h /^ char *I;$/;" m struct:ping_data typeref:typename:char *
+IS_BIG_ENDIAN lib/portability.h /^#define IS_BIG_ENDIAN /;" d
+IS_LITTLE_ENDIAN lib/portability.h /^#define IS_LITTLE_ENDIAN /;" d
+KEY_ADOWN tags.h /^#define KEY_ADOWN /;" d
+KEY_AF1 tags.h /^#define KEY_AF1 /;" d
+KEY_ALEFT tags.h /^#define KEY_ALEFT /;" d
+KEY_ARIGHT tags.h /^#define KEY_ARIGHT /;" d
+KEY_AUP tags.h /^#define KEY_AUP /;" d
+KEY_CDOWN tags.h /^#define KEY_CDOWN /;" d
+KEY_CF1 tags.h /^#define KEY_CF1 /;" d
+KEY_CLEFT tags.h /^#define KEY_CLEFT /;" d
+KEY_CRIGHT tags.h /^#define KEY_CRIGHT /;" d
+KEY_CUP tags.h /^#define KEY_CUP /;" d
+KEY_DOWN tags.h /^#define KEY_DOWN /;" d
+KEY_END tags.h /^#define KEY_END /;" d
+KEY_F1 tags.h /^#define KEY_F1 /;" d
+KEY_F2 tags.h /^#define KEY_F2 /;" d
+KEY_F3 tags.h /^#define KEY_F3 /;" d
+KEY_F4 tags.h /^#define KEY_F4 /;" d
+KEY_F5 tags.h /^#define KEY_F5 /;" d
+KEY_F6 tags.h /^#define KEY_F6 /;" d
+KEY_F7 tags.h /^#define KEY_F7 /;" d
+KEY_F8 tags.h /^#define KEY_F8 /;" d
+KEY_F9 tags.h /^#define KEY_F9 /;" d
+KEY_HOME tags.h /^#define KEY_HOME /;" d
+KEY_INSERT tags.h /^#define KEY_INSERT /;" d
+KEY_LEFT tags.h /^#define KEY_LEFT /;" d
+KEY_PGDN tags.h /^#define KEY_PGDN /;" d
+KEY_PGUP tags.h /^#define KEY_PGUP /;" d
+KEY_RIGHT tags.h /^#define KEY_RIGHT /;" d
+KEY_SDOWN tags.h /^#define KEY_SDOWN /;" d
+KEY_SF1 tags.h /^#define KEY_SF1 /;" d
+KEY_SLEFT tags.h /^#define KEY_SLEFT /;" d
+KEY_SRIGHT tags.h /^#define KEY_SRIGHT /;" d
+KEY_SUP tags.h /^#define KEY_SUP /;" d
+KEY_UP tags.h /^#define KEY_UP /;" d
+L globals.h /^ char *L;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0d08 typeref:typename:char *
+L globals.h /^ char *L;$/;" m struct:mkswap_data typeref:typename:char *
+L globals.h /^ long s, n, L;$/;" m struct:xargs_data typeref:typename:long
+L_list globals.h /^ struct arg_list *L_list;$/;" m struct:diff_data typeref:struct:arg_list *
+M globals.h /^ struct arg_list *f, *e, *M, *S;$/;" m struct:grep_data typeref:struct:arg_list *
+MAX_SALT_LEN lib/pending.h /^#define MAX_SALT_LEN /;" d
+MKPATHAT_MAKE lib/lib.h /^#define MKPATHAT_MAKE /;" d
+MKPATHAT_MKLAST lib/lib.h /^#define MKPATHAT_MKLAST /;" d
+MKPATHAT_VERBOSE lib/lib.h /^#define MKPATHAT_VERBOSE /;" d
+MNT_DETACH lib/portability.h /^#define MNT_DETACH /;" d
+N globals.h /^ long N, w, j;$/;" m struct:od_data typeref:typename:long
+NEED_OPTIONS main.c /^static const int NEED_OPTIONS =$/;" v typeref:typename:const int file:
+NEWTOY lib/help.c /^#define NEWTOY(/;" d file:
+NEWTOY main.c /^#define NEWTOY(/;" d file:
+NEWTOY toys.h /^#define NEWTOY(/;" d
+NOEXIT lib/lib.h /^#define NOEXIT(/;" d
+NO_ARGS lib/toyflags.h /^#define NO_ARGS /;" d
+O globals.h /^ struct arg_list *G, *g, *U, *u, *t, *s, *p, *O, *o, *P, *k;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0b08 typeref:struct:arg_list *
+O globals.h /^ struct arg_list *u, *p, *o, *k, *O;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0c08 typeref:struct:arg_list *
+O globals.h /^ char *d, *O;$/;" m struct:cut_data typeref:typename:char *
+OLDTOY lib/help.c /^#define OLDTOY(/;" d file:
+OLDTOY main.c /^#define OLDTOY(/;" d file:
+OLDTOY toys.h /^#define OLDTOY(/;" d
+OPTSTR_acpi flags.h /^#define OPTSTR_acpi /;" d
+OPTSTR_arp flags.h /^#define OPTSTR_arp /;" d
+OPTSTR_arping flags.h /^#define OPTSTR_arping /;" d
+OPTSTR_ascii flags.h /^#define OPTSTR_ascii /;" d
+OPTSTR_base64 flags.h /^#define OPTSTR_base64 /;" d
+OPTSTR_basename flags.h /^#define OPTSTR_basename /;" d
+OPTSTR_bc flags.h /^#define OPTSTR_bc /;" d
+OPTSTR_blkid flags.h /^#define OPTSTR_blkid /;" d
+OPTSTR_blockdev flags.h /^#define OPTSTR_blockdev /;" d
+OPTSTR_bootchartd flags.h /^#define OPTSTR_bootchartd /;" d
+OPTSTR_brctl flags.h /^#define OPTSTR_brctl /;" d
+OPTSTR_bunzip2 flags.h /^#define OPTSTR_bunzip2 /;" d
+OPTSTR_bzcat flags.h /^#define OPTSTR_bzcat /;" d
+OPTSTR_cal flags.h /^#define OPTSTR_cal /;" d
+OPTSTR_cat flags.h /^#define OPTSTR_cat /;" d
+OPTSTR_catv flags.h /^#define OPTSTR_catv /;" d
+OPTSTR_cd flags.h /^#define OPTSTR_cd /;" d
+OPTSTR_chattr flags.h /^#define OPTSTR_chattr /;" d
+OPTSTR_chcon flags.h /^#define OPTSTR_chcon /;" d
+OPTSTR_chgrp flags.h /^#define OPTSTR_chgrp /;" d
+OPTSTR_chmod flags.h /^#define OPTSTR_chmod /;" d
+OPTSTR_chroot flags.h /^#define OPTSTR_chroot /;" d
+OPTSTR_chrt flags.h /^#define OPTSTR_chrt /;" d
+OPTSTR_chvt flags.h /^#define OPTSTR_chvt /;" d
+OPTSTR_cksum flags.h /^#define OPTSTR_cksum /;" d
+OPTSTR_clear flags.h /^#define OPTSTR_clear /;" d
+OPTSTR_cmp flags.h /^#define OPTSTR_cmp /;" d
+OPTSTR_comm flags.h /^#define OPTSTR_comm /;" d
+OPTSTR_count flags.h /^#define OPTSTR_count /;" d
+OPTSTR_cp flags.h /^#define OPTSTR_cp /;" d
+OPTSTR_cpio flags.h /^#define OPTSTR_cpio /;" d
+OPTSTR_crc32 flags.h /^#define OPTSTR_crc32 /;" d
+OPTSTR_crond flags.h /^#define OPTSTR_crond /;" d
+OPTSTR_crontab flags.h /^#define OPTSTR_crontab /;" d
+OPTSTR_cut flags.h /^#define OPTSTR_cut /;" d
+OPTSTR_date flags.h /^#define OPTSTR_date /;" d
+OPTSTR_dd flags.h /^#define OPTSTR_dd /;" d
+OPTSTR_deallocvt flags.h /^#define OPTSTR_deallocvt /;" d
+OPTSTR_demo_many_options flags.h /^#define OPTSTR_demo_many_options /;" d
+OPTSTR_demo_number flags.h /^#define OPTSTR_demo_number /;" d
+OPTSTR_demo_scankey flags.h /^#define OPTSTR_demo_scankey /;" d
+OPTSTR_demo_utf8towc flags.h /^#define OPTSTR_demo_utf8towc /;" d
+OPTSTR_df flags.h /^#define OPTSTR_df /;" d
+OPTSTR_dhcp flags.h /^#define OPTSTR_dhcp /;" d
+OPTSTR_dhcp6 flags.h /^#define OPTSTR_dhcp6 /;" d
+OPTSTR_dhcpd flags.h /^#define OPTSTR_dhcpd /;" d
+OPTSTR_diff flags.h /^#define OPTSTR_diff /;" d
+OPTSTR_dirname flags.h /^#define OPTSTR_dirname /;" d
+OPTSTR_dmesg flags.h /^#define OPTSTR_dmesg /;" d
+OPTSTR_dos2unix flags.h /^#define OPTSTR_dos2unix /;" d
+OPTSTR_du flags.h /^#define OPTSTR_du /;" d
+OPTSTR_dumpleases flags.h /^#define OPTSTR_dumpleases /;" d
+OPTSTR_echo flags.h /^#define OPTSTR_echo /;" d
+OPTSTR_eject flags.h /^#define OPTSTR_eject /;" d
+OPTSTR_env flags.h /^#define OPTSTR_env /;" d
+OPTSTR_exit flags.h /^#define OPTSTR_exit /;" d
+OPTSTR_expand flags.h /^#define OPTSTR_expand /;" d
+OPTSTR_expr flags.h /^#define OPTSTR_expr /;" d
+OPTSTR_factor flags.h /^#define OPTSTR_factor /;" d
+OPTSTR_fallocate flags.h /^#define OPTSTR_fallocate /;" d
+OPTSTR_false flags.h /^#define OPTSTR_false /;" d
+OPTSTR_fdisk flags.h /^#define OPTSTR_fdisk /;" d
+OPTSTR_file flags.h /^#define OPTSTR_file /;" d
+OPTSTR_find flags.h /^#define OPTSTR_find /;" d
+OPTSTR_flock flags.h /^#define OPTSTR_flock /;" d
+OPTSTR_fmt flags.h /^#define OPTSTR_fmt /;" d
+OPTSTR_fold flags.h /^#define OPTSTR_fold /;" d
+OPTSTR_free flags.h /^#define OPTSTR_free /;" d
+OPTSTR_freeramdisk flags.h /^#define OPTSTR_freeramdisk /;" d
+OPTSTR_fsck flags.h /^#define OPTSTR_fsck /;" d
+OPTSTR_fsfreeze flags.h /^#define OPTSTR_fsfreeze /;" d
+OPTSTR_fstype flags.h /^#define OPTSTR_fstype /;" d
+OPTSTR_fsync flags.h /^#define OPTSTR_fsync /;" d
+OPTSTR_ftpget flags.h /^#define OPTSTR_ftpget /;" d
+OPTSTR_getconf flags.h /^#define OPTSTR_getconf /;" d
+OPTSTR_getenforce flags.h /^#define OPTSTR_getenforce /;" d
+OPTSTR_getfattr flags.h /^#define OPTSTR_getfattr /;" d
+OPTSTR_getprop flags.h /^#define OPTSTR_getprop /;" d
+OPTSTR_getty flags.h /^#define OPTSTR_getty /;" d
+OPTSTR_grep flags.h /^#define OPTSTR_grep /;" d
+OPTSTR_groupadd flags.h /^#define OPTSTR_groupadd /;" d
+OPTSTR_groupdel flags.h /^#define OPTSTR_groupdel /;" d
+OPTSTR_groups flags.h /^#define OPTSTR_groups /;" d
+OPTSTR_gunzip flags.h /^#define OPTSTR_gunzip /;" d
+OPTSTR_gzip flags.h /^#define OPTSTR_gzip /;" d
+OPTSTR_head flags.h /^#define OPTSTR_head /;" d
+OPTSTR_hello flags.h /^#define OPTSTR_hello /;" d
+OPTSTR_help flags.h /^#define OPTSTR_help /;" d
+OPTSTR_hexedit flags.h /^#define OPTSTR_hexedit /;" d
+OPTSTR_host flags.h /^#define OPTSTR_host /;" d
+OPTSTR_hostid flags.h /^#define OPTSTR_hostid /;" d
+OPTSTR_hostname flags.h /^#define OPTSTR_hostname /;" d
+OPTSTR_hwclock flags.h /^#define OPTSTR_hwclock /;" d
+OPTSTR_i2cdetect flags.h /^#define OPTSTR_i2cdetect /;" d
+OPTSTR_i2cdump flags.h /^#define OPTSTR_i2cdump /;" d
+OPTSTR_i2cget flags.h /^#define OPTSTR_i2cget /;" d
+OPTSTR_i2cset flags.h /^#define OPTSTR_i2cset /;" d
+OPTSTR_iconv flags.h /^#define OPTSTR_iconv /;" d
+OPTSTR_id flags.h /^#define OPTSTR_id /;" d
+OPTSTR_ifconfig flags.h /^#define OPTSTR_ifconfig /;" d
+OPTSTR_init flags.h /^#define OPTSTR_init /;" d
+OPTSTR_inotifyd flags.h /^#define OPTSTR_inotifyd /;" d
+OPTSTR_insmod flags.h /^#define OPTSTR_insmod /;" d
+OPTSTR_install flags.h /^#define OPTSTR_install /;" d
+OPTSTR_ionice flags.h /^#define OPTSTR_ionice /;" d
+OPTSTR_iorenice flags.h /^#define OPTSTR_iorenice /;" d
+OPTSTR_iotop flags.h /^#define OPTSTR_iotop /;" d
+OPTSTR_ip flags.h /^#define OPTSTR_ip /;" d
+OPTSTR_ipcrm flags.h /^#define OPTSTR_ipcrm /;" d
+OPTSTR_ipcs flags.h /^#define OPTSTR_ipcs /;" d
+OPTSTR_kill flags.h /^#define OPTSTR_kill /;" d
+OPTSTR_killall flags.h /^#define OPTSTR_killall /;" d
+OPTSTR_killall5 flags.h /^#define OPTSTR_killall5 /;" d
+OPTSTR_klogd flags.h /^#define OPTSTR_klogd /;" d
+OPTSTR_last flags.h /^#define OPTSTR_last /;" d
+OPTSTR_link flags.h /^#define OPTSTR_link /;" d
+OPTSTR_ln flags.h /^#define OPTSTR_ln /;" d
+OPTSTR_load_policy flags.h /^#define OPTSTR_load_policy /;" d
+OPTSTR_log flags.h /^#define OPTSTR_log /;" d
+OPTSTR_logger flags.h /^#define OPTSTR_logger /;" d
+OPTSTR_login flags.h /^#define OPTSTR_login /;" d
+OPTSTR_logname flags.h /^#define OPTSTR_logname /;" d
+OPTSTR_losetup flags.h /^#define OPTSTR_losetup /;" d
+OPTSTR_ls flags.h /^#define OPTSTR_ls /;" d
+OPTSTR_lsattr flags.h /^#define OPTSTR_lsattr /;" d
+OPTSTR_lsmod flags.h /^#define OPTSTR_lsmod /;" d
+OPTSTR_lsof flags.h /^#define OPTSTR_lsof /;" d
+OPTSTR_lspci flags.h /^#define OPTSTR_lspci /;" d
+OPTSTR_lsusb flags.h /^#define OPTSTR_lsusb /;" d
+OPTSTR_makedevs flags.h /^#define OPTSTR_makedevs /;" d
+OPTSTR_md5sum flags.h /^#define OPTSTR_md5sum /;" d
+OPTSTR_mdev flags.h /^#define OPTSTR_mdev /;" d
+OPTSTR_microcom flags.h /^#define OPTSTR_microcom /;" d
+OPTSTR_mix flags.h /^#define OPTSTR_mix /;" d
+OPTSTR_mkdir flags.h /^#define OPTSTR_mkdir /;" d
+OPTSTR_mke2fs flags.h /^#define OPTSTR_mke2fs /;" d
+OPTSTR_mkfifo flags.h /^#define OPTSTR_mkfifo /;" d
+OPTSTR_mknod flags.h /^#define OPTSTR_mknod /;" d
+OPTSTR_mkpasswd flags.h /^#define OPTSTR_mkpasswd /;" d
+OPTSTR_mkswap flags.h /^#define OPTSTR_mkswap /;" d
+OPTSTR_mktemp flags.h /^#define OPTSTR_mktemp /;" d
+OPTSTR_modinfo flags.h /^#define OPTSTR_modinfo /;" d
+OPTSTR_modprobe flags.h /^#define OPTSTR_modprobe /;" d
+OPTSTR_more flags.h /^#define OPTSTR_more /;" d
+OPTSTR_mount flags.h /^#define OPTSTR_mount /;" d
+OPTSTR_mountpoint flags.h /^#define OPTSTR_mountpoint /;" d
+OPTSTR_mv flags.h /^#define OPTSTR_mv /;" d
+OPTSTR_nbd_client flags.h /^#define OPTSTR_nbd_client /;" d
+OPTSTR_netcat flags.h /^#define OPTSTR_netcat /;" d
+OPTSTR_netstat flags.h /^#define OPTSTR_netstat /;" d
+OPTSTR_nice flags.h /^#define OPTSTR_nice /;" d
+OPTSTR_nl flags.h /^#define OPTSTR_nl /;" d
+OPTSTR_nohup flags.h /^#define OPTSTR_nohup /;" d
+OPTSTR_nproc flags.h /^#define OPTSTR_nproc /;" d
+OPTSTR_nsenter flags.h /^#define OPTSTR_nsenter /;" d
+OPTSTR_od flags.h /^#define OPTSTR_od /;" d
+OPTSTR_oneit flags.h /^#define OPTSTR_oneit /;" d
+OPTSTR_openvt flags.h /^#define OPTSTR_openvt /;" d
+OPTSTR_partprobe flags.h /^#define OPTSTR_partprobe /;" d
+OPTSTR_passwd flags.h /^#define OPTSTR_passwd /;" d
+OPTSTR_paste flags.h /^#define OPTSTR_paste /;" d
+OPTSTR_patch flags.h /^#define OPTSTR_patch /;" d
+OPTSTR_pgrep flags.h /^#define OPTSTR_pgrep /;" d
+OPTSTR_pidof flags.h /^#define OPTSTR_pidof /;" d
+OPTSTR_ping flags.h /^#define OPTSTR_ping /;" d
+OPTSTR_pivot_root flags.h /^#define OPTSTR_pivot_root /;" d
+OPTSTR_pkill flags.h /^#define OPTSTR_pkill /;" d
+OPTSTR_pmap flags.h /^#define OPTSTR_pmap /;" d
+OPTSTR_printenv flags.h /^#define OPTSTR_printenv /;" d
+OPTSTR_printf flags.h /^#define OPTSTR_printf /;" d
+OPTSTR_ps flags.h /^#define OPTSTR_ps /;" d
+OPTSTR_pwd flags.h /^#define OPTSTR_pwd /;" d
+OPTSTR_pwdx flags.h /^#define OPTSTR_pwdx /;" d
+OPTSTR_readahead flags.h /^#define OPTSTR_readahead /;" d
+OPTSTR_readlink flags.h /^#define OPTSTR_readlink /;" d
+OPTSTR_realpath flags.h /^#define OPTSTR_realpath /;" d
+OPTSTR_reboot flags.h /^#define OPTSTR_reboot /;" d
+OPTSTR_renice flags.h /^#define OPTSTR_renice /;" d
+OPTSTR_reset flags.h /^#define OPTSTR_reset /;" d
+OPTSTR_restorecon flags.h /^#define OPTSTR_restorecon /;" d
+OPTSTR_rev flags.h /^#define OPTSTR_rev /;" d
+OPTSTR_rfkill flags.h /^#define OPTSTR_rfkill /;" d
+OPTSTR_rm flags.h /^#define OPTSTR_rm /;" d
+OPTSTR_rmdir flags.h /^#define OPTSTR_rmdir /;" d
+OPTSTR_rmmod flags.h /^#define OPTSTR_rmmod /;" d
+OPTSTR_route flags.h /^#define OPTSTR_route /;" d
+OPTSTR_runcon flags.h /^#define OPTSTR_runcon /;" d
+OPTSTR_sed flags.h /^#define OPTSTR_sed /;" d
+OPTSTR_sendevent flags.h /^#define OPTSTR_sendevent /;" d
+OPTSTR_seq flags.h /^#define OPTSTR_seq /;" d
+OPTSTR_setenforce flags.h /^#define OPTSTR_setenforce /;" d
+OPTSTR_setfattr flags.h /^#define OPTSTR_setfattr /;" d
+OPTSTR_setprop flags.h /^#define OPTSTR_setprop /;" d
+OPTSTR_setsid flags.h /^#define OPTSTR_setsid /;" d
+OPTSTR_sh flags.h /^#define OPTSTR_sh /;" d
+OPTSTR_sha1sum flags.h /^#define OPTSTR_sha1sum /;" d
+OPTSTR_shred flags.h /^#define OPTSTR_shred /;" d
+OPTSTR_skeleton flags.h /^#define OPTSTR_skeleton /;" d
+OPTSTR_skeleton_alias flags.h /^#define OPTSTR_skeleton_alias /;" d
+OPTSTR_sleep flags.h /^#define OPTSTR_sleep /;" d
+OPTSTR_sort flags.h /^#define OPTSTR_sort /;" d
+OPTSTR_split flags.h /^#define OPTSTR_split /;" d
+OPTSTR_start flags.h /^#define OPTSTR_start /;" d
+OPTSTR_stat flags.h /^#define OPTSTR_stat /;" d
+OPTSTR_stop flags.h /^#define OPTSTR_stop /;" d
+OPTSTR_strings flags.h /^#define OPTSTR_strings /;" d
+OPTSTR_stty flags.h /^#define OPTSTR_stty /;" d
+OPTSTR_su flags.h /^#define OPTSTR_su /;" d
+OPTSTR_sulogin flags.h /^#define OPTSTR_sulogin /;" d
+OPTSTR_swapoff flags.h /^#define OPTSTR_swapoff /;" d
+OPTSTR_swapon flags.h /^#define OPTSTR_swapon /;" d
+OPTSTR_switch_root flags.h /^#define OPTSTR_switch_root /;" d
+OPTSTR_sync flags.h /^#define OPTSTR_sync /;" d
+OPTSTR_sysctl flags.h /^#define OPTSTR_sysctl /;" d
+OPTSTR_syslogd flags.h /^#define OPTSTR_syslogd /;" d
+OPTSTR_tac flags.h /^#define OPTSTR_tac /;" d
+OPTSTR_tail flags.h /^#define OPTSTR_tail /;" d
+OPTSTR_tar flags.h /^#define OPTSTR_tar /;" d
+OPTSTR_taskset flags.h /^#define OPTSTR_taskset /;" d
+OPTSTR_tcpsvd flags.h /^#define OPTSTR_tcpsvd /;" d
+OPTSTR_tee flags.h /^#define OPTSTR_tee /;" d
+OPTSTR_telnet flags.h /^#define OPTSTR_telnet /;" d
+OPTSTR_telnetd flags.h /^#define OPTSTR_telnetd /;" d
+OPTSTR_test flags.h /^#define OPTSTR_test /;" d
+OPTSTR_tftp flags.h /^#define OPTSTR_tftp /;" d
+OPTSTR_tftpd flags.h /^#define OPTSTR_tftpd /;" d
+OPTSTR_time flags.h /^#define OPTSTR_time /;" d
+OPTSTR_timeout flags.h /^#define OPTSTR_timeout /;" d
+OPTSTR_top flags.h /^#define OPTSTR_top /;" d
+OPTSTR_touch flags.h /^#define OPTSTR_touch /;" d
+OPTSTR_toybox flags.h /^#define OPTSTR_toybox /;" d
+OPTSTR_tr flags.h /^#define OPTSTR_tr /;" d
+OPTSTR_traceroute flags.h /^#define OPTSTR_traceroute /;" d
+OPTSTR_true flags.h /^#define OPTSTR_true /;" d
+OPTSTR_truncate flags.h /^#define OPTSTR_truncate /;" d
+OPTSTR_tty flags.h /^#define OPTSTR_tty /;" d
+OPTSTR_tunctl flags.h /^#define OPTSTR_tunctl /;" d
+OPTSTR_ulimit flags.h /^#define OPTSTR_ulimit /;" d
+OPTSTR_umount flags.h /^#define OPTSTR_umount /;" d
+OPTSTR_uname flags.h /^#define OPTSTR_uname /;" d
+OPTSTR_uniq flags.h /^#define OPTSTR_uniq /;" d
+OPTSTR_unix2dos flags.h /^#define OPTSTR_unix2dos /;" d
+OPTSTR_unlink flags.h /^#define OPTSTR_unlink /;" d
+OPTSTR_unshare flags.h /^#define OPTSTR_unshare /;" d
+OPTSTR_uptime flags.h /^#define OPTSTR_uptime /;" d
+OPTSTR_useradd flags.h /^#define OPTSTR_useradd /;" d
+OPTSTR_userdel flags.h /^#define OPTSTR_userdel /;" d
+OPTSTR_usleep flags.h /^#define OPTSTR_usleep /;" d
+OPTSTR_uudecode flags.h /^#define OPTSTR_uudecode /;" d
+OPTSTR_uuencode flags.h /^#define OPTSTR_uuencode /;" d
+OPTSTR_uuidgen flags.h /^#define OPTSTR_uuidgen /;" d
+OPTSTR_vconfig flags.h /^#define OPTSTR_vconfig /;" d
+OPTSTR_vi flags.h /^#define OPTSTR_vi /;" d
+OPTSTR_vmstat flags.h /^#define OPTSTR_vmstat /;" d
+OPTSTR_w flags.h /^#define OPTSTR_w /;" d
+OPTSTR_watch flags.h /^#define OPTSTR_watch /;" d
+OPTSTR_wc flags.h /^#define OPTSTR_wc /;" d
+OPTSTR_wget flags.h /^#define OPTSTR_wget /;" d
+OPTSTR_which flags.h /^#define OPTSTR_which /;" d
+OPTSTR_who flags.h /^#define OPTSTR_who /;" d
+OPTSTR_xargs flags.h /^#define OPTSTR_xargs /;" d
+OPTSTR_xxd flags.h /^#define OPTSTR_xxd /;" d
+OPTSTR_xzcat flags.h /^#define OPTSTR_xzcat /;" d
+OPTSTR_yes flags.h /^#define OPTSTR_yes /;" d
+OPTSTR_zcat flags.h /^#define OPTSTR_zcat /;" d
+O_CLOEXEC lib/portability.h /^#define O_CLOEXEC /;" d
+O_NOATIME lib/portability.h /^#define O_NOATIME /;" d
+O_NOFOLLOW lib/portability.h /^#define O_NOFOLLOW /;" d
+O_PATH lib/portability.h /^#define O_PATH /;" d
+P globals.h /^ struct arg_list *G, *g, *P, *s, *t, *U, *u;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0d08 typeref:struct:arg_list *
+P globals.h /^ struct arg_list *G, *g, *U, *u, *t, *s, *p, *O, *o, *P, *k;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0b08 typeref:struct:arg_list *
+P globals.h /^ char *u, *p, *P;$/;" m struct:ftpget_data typeref:typename:char *
+P globals.h /^ long P;$/;" m struct:mkpasswd_data typeref:typename:long
+P globals.h /^ long P;$/;" m struct:ulimit_data typeref:typename:long
+PP globals.h /^ struct ptr_len gg, GG, pp, PP, ss, tt, uu, UU;$/;" m struct:ps_data typeref:struct:ptr_len
+PROP_VALUE_MAX lib/portability.h /^#define PROP_VALUE_MAX /;" d
+PS_ADDR tags.h /^#define PS_ADDR /;" d
+PS_ARGS tags.h /^#define PS_ARGS /;" d
+PS_BIT tags.h /^#define PS_BIT /;" d
+PS_C tags.h /^#define PS_C /;" d
+PS_CMD tags.h /^#define PS_CMD /;" d
+PS_CMDLINE tags.h /^#define PS_CMDLINE /;" d
+PS_COMM tags.h /^#define PS_COMM /;" d
+PS_COMMAND tags.h /^#define PS_COMMAND /;" d
+PS_CPU tags.h /^#define PS_CPU /;" d
+PS_DIO tags.h /^#define PS_DIO /;" d
+PS_DREAD tags.h /^#define PS_DREAD /;" d
+PS_DWRITE tags.h /^#define PS_DWRITE /;" d
+PS_ELAPSED tags.h /^#define PS_ELAPSED /;" d
+PS_F tags.h /^#define PS_F /;" d
+PS_GID tags.h /^#define PS_GID /;" d
+PS_GROUP tags.h /^#define PS_GROUP /;" d
+PS_IO tags.h /^#define PS_IO /;" d
+PS_LABEL tags.h /^#define PS_LABEL /;" d
+PS_MAJFL tags.h /^#define PS_MAJFL /;" d
+PS_MINFL tags.h /^#define PS_MINFL /;" d
+PS_NAME tags.h /^#define PS_NAME /;" d
+PS_NI tags.h /^#define PS_NI /;" d
+PS_PCY tags.h /^#define PS_PCY /;" d
+PS_PGID tags.h /^#define PS_PGID /;" d
+PS_PID tags.h /^#define PS_PID /;" d
+PS_PPID tags.h /^#define PS_PPID /;" d
+PS_PR tags.h /^#define PS_PR /;" d
+PS_PRI tags.h /^#define PS_PRI /;" d
+PS_PSR tags.h /^#define PS_PSR /;" d
+PS_READ tags.h /^#define PS_READ /;" d
+PS_RES tags.h /^#define PS_RES /;" d
+PS_RGID tags.h /^#define PS_RGID /;" d
+PS_RGROUP tags.h /^#define PS_RGROUP /;" d
+PS_RSS tags.h /^#define PS_RSS /;" d
+PS_RTPRIO tags.h /^#define PS_RTPRIO /;" d
+PS_RUID tags.h /^#define PS_RUID /;" d
+PS_RUSER tags.h /^#define PS_RUSER /;" d
+PS_S tags.h /^#define PS_S /;" d
+PS_SCH tags.h /^#define PS_SCH /;" d
+PS_SHR tags.h /^#define PS_SHR /;" d
+PS_STAT tags.h /^#define PS_STAT /;" d
+PS_STIME tags.h /^#define PS_STIME /;" d
+PS_SWAP tags.h /^#define PS_SWAP /;" d
+PS_SZ tags.h /^#define PS_SZ /;" d
+PS_TCNT tags.h /^#define PS_TCNT /;" d
+PS_TID tags.h /^#define PS_TID /;" d
+PS_TIME tags.h /^#define PS_TIME /;" d
+PS_TIME_ tags.h /^#define PS_TIME_ /;" d
+PS_TTY tags.h /^#define PS_TTY /;" d
+PS_UID tags.h /^#define PS_UID /;" d
+PS_USER tags.h /^#define PS_USER /;" d
+PS_VIRT tags.h /^#define PS_VIRT /;" d
+PS_VSZ tags.h /^#define PS_VSZ /;" d
+PS_WCHAN tags.h /^#define PS_WCHAN /;" d
+PS_WRITE tags.h /^#define PS_WRITE /;" d
+PS__CPU tags.h /^#define PS__CPU /;" d
+PS__MEM tags.h /^#define PS__MEM /;" d
+PS__VSZ tags.h /^#define PS__VSZ /;" d
+RLIMIT_RTTIME lib/portability.h /^#define RLIMIT_RTTIME /;" d
+S globals.h /^ char *m, *S;$/;" m struct:mkpasswd_data typeref:typename:char *
+S globals.h /^ char *o, *T, S;$/;" m struct:sort_data typeref:typename:char
+S globals.h /^ struct arg_list *f, *e, *M, *S;$/;" m struct:grep_data typeref:struct:arg_list *
+SCHED_RESET_ON_FORK lib/portability.h /^#define SCHED_RESET_ON_FORK /;" d
+SEEK_DATA lib/portability.h /^#define SEEK_DATA /;" d
+SEEK_HOLE lib/portability.h /^#define SEEK_HOLE /;" d
+SIGNIFY lib/lib.c /^#define SIGNIFY(/;" d file:
+SWAP_BE16 lib/portability.h /^#define SWAP_BE16(/;" d
+SWAP_BE32 lib/portability.h /^#define SWAP_BE32(/;" d
+SWAP_BE64 lib/portability.h /^#define SWAP_BE64(/;" d
+SWAP_LE16 lib/portability.h /^#define SWAP_LE16(/;" d
+SWAP_LE32 lib/portability.h /^#define SWAP_LE32(/;" d
+SWAP_LE64 lib/portability.h /^#define SWAP_LE64(/;" d
+SYSLOG_NAMES lib/lib.c /^#define SYSLOG_NAMES$/;" d file:
+T globals.h /^ char *o, *T, S;$/;" m struct:sort_data typeref:typename:char *
+TAGGED_ARRAY toys.h /^#define TAGGED_ARRAY(/;" d
+TOYBOX_VENDOR main.c /^#define TOYBOX_VENDOR /;" d file:
+TOYBOX_VERSION main.c /^#define TOYBOX_VERSION /;" d file:
+TOYFLAG_BIN lib/toyflags.h /^#define TOYFLAG_BIN /;" d
+TOYFLAG_LOCALE lib/toyflags.h /^#define TOYFLAG_LOCALE /;" d
+TOYFLAG_NEEDROOT lib/toyflags.h /^#define TOYFLAG_NEEDROOT /;" d
+TOYFLAG_NOFORK lib/toyflags.h /^#define TOYFLAG_NOFORK /;" d
+TOYFLAG_NOHELP lib/toyflags.h /^#define TOYFLAG_NOHELP /;" d
+TOYFLAG_ROOTONLY lib/toyflags.h /^#define TOYFLAG_ROOTONLY /;" d
+TOYFLAG_SBIN lib/toyflags.h /^#define TOYFLAG_SBIN /;" d
+TOYFLAG_STAYROOT lib/toyflags.h /^#define TOYFLAG_STAYROOT /;" d
+TOYFLAG_UMASK lib/toyflags.h /^#define TOYFLAG_UMASK /;" d
+TOYFLAG_USR lib/toyflags.h /^#define TOYFLAG_USR /;" d
+TOYMASK_LOCATION lib/toyflags.h /^#define TOYMASK_LOCATION /;" d
+TT flags.h /^#define TT /;" d
+U globals.h /^ struct arg_list *G, *g, *P, *s, *t, *U, *u;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0d08 typeref:struct:arg_list *
+U globals.h /^ struct arg_list *G, *g, *U, *u, *t, *s, *p, *O, *o, *P, *k;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0b08 typeref:struct:arg_list *
+USER_PROCESS lib/portability.h /^#define USER_PROCESS /;" d
+USE_ACPI config.h /^#define USE_ACPI(/;" d
+USE_ARP config.h /^#define USE_ARP(/;" d
+USE_ARPING config.h /^#define USE_ARPING(/;" d
+USE_ASCII config.h /^#define USE_ASCII(/;" d
+USE_BASE64 config.h /^#define USE_BASE64(/;" d
+USE_BASENAME config.h /^#define USE_BASENAME(/;" d
+USE_BC config.h /^#define USE_BC(/;" d
+USE_BLKID config.h /^#define USE_BLKID(/;" d
+USE_BLOCKDEV config.h /^#define USE_BLOCKDEV(/;" d
+USE_BOOTCHARTD config.h /^#define USE_BOOTCHARTD(/;" d
+USE_BRCTL config.h /^#define USE_BRCTL(/;" d
+USE_BUNZIP2 config.h /^#define USE_BUNZIP2(/;" d
+USE_BZCAT config.h /^#define USE_BZCAT(/;" d
+USE_CAL config.h /^#define USE_CAL(/;" d
+USE_CAT config.h /^#define USE_CAT(/;" d
+USE_CATV config.h /^#define USE_CATV(/;" d
+USE_CAT_V config.h /^#define USE_CAT_V(/;" d
+USE_CD config.h /^#define USE_CD(/;" d
+USE_CHATTR config.h /^#define USE_CHATTR(/;" d
+USE_CHCON config.h /^#define USE_CHCON(/;" d
+USE_CHGRP config.h /^#define USE_CHGRP(/;" d
+USE_CHMOD config.h /^#define USE_CHMOD(/;" d
+USE_CHOWN config.h /^#define USE_CHOWN(/;" d
+USE_CHROOT config.h /^#define USE_CHROOT(/;" d
+USE_CHRT config.h /^#define USE_CHRT(/;" d
+USE_CHVT config.h /^#define USE_CHVT(/;" d
+USE_CKSUM config.h /^#define USE_CKSUM(/;" d
+USE_CLEAR config.h /^#define USE_CLEAR(/;" d
+USE_CMP config.h /^#define USE_CMP(/;" d
+USE_COMM config.h /^#define USE_COMM(/;" d
+USE_COUNT config.h /^#define USE_COUNT(/;" d
+USE_CP config.h /^#define USE_CP(/;" d
+USE_CPIO config.h /^#define USE_CPIO(/;" d
+USE_CP_PRESERVE config.h /^#define USE_CP_PRESERVE(/;" d
+USE_CRC32 config.h /^#define USE_CRC32(/;" d
+USE_CROND config.h /^#define USE_CROND(/;" d
+USE_CRONTAB config.h /^#define USE_CRONTAB(/;" d
+USE_CUT config.h /^#define USE_CUT(/;" d
+USE_DATE config.h /^#define USE_DATE(/;" d
+USE_DD config.h /^#define USE_DD(/;" d
+USE_DEALLOCVT config.h /^#define USE_DEALLOCVT(/;" d
+USE_DEBUG_DHCP config.h /^#define USE_DEBUG_DHCP(/;" d
+USE_DEMO_MANY_OPTIONS config.h /^#define USE_DEMO_MANY_OPTIONS(/;" d
+USE_DEMO_NUMBER config.h /^#define USE_DEMO_NUMBER(/;" d
+USE_DEMO_SCANKEY config.h /^#define USE_DEMO_SCANKEY(/;" d
+USE_DEMO_UTF8TOWC config.h /^#define USE_DEMO_UTF8TOWC(/;" d
+USE_DF config.h /^#define USE_DF(/;" d
+USE_DHCP config.h /^#define USE_DHCP(/;" d
+USE_DHCP6 config.h /^#define USE_DHCP6(/;" d
+USE_DHCPD config.h /^#define USE_DHCPD(/;" d
+USE_DIFF config.h /^#define USE_DIFF(/;" d
+USE_DIRNAME config.h /^#define USE_DIRNAME(/;" d
+USE_DMESG config.h /^#define USE_DMESG(/;" d
+USE_DOS2UNIX config.h /^#define USE_DOS2UNIX(/;" d
+USE_DU config.h /^#define USE_DU(/;" d
+USE_DUMPLEASES config.h /^#define USE_DUMPLEASES(/;" d
+USE_ECHO config.h /^#define USE_ECHO(/;" d
+USE_EGREP config.h /^#define USE_EGREP(/;" d
+USE_EJECT config.h /^#define USE_EJECT(/;" d
+USE_ENV config.h /^#define USE_ENV(/;" d
+USE_EXIT config.h /^#define USE_EXIT(/;" d
+USE_EXPAND config.h /^#define USE_EXPAND(/;" d
+USE_EXPR config.h /^#define USE_EXPR(/;" d
+USE_FACTOR config.h /^#define USE_FACTOR(/;" d
+USE_FALLOCATE config.h /^#define USE_FALLOCATE(/;" d
+USE_FALSE config.h /^#define USE_FALSE(/;" d
+USE_FDISK config.h /^#define USE_FDISK(/;" d
+USE_FGREP config.h /^#define USE_FGREP(/;" d
+USE_FILE config.h /^#define USE_FILE(/;" d
+USE_FIND config.h /^#define USE_FIND(/;" d
+USE_FLOCK config.h /^#define USE_FLOCK(/;" d
+USE_FMT config.h /^#define USE_FMT(/;" d
+USE_FOLD config.h /^#define USE_FOLD(/;" d
+USE_FREE config.h /^#define USE_FREE(/;" d
+USE_FREERAMDISK config.h /^#define USE_FREERAMDISK(/;" d
+USE_FSCK config.h /^#define USE_FSCK(/;" d
+USE_FSFREEZE config.h /^#define USE_FSFREEZE(/;" d
+USE_FSTYPE config.h /^#define USE_FSTYPE(/;" d
+USE_FSYNC config.h /^#define USE_FSYNC(/;" d
+USE_FTPGET config.h /^#define USE_FTPGET(/;" d
+USE_FTPPUT config.h /^#define USE_FTPPUT(/;" d
+USE_GETCONF config.h /^#define USE_GETCONF(/;" d
+USE_GETENFORCE config.h /^#define USE_GETENFORCE(/;" d
+USE_GETFATTR config.h /^#define USE_GETFATTR(/;" d
+USE_GETPROP config.h /^#define USE_GETPROP(/;" d
+USE_GETTY config.h /^#define USE_GETTY(/;" d
+USE_GREP config.h /^#define USE_GREP(/;" d
+USE_GROUPADD config.h /^#define USE_GROUPADD(/;" d
+USE_GROUPDEL config.h /^#define USE_GROUPDEL(/;" d
+USE_GROUPS config.h /^#define USE_GROUPS(/;" d
+USE_GUNZIP config.h /^#define USE_GUNZIP(/;" d
+USE_GZIP config.h /^#define USE_GZIP(/;" d
+USE_HEAD config.h /^#define USE_HEAD(/;" d
+USE_HELLO config.h /^#define USE_HELLO(/;" d
+USE_HELP config.h /^#define USE_HELP(/;" d
+USE_HELP_EXTRAS config.h /^#define USE_HELP_EXTRAS(/;" d
+USE_HEXEDIT config.h /^#define USE_HEXEDIT(/;" d
+USE_HOST config.h /^#define USE_HOST(/;" d
+USE_HOSTID config.h /^#define USE_HOSTID(/;" d
+USE_HOSTNAME config.h /^#define USE_HOSTNAME(/;" d
+USE_HWCLOCK config.h /^#define USE_HWCLOCK(/;" d
+USE_I2CDETECT config.h /^#define USE_I2CDETECT(/;" d
+USE_I2CDUMP config.h /^#define USE_I2CDUMP(/;" d
+USE_I2CGET config.h /^#define USE_I2CGET(/;" d
+USE_I2CSET config.h /^#define USE_I2CSET(/;" d
+USE_ICONV config.h /^#define USE_ICONV(/;" d
+USE_ID config.h /^#define USE_ID(/;" d
+USE_ID_Z config.h /^#define USE_ID_Z(/;" d
+USE_IFCONFIG config.h /^#define USE_IFCONFIG(/;" d
+USE_INIT config.h /^#define USE_INIT(/;" d
+USE_INOTIFYD config.h /^#define USE_INOTIFYD(/;" d
+USE_INSMOD config.h /^#define USE_INSMOD(/;" d
+USE_INSTALL config.h /^#define USE_INSTALL(/;" d
+USE_IONICE config.h /^#define USE_IONICE(/;" d
+USE_IORENICE config.h /^#define USE_IORENICE(/;" d
+USE_IOTOP config.h /^#define USE_IOTOP(/;" d
+USE_IP config.h /^#define USE_IP(/;" d
+USE_IPCRM config.h /^#define USE_IPCRM(/;" d
+USE_IPCS config.h /^#define USE_IPCS(/;" d
+USE_KILL config.h /^#define USE_KILL(/;" d
+USE_KILLALL config.h /^#define USE_KILLALL(/;" d
+USE_KILLALL5 config.h /^#define USE_KILLALL5(/;" d
+USE_KLOGD config.h /^#define USE_KLOGD(/;" d
+USE_KLOGD_SOURCE_RING_BUFFER config.h /^#define USE_KLOGD_SOURCE_RING_BUFFER(/;" d
+USE_LAST config.h /^#define USE_LAST(/;" d
+USE_LINK config.h /^#define USE_LINK(/;" d
+USE_LN config.h /^#define USE_LN(/;" d
+USE_LOAD_POLICY config.h /^#define USE_LOAD_POLICY(/;" d
+USE_LOG config.h /^#define USE_LOG(/;" d
+USE_LOGGER config.h /^#define USE_LOGGER(/;" d
+USE_LOGIN config.h /^#define USE_LOGIN(/;" d
+USE_LOGNAME config.h /^#define USE_LOGNAME(/;" d
+USE_LOSETUP config.h /^#define USE_LOSETUP(/;" d
+USE_LS config.h /^#define USE_LS(/;" d
+USE_LSATTR config.h /^#define USE_LSATTR(/;" d
+USE_LSMOD config.h /^#define USE_LSMOD(/;" d
+USE_LSOF config.h /^#define USE_LSOF(/;" d
+USE_LSPCI config.h /^#define USE_LSPCI(/;" d
+USE_LSPCI_TEXT config.h /^#define USE_LSPCI_TEXT(/;" d
+USE_LSUSB config.h /^#define USE_LSUSB(/;" d
+USE_MAKEDEVS config.h /^#define USE_MAKEDEVS(/;" d
+USE_MD5SUM config.h /^#define USE_MD5SUM(/;" d
+USE_MDEV config.h /^#define USE_MDEV(/;" d
+USE_MDEV_CONF config.h /^#define USE_MDEV_CONF(/;" d
+USE_MICROCOM config.h /^#define USE_MICROCOM(/;" d
+USE_MIX config.h /^#define USE_MIX(/;" d
+USE_MKDIR config.h /^#define USE_MKDIR(/;" d
+USE_MKDIR_Z config.h /^#define USE_MKDIR_Z(/;" d
+USE_MKE2FS config.h /^#define USE_MKE2FS(/;" d
+USE_MKE2FS_EXTENDED config.h /^#define USE_MKE2FS_EXTENDED(/;" d
+USE_MKE2FS_GEN config.h /^#define USE_MKE2FS_GEN(/;" d
+USE_MKE2FS_JOURNAL config.h /^#define USE_MKE2FS_JOURNAL(/;" d
+USE_MKE2FS_LABEL config.h /^#define USE_MKE2FS_LABEL(/;" d
+USE_MKFIFO config.h /^#define USE_MKFIFO(/;" d
+USE_MKFIFO_Z config.h /^#define USE_MKFIFO_Z(/;" d
+USE_MKNOD config.h /^#define USE_MKNOD(/;" d
+USE_MKNOD_Z config.h /^#define USE_MKNOD_Z(/;" d
+USE_MKPASSWD config.h /^#define USE_MKPASSWD(/;" d
+USE_MKSWAP config.h /^#define USE_MKSWAP(/;" d
+USE_MKTEMP config.h /^#define USE_MKTEMP(/;" d
+USE_MODINFO config.h /^#define USE_MODINFO(/;" d
+USE_MODPROBE config.h /^#define USE_MODPROBE(/;" d
+USE_MORE config.h /^#define USE_MORE(/;" d
+USE_MOUNT config.h /^#define USE_MOUNT(/;" d
+USE_MOUNTPOINT config.h /^#define USE_MOUNTPOINT(/;" d
+USE_MV config.h /^#define USE_MV(/;" d
+USE_NBD_CLIENT config.h /^#define USE_NBD_CLIENT(/;" d
+USE_NETCAT config.h /^#define USE_NETCAT(/;" d
+USE_NETCAT_LISTEN config.h /^#define USE_NETCAT_LISTEN(/;" d
+USE_NETSTAT config.h /^#define USE_NETSTAT(/;" d
+USE_NICE config.h /^#define USE_NICE(/;" d
+USE_NL config.h /^#define USE_NL(/;" d
+USE_NOHUP config.h /^#define USE_NOHUP(/;" d
+USE_NPROC config.h /^#define USE_NPROC(/;" d
+USE_NSENTER config.h /^#define USE_NSENTER(/;" d
+USE_OD config.h /^#define USE_OD(/;" d
+USE_ONEIT config.h /^#define USE_ONEIT(/;" d
+USE_OPENVT config.h /^#define USE_OPENVT(/;" d
+USE_PARTPROBE config.h /^#define USE_PARTPROBE(/;" d
+USE_PASSWD config.h /^#define USE_PASSWD(/;" d
+USE_PASSWD_SAD config.h /^#define USE_PASSWD_SAD(/;" d
+USE_PASTE config.h /^#define USE_PASTE(/;" d
+USE_PATCH config.h /^#define USE_PATCH(/;" d
+USE_PGREP config.h /^#define USE_PGREP(/;" d
+USE_PIDOF config.h /^#define USE_PIDOF(/;" d
+USE_PING config.h /^#define USE_PING(/;" d
+USE_PIVOT_ROOT config.h /^#define USE_PIVOT_ROOT(/;" d
+USE_PKILL config.h /^#define USE_PKILL(/;" d
+USE_PMAP config.h /^#define USE_PMAP(/;" d
+USE_PRINTENV config.h /^#define USE_PRINTENV(/;" d
+USE_PRINTF config.h /^#define USE_PRINTF(/;" d
+USE_PS config.h /^#define USE_PS(/;" d
+USE_PWD config.h /^#define USE_PWD(/;" d
+USE_PWDX config.h /^#define USE_PWDX(/;" d
+USE_READAHEAD config.h /^#define USE_READAHEAD(/;" d
+USE_READLINK config.h /^#define USE_READLINK(/;" d
+USE_REALPATH config.h /^#define USE_REALPATH(/;" d
+USE_REBOOT config.h /^#define USE_REBOOT(/;" d
+USE_RENICE config.h /^#define USE_RENICE(/;" d
+USE_RESET config.h /^#define USE_RESET(/;" d
+USE_RESTORECON config.h /^#define USE_RESTORECON(/;" d
+USE_REV config.h /^#define USE_REV(/;" d
+USE_RFKILL config.h /^#define USE_RFKILL(/;" d
+USE_RM config.h /^#define USE_RM(/;" d
+USE_RMDIR config.h /^#define USE_RMDIR(/;" d
+USE_RMMOD config.h /^#define USE_RMMOD(/;" d
+USE_ROUTE config.h /^#define USE_ROUTE(/;" d
+USE_RUNCON config.h /^#define USE_RUNCON(/;" d
+USE_SED config.h /^#define USE_SED(/;" d
+USE_SENDEVENT config.h /^#define USE_SENDEVENT(/;" d
+USE_SEQ config.h /^#define USE_SEQ(/;" d
+USE_SETENFORCE config.h /^#define USE_SETENFORCE(/;" d
+USE_SETFATTR config.h /^#define USE_SETFATTR(/;" d
+USE_SETPROP config.h /^#define USE_SETPROP(/;" d
+USE_SETSID config.h /^#define USE_SETSID(/;" d
+USE_SH config.h /^#define USE_SH(/;" d
+USE_SHA1SUM config.h /^#define USE_SHA1SUM(/;" d
+USE_SHA224SUM config.h /^#define USE_SHA224SUM(/;" d
+USE_SHA256SUM config.h /^#define USE_SHA256SUM(/;" d
+USE_SHA384SUM config.h /^#define USE_SHA384SUM(/;" d
+USE_SHA512SUM config.h /^#define USE_SHA512SUM(/;" d
+USE_SHRED config.h /^#define USE_SHRED(/;" d
+USE_SKELETON config.h /^#define USE_SKELETON(/;" d
+USE_SKELETON_ALIAS config.h /^#define USE_SKELETON_ALIAS(/;" d
+USE_SLEEP config.h /^#define USE_SLEEP(/;" d
+USE_SLEEP_FLOAT config.h /^#define USE_SLEEP_FLOAT(/;" d
+USE_SORT config.h /^#define USE_SORT(/;" d
+USE_SORT_BIG config.h /^#define USE_SORT_BIG(/;" d
+USE_SORT_FLOAT config.h /^#define USE_SORT_FLOAT(/;" d
+USE_SPLIT config.h /^#define USE_SPLIT(/;" d
+USE_START config.h /^#define USE_START(/;" d
+USE_STAT config.h /^#define USE_STAT(/;" d
+USE_STOP config.h /^#define USE_STOP(/;" d
+USE_STRINGS config.h /^#define USE_STRINGS(/;" d
+USE_STTY config.h /^#define USE_STTY(/;" d
+USE_SU config.h /^#define USE_SU(/;" d
+USE_SULOGIN config.h /^#define USE_SULOGIN(/;" d
+USE_SWAPOFF config.h /^#define USE_SWAPOFF(/;" d
+USE_SWAPON config.h /^#define USE_SWAPON(/;" d
+USE_SWITCH_ROOT config.h /^#define USE_SWITCH_ROOT(/;" d
+USE_SYNC config.h /^#define USE_SYNC(/;" d
+USE_SYSCTL config.h /^#define USE_SYSCTL(/;" d
+USE_SYSLOGD config.h /^#define USE_SYSLOGD(/;" d
+USE_TAC config.h /^#define USE_TAC(/;" d
+USE_TAIL config.h /^#define USE_TAIL(/;" d
+USE_TAIL_SEEK config.h /^#define USE_TAIL_SEEK(/;" d
+USE_TAR config.h /^#define USE_TAR(/;" d
+USE_TASKSET config.h /^#define USE_TASKSET(/;" d
+USE_TCPSVD config.h /^#define USE_TCPSVD(/;" d
+USE_TEE config.h /^#define USE_TEE(/;" d
+USE_TELNET config.h /^#define USE_TELNET(/;" d
+USE_TELNETD config.h /^#define USE_TELNETD(/;" d
+USE_TEST config.h /^#define USE_TEST(/;" d
+USE_TFTP config.h /^#define USE_TFTP(/;" d
+USE_TFTPD config.h /^#define USE_TFTPD(/;" d
+USE_TIME config.h /^#define USE_TIME(/;" d
+USE_TIMEOUT config.h /^#define USE_TIMEOUT(/;" d
+USE_TOP config.h /^#define USE_TOP(/;" d
+USE_TOUCH config.h /^#define USE_TOUCH(/;" d
+USE_TOYBOX config.h /^#define USE_TOYBOX(/;" d
+USE_TOYBOX_ANDROID_SCHEDPOLICY config.h /^#define USE_TOYBOX_ANDROID_SCHEDPOLICY(/;" d
+USE_TOYBOX_CONTAINER config.h /^#define USE_TOYBOX_CONTAINER(/;" d
+USE_TOYBOX_DEBUG config.h /^#define USE_TOYBOX_DEBUG(/;" d
+USE_TOYBOX_FALLOCATE config.h /^#define USE_TOYBOX_FALLOCATE(/;" d
+USE_TOYBOX_FIFREEZE config.h /^#define USE_TOYBOX_FIFREEZE(/;" d
+USE_TOYBOX_FLOAT config.h /^#define USE_TOYBOX_FLOAT(/;" d
+USE_TOYBOX_FORK config.h /^#define USE_TOYBOX_FORK(/;" d
+USE_TOYBOX_FREE config.h /^#define USE_TOYBOX_FREE(/;" d
+USE_TOYBOX_GETRANDOM config.h /^#define USE_TOYBOX_GETRANDOM(/;" d
+USE_TOYBOX_HELP config.h /^#define USE_TOYBOX_HELP(/;" d
+USE_TOYBOX_HELP_DASHDASH config.h /^#define USE_TOYBOX_HELP_DASHDASH(/;" d
+USE_TOYBOX_I18N config.h /^#define USE_TOYBOX_I18N(/;" d
+USE_TOYBOX_ICONV config.h /^#define USE_TOYBOX_ICONV(/;" d
+USE_TOYBOX_LIBCRYPTO config.h /^#define USE_TOYBOX_LIBCRYPTO(/;" d
+USE_TOYBOX_LIBZ config.h /^#define USE_TOYBOX_LIBZ(/;" d
+USE_TOYBOX_LSM_NONE config.h /^#define USE_TOYBOX_LSM_NONE(/;" d
+USE_TOYBOX_MUSL_NOMMU_IS_BROKEN config.h /^#define USE_TOYBOX_MUSL_NOMMU_IS_BROKEN(/;" d
+USE_TOYBOX_NORECURSE config.h /^#define USE_TOYBOX_NORECURSE(/;" d
+USE_TOYBOX_ON_ANDROID config.h /^#define USE_TOYBOX_ON_ANDROID(/;" d
+USE_TOYBOX_PEDANTIC_ARGS config.h /^#define USE_TOYBOX_PEDANTIC_ARGS(/;" d
+USE_TOYBOX_PRLIMIT config.h /^#define USE_TOYBOX_PRLIMIT(/;" d
+USE_TOYBOX_SELINUX config.h /^#define USE_TOYBOX_SELINUX(/;" d
+USE_TOYBOX_SHADOW config.h /^#define USE_TOYBOX_SHADOW(/;" d
+USE_TOYBOX_SMACK config.h /^#define USE_TOYBOX_SMACK(/;" d
+USE_TOYBOX_SUID config.h /^#define USE_TOYBOX_SUID(/;" d
+USE_TOYBOX_UTMPX config.h /^#define USE_TOYBOX_UTMPX(/;" d
+USE_TR config.h /^#define USE_TR(/;" d
+USE_TRACEROUTE config.h /^#define USE_TRACEROUTE(/;" d
+USE_TRUE config.h /^#define USE_TRUE(/;" d
+USE_TRUNCATE config.h /^#define USE_TRUNCATE(/;" d
+USE_TTY config.h /^#define USE_TTY(/;" d
+USE_TUNCTL config.h /^#define USE_TUNCTL(/;" d
+USE_ULIMIT config.h /^#define USE_ULIMIT(/;" d
+USE_UMOUNT config.h /^#define USE_UMOUNT(/;" d
+USE_UNAME config.h /^#define USE_UNAME(/;" d
+USE_UNIQ config.h /^#define USE_UNIQ(/;" d
+USE_UNIX2DOS config.h /^#define USE_UNIX2DOS(/;" d
+USE_UNLINK config.h /^#define USE_UNLINK(/;" d
+USE_UNSHARE config.h /^#define USE_UNSHARE(/;" d
+USE_UPTIME config.h /^#define USE_UPTIME(/;" d
+USE_USERADD config.h /^#define USE_USERADD(/;" d
+USE_USERDEL config.h /^#define USE_USERDEL(/;" d
+USE_USLEEP config.h /^#define USE_USLEEP(/;" d
+USE_UUDECODE config.h /^#define USE_UUDECODE(/;" d
+USE_UUENCODE config.h /^#define USE_UUENCODE(/;" d
+USE_UUIDGEN config.h /^#define USE_UUIDGEN(/;" d
+USE_VCONFIG config.h /^#define USE_VCONFIG(/;" d
+USE_VI config.h /^#define USE_VI(/;" d
+USE_VMSTAT config.h /^#define USE_VMSTAT(/;" d
+USE_W config.h /^#define USE_W(/;" d
+USE_WATCH config.h /^#define USE_WATCH(/;" d
+USE_WC config.h /^#define USE_WC(/;" d
+USE_WGET config.h /^#define USE_WGET(/;" d
+USE_WHICH config.h /^#define USE_WHICH(/;" d
+USE_WHO config.h /^#define USE_WHO(/;" d
+USE_WHOAMI config.h /^#define USE_WHOAMI(/;" d
+USE_XARGS config.h /^#define USE_XARGS(/;" d
+USE_XARGS_PEDANTIC config.h /^#define USE_XARGS_PEDANTIC(/;" d
+USE_XXD config.h /^#define USE_XXD(/;" d
+USE_XZCAT config.h /^#define USE_XZCAT(/;" d
+USE_YES config.h /^#define USE_YES(/;" d
+USE_ZCAT config.h /^#define USE_ZCAT(/;" d
+UU globals.h /^ struct ptr_len gg, GG, pp, PP, ss, tt, uu, UU;$/;" m struct:ps_data typeref:struct:ptr_len
+Uupnmi globals.h /^ char *Uupnmi[6];$/;" m struct:nsenter_data typeref:typename:char * [6]
+W globals.h /^ long q, p, W, w;$/;" m struct:netcat_data typeref:typename:long
+W globals.h /^ long w, W, i, s, c, t, m;$/;" m struct:ping_data typeref:typename:long
+WARN_ONLY lib/lib.h /^#define WARN_ONLY /;" d
+WOULD_EXIT lib/lib.h /^#define WOULD_EXIT(/;" d
+XATTR_NAME_SMACK lib/lsm.h /^#define XATTR_NAME_SMACK /;" d
+XVFORK lib/lib.h /^#define XVFORK(/;" d
+Z globals.h /^ char *Z, *m;$/;" m struct:mknod_data typeref:typename:char *
+Z globals.h /^ char *Z;$/;" m struct:mkfifo_data typeref:typename:char *
+Z globals.h /^ char *m, *Z;$/;" m struct:mkdir_data typeref:typename:char *
+_ALL_SOURCE lib/portability.h /^#define _ALL_SOURCE$/;" d
+_CP_context tags.h /^#define _CP_context /;" d
+_CP_mode tags.h /^#define _CP_mode /;" d
+_CP_ownership tags.h /^#define _CP_ownership /;" d
+_CP_timestamps tags.h /^#define _CP_timestamps /;" d
+_CP_xattr tags.h /^#define _CP_xattr /;" d
+_CS_PATH lib/portability.h /^#define _CS_PATH /;" d
+_CS_V7_ENV lib/portability.h /^#define _CS_V7_ENV /;" d
+_FILE_OFFSET_BITS lib/portability.h /^#define _FILE_OFFSET_BITS /;" d
+_KEY_ADOWN tags.h /^#define _KEY_ADOWN /;" d
+_KEY_AF1 tags.h /^#define _KEY_AF1 /;" d
+_KEY_ALEFT tags.h /^#define _KEY_ALEFT /;" d
+_KEY_ARIGHT tags.h /^#define _KEY_ARIGHT /;" d
+_KEY_AUP tags.h /^#define _KEY_AUP /;" d
+_KEY_CDOWN tags.h /^#define _KEY_CDOWN /;" d
+_KEY_CF1 tags.h /^#define _KEY_CF1 /;" d
+_KEY_CLEFT tags.h /^#define _KEY_CLEFT /;" d
+_KEY_CRIGHT tags.h /^#define _KEY_CRIGHT /;" d
+_KEY_CUP tags.h /^#define _KEY_CUP /;" d
+_KEY_DOWN tags.h /^#define _KEY_DOWN /;" d
+_KEY_END tags.h /^#define _KEY_END /;" d
+_KEY_F1 tags.h /^#define _KEY_F1 /;" d
+_KEY_F2 tags.h /^#define _KEY_F2 /;" d
+_KEY_F3 tags.h /^#define _KEY_F3 /;" d
+_KEY_F4 tags.h /^#define _KEY_F4 /;" d
+_KEY_F5 tags.h /^#define _KEY_F5 /;" d
+_KEY_F6 tags.h /^#define _KEY_F6 /;" d
+_KEY_F7 tags.h /^#define _KEY_F7 /;" d
+_KEY_F8 tags.h /^#define _KEY_F8 /;" d
+_KEY_F9 tags.h /^#define _KEY_F9 /;" d
+_KEY_HOME tags.h /^#define _KEY_HOME /;" d
+_KEY_INSERT tags.h /^#define _KEY_INSERT /;" d
+_KEY_LEFT tags.h /^#define _KEY_LEFT /;" d
+_KEY_PGDN tags.h /^#define _KEY_PGDN /;" d
+_KEY_PGUP tags.h /^#define _KEY_PGUP /;" d
+_KEY_RIGHT tags.h /^#define _KEY_RIGHT /;" d
+_KEY_SDOWN tags.h /^#define _KEY_SDOWN /;" d
+_KEY_SF1 tags.h /^#define _KEY_SF1 /;" d
+_KEY_SLEFT tags.h /^#define _KEY_SLEFT /;" d
+_KEY_SRIGHT tags.h /^#define _KEY_SRIGHT /;" d
+_KEY_SUP tags.h /^#define _KEY_SUP /;" d
+_KEY_UP tags.h /^#define _KEY_UP /;" d
+_PS_ADDR tags.h /^#define _PS_ADDR /;" d
+_PS_ARGS tags.h /^#define _PS_ARGS /;" d
+_PS_BIT tags.h /^#define _PS_BIT /;" d
+_PS_C tags.h /^#define _PS_C /;" d
+_PS_CMD tags.h /^#define _PS_CMD /;" d
+_PS_CMDLINE tags.h /^#define _PS_CMDLINE /;" d
+_PS_COMM tags.h /^#define _PS_COMM /;" d
+_PS_COMMAND tags.h /^#define _PS_COMMAND /;" d
+_PS_CPU tags.h /^#define _PS_CPU /;" d
+_PS_DIO tags.h /^#define _PS_DIO /;" d
+_PS_DREAD tags.h /^#define _PS_DREAD /;" d
+_PS_DWRITE tags.h /^#define _PS_DWRITE /;" d
+_PS_ELAPSED tags.h /^#define _PS_ELAPSED /;" d
+_PS_F tags.h /^#define _PS_F /;" d
+_PS_GID tags.h /^#define _PS_GID /;" d
+_PS_GROUP tags.h /^#define _PS_GROUP /;" d
+_PS_IO tags.h /^#define _PS_IO /;" d
+_PS_LABEL tags.h /^#define _PS_LABEL /;" d
+_PS_MAJFL tags.h /^#define _PS_MAJFL /;" d
+_PS_MINFL tags.h /^#define _PS_MINFL /;" d
+_PS_NAME tags.h /^#define _PS_NAME /;" d
+_PS_NI tags.h /^#define _PS_NI /;" d
+_PS_PCY tags.h /^#define _PS_PCY /;" d
+_PS_PGID tags.h /^#define _PS_PGID /;" d
+_PS_PID tags.h /^#define _PS_PID /;" d
+_PS_PPID tags.h /^#define _PS_PPID /;" d
+_PS_PR tags.h /^#define _PS_PR /;" d
+_PS_PRI tags.h /^#define _PS_PRI /;" d
+_PS_PSR tags.h /^#define _PS_PSR /;" d
+_PS_READ tags.h /^#define _PS_READ /;" d
+_PS_RES tags.h /^#define _PS_RES /;" d
+_PS_RGID tags.h /^#define _PS_RGID /;" d
+_PS_RGROUP tags.h /^#define _PS_RGROUP /;" d
+_PS_RSS tags.h /^#define _PS_RSS /;" d
+_PS_RTPRIO tags.h /^#define _PS_RTPRIO /;" d
+_PS_RUID tags.h /^#define _PS_RUID /;" d
+_PS_RUSER tags.h /^#define _PS_RUSER /;" d
+_PS_S tags.h /^#define _PS_S /;" d
+_PS_SCH tags.h /^#define _PS_SCH /;" d
+_PS_SHR tags.h /^#define _PS_SHR /;" d
+_PS_STAT tags.h /^#define _PS_STAT /;" d
+_PS_STIME tags.h /^#define _PS_STIME /;" d
+_PS_SWAP tags.h /^#define _PS_SWAP /;" d
+_PS_SZ tags.h /^#define _PS_SZ /;" d
+_PS_TCNT tags.h /^#define _PS_TCNT /;" d
+_PS_TID tags.h /^#define _PS_TID /;" d
+_PS_TIME tags.h /^#define _PS_TIME /;" d
+_PS_TIME_ tags.h /^#define _PS_TIME_ /;" d
+_PS_TTY tags.h /^#define _PS_TTY /;" d
+_PS_UID tags.h /^#define _PS_UID /;" d
+_PS_USER tags.h /^#define _PS_USER /;" d
+_PS_VIRT tags.h /^#define _PS_VIRT /;" d
+_PS_VSZ tags.h /^#define _PS_VSZ /;" d
+_PS_WCHAN tags.h /^#define _PS_WCHAN /;" d
+_PS_WRITE tags.h /^#define _PS_WRITE /;" d
+_PS__CPU tags.h /^#define _PS__CPU /;" d
+_PS__MEM tags.h /^#define _PS__MEM /;" d
+_PS__VSZ tags.h /^#define _PS__VSZ /;" d
+__android_log_write lib/portability.h /^#define __android_log_write(/;" d
+__android_log_write lib/portability.h /^static inline int __android_log_write(int pri, const char *tag, const char *msg)$/;" f typeref:typename:int
+__anon00a587ba0108 lib/linestack.c /^ struct {$/;" s function:linestack_insert file:
+__anon24da09b40108 lib/portability.h /^typedef struct {char *c_name; int c_val;} CODE;$/;" s
+__anon2edfd129010a lib/args.c /^ union {$/;" u struct:opts file:
+__anon8e1926ef0108 lib/password.c /^ struct {$/;" s function:get_salt file:
+__anonc826279f010a globals.h /^ union {$/;" u struct:skeleton_data
+__anonc826279f0208 globals.h /^ struct {$/;" s union:skeleton_data::__anonc826279f010a
+__anonc826279f0308 globals.h /^ struct {$/;" s union:skeleton_data::__anonc826279f010a
+__anonc826279f040a globals.h /^ union {$/;" u struct:md5sum_data
+__anonc826279f050a globals.h /^ union {$/;" u struct:stat_data
+__anonc826279f0608 globals.h /^ struct {$/;" s struct:dd_data
+__anonc826279f070a globals.h /^ union {$/;" u struct:cp_data
+__anonc826279f0808 globals.h /^ struct {$/;" s union:cp_data::__anonc826279f070a
+__anonc826279f0908 globals.h /^ struct {$/;" s union:cp_data::__anonc826279f070a
+__anonc826279f0a0a globals.h /^ union {$/;" u struct:ps_data
+__anonc826279f0b08 globals.h /^ struct {$/;" s union:ps_data::__anonc826279f0a0a
+__anonc826279f0c08 globals.h /^ struct {$/;" s union:ps_data::__anonc826279f0a0a
+__anonc826279f0d08 globals.h /^ struct {$/;" s union:ps_data::__anonc826279f0a0a
+__system_property_set lib/portability.h /^static inline int __system_property_set(const char *key, const char *value)$/;" f typeref:typename:int
+_xexit lib/xwrap.c /^void _xexit(void)$/;" f typeref:typename:void
+a globals.h /^ } a;$/;" m union:skeleton_data::__anonc826279f010a typeref:struct:skeleton_data::__anonc826279f010a::__anonc826279f0308
+a globals.h /^ char *a;$/;" m struct:passwd_data typeref:typename:char *
+a globals.h /^ long l, b, a;$/;" m struct:split_data typeref:typename:long
+ac globals.h /^ int ac, bat, therm, cool;$/;" m struct:acpi_data typeref:typename:int
+acpi globals.h /^ struct acpi_data acpi;$/;" m union:global_union typeref:struct:acpi_data
+acpi_data globals.h /^struct acpi_data {$/;" s
+add_num_cache lib/llist.c /^struct num_cache *add_num_cache(struct num_cache **cache, long long num,$/;" f typeref:struct:num_cache *
+address_idx globals.h /^ int address_idx;$/;" m struct:od_data typeref:typename:int
+addressfamily globals.h /^ int8_t addressfamily, is_addr;$/;" m struct:ip_data typeref:typename:int8_t
+af globals.h /^ int af;$/;" m struct:tftp_data typeref:typename:int
+af_type_A globals.h /^ char *af_type_A;$/;" m struct:arp_data typeref:typename:char *
+af_type_p globals.h /^ char *af_type_p;$/;" m struct:arp_data typeref:typename:char *
+again lib/lib.h /^ char again;$/;" m struct:dirtree typeref:typename:char
+all_sockets globals.h /^ struct double_list *all_sockets, *files;$/;" m struct:lsof_data typeref:struct:double_list *
+also globals.h /^ char *also, *blubber;$/;" m struct:skeleton_data::__anonc826279f010a::__anonc826279f0208 typeref:typename:char *
+android_LogPriority lib/portability.h /^typedef enum android_LogPriority {$/;" g
+android_LogPriority lib/portability.h /^} android_LogPriority;$/;" t typeref:enum:android_LogPriority
+arg lib/args.c /^ char *arg;$/;" m struct:getoptflagstate typeref:typename:char * file:
+arg lib/args.c /^ long *arg; \/\/ Pointer into union "this" to store arguments at.$/;" m struct:opts typeref:typename:long * file:
+arg lib/lib.h /^ char *arg;$/;" m struct:arg_list typeref:typename:char *
+arg_list lib/lib.h /^struct arg_list {$/;" s
+argc lib/args.c /^ int argc, minargs, maxargs;$/;" m struct:getoptflagstate typeref:typename:int file:
+argdata globals.h /^ struct double_list *argdata;$/;" m struct:find_data typeref:struct:double_list *
+argv toys.h /^ char **argv; \/\/ Original command line arguments$/;" m struct:toy_context typeref:typename:char **
+arp globals.h /^ struct arp_data arp;$/;" m union:global_union typeref:struct:arp_data
+arp_data globals.h /^struct arp_data {$/;" s
+arping globals.h /^ struct arping_data arping;$/;" m union:global_union typeref:struct:arping_data
+arping_data globals.h /^struct arping_data {$/;" s
+arr_flag globals.h /^ char *arr_flag;$/;" m struct:fsck_data typeref:typename:char *
+arr_type globals.h /^ char **arr_type;$/;" m struct:fsck_data typeref:typename:char **
+atolx lib/lib.c /^long long atolx(char *numstr)$/;" f typeref:typename:long long
+atolx_range lib/lib.c /^long long atolx_range(char *numstr, long long low, long long high)$/;" f typeref:typename:long long
+b globals.h /^ char *b;$/;" m struct:skeleton_data::__anonc826279f010a::__anonc826279f0208 typeref:typename:char *
+b globals.h /^ long b;$/;" m struct:skeleton_data::__anonc826279f010a::__anonc826279f0308 typeref:typename:long
+b globals.h /^ char *F, *k, *b;$/;" m struct:modinfo_data typeref:typename:char *
+b globals.h /^ char *s, *n, *b;$/;" m struct:nl_data typeref:typename:char *
+b globals.h /^ long l, b, a;$/;" m struct:split_data typeref:typename:long
+base globals.h /^ long long len, base;$/;" m struct:hexedit_data typeref:typename:long long
+base64 globals.h /^ struct base64_data base64;$/;" m union:global_union typeref:struct:base64_data
+base64_data globals.h /^struct base64_data {$/;" s
+base64_init lib/lib.c /^void base64_init(char *p)$/;" f typeref:typename:void
+basename globals.h /^ struct basename_data basename;$/;" m union:global_union typeref:struct:basename_data
+basename lib/portability.h /^static inline char *basename(char *path) { return __xpg_basename(path); }$/;" f typeref:typename:char *
+basename_data globals.h /^struct basename_data {$/;" s
+bat globals.h /^ int ac, bat, therm, cool;$/;" m struct:acpi_data typeref:typename:int
+bc globals.h /^ struct bc_data bc;$/;" m union:global_union typeref:struct:bc_data
+bc_data globals.h /^struct bc_data {$/;" s
+bigO globals.h /^ char *bigO;$/;" m struct:mount_data typeref:typename:char *
+bitbuf lib/deflate.c /^struct bitbuf {$/;" s file:
+bitbuf_bit lib/deflate.c /^static inline int bitbuf_bit(struct bitbuf *bb)$/;" f typeref:typename:int file:
+bitbuf_flush lib/deflate.c /^void bitbuf_flush(struct bitbuf *bb)$/;" f typeref:typename:void
+bitbuf_get lib/deflate.c /^unsigned bitbuf_get(struct bitbuf *bb, int bits)$/;" f typeref:typename:unsigned
+bitbuf_init lib/deflate.c /^struct bitbuf *bitbuf_init(int fd, int size)$/;" f typeref:struct:bitbuf *
+bitbuf_put lib/deflate.c /^void bitbuf_put(struct bitbuf *bb, int data, int len)$/;" f typeref:typename:void
+bitbuf_skip lib/deflate.c /^void bitbuf_skip(struct bitbuf *bb, int bits)$/;" f typeref:typename:void
+bitpos lib/deflate.c /^ int fd, bitpos, len, max;$/;" m struct:bitbuf typeref:typename:int file:
+bits globals.h /^ long long ticks, bits, time;$/;" m struct:ps_data typeref:typename:long long
+bits globals.h /^ unsigned bits;$/;" m struct:free_data typeref:typename:unsigned
+block_size globals.h /^ long block_size;$/;" m struct:tftp_data typeref:typename:long
+blockbits globals.h /^ unsigned blockbits; \/\/ Bits per block. (Also blocks per group.)$/;" m struct:mke2fs_data typeref:typename:unsigned
+blockdev globals.h /^ struct blockdev_data blockdev;$/;" m union:global_union typeref:struct:blockdev_data
+blockdev_data globals.h /^struct blockdev_data {$/;" s
+blocks globals.h /^ unsigned blocks; \/\/ Total blocks in the filesystem.$/;" m struct:mke2fs_data typeref:typename:unsigned
+blocksize globals.h /^ long blocksize;$/;" m struct:mke2fs_data typeref:typename:long
+blubber globals.h /^ char *also, *blubber;$/;" m struct:skeleton_data::__anonc826279f010a::__anonc826279f0208 typeref:typename:char *
+bn globals.h /^ long bn;$/;" m struct:tcpsvd_data typeref:typename:long
+bootchartd globals.h /^ struct bootchartd_data bootchartd;$/;" m union:global_union typeref:struct:bootchartd_data
+bootchartd_data globals.h /^struct bootchartd_data {$/;" s
+bp globals.h /^ unsigned char *buff, *bp;$/;" m struct:dd_data::__anonc826279f0608 typeref:typename:unsigned char *
+brctl globals.h /^ struct brctl_data brctl;$/;" m union:global_union typeref:struct:brctl_data
+brctl_data globals.h /^struct brctl_data {$/;" s
+brd_rcv globals.h /^ unsigned sent_at, sent_nr, rcvd_nr, brd_sent, rcvd_req, brd_rcv,$/;" m struct:arping_data typeref:typename:unsigned
+brd_sent globals.h /^ unsigned sent_at, sent_nr, rcvd_nr, brd_sent, rcvd_req, brd_rcv,$/;" m struct:arping_data typeref:typename:unsigned
+buf globals.h /^ char *buf; \/\/ Points to buffers[0] or buffers[1].$/;" m struct:od_data typeref:typename:char *
+buf globals.h /^ char *buf;$/;" m struct:free_data typeref:typename:char *
+buf globals.h /^ char buf[32];$/;" m struct:bootchartd_data typeref:typename:char[32]
+buf lib/deflate.c /^ char buf[];$/;" m struct:bitbuf typeref:typename:char[] file:
+buff globals.h /^ unsigned char *buff, *bp;$/;" m struct:dd_data::__anonc826279f0608 typeref:typename:unsigned char *
+buff globals.h /^ char buff[128];$/;" m struct:getty_data typeref:typename:char[128]
+buff globals.h /^ char buff[128];$/;" m struct:telnet_data typeref:typename:char[128]
+buffer globals.h /^ } buffer;$/;" m struct:md5sum_data typeref:union:md5sum_data::__anonc826279f040a
+bufgetgrgid lib/lib.c /^struct group *bufgetgrgid(gid_t gid)$/;" f typeref:struct:group *
+bufgetpwuid lib/lib.c /^struct passwd *bufgetpwuid(uid_t uid)$/;" f typeref:struct:passwd *
+bufs globals.h /^ char *bufs[2]; \/\/ Used to detect duplicate lines.$/;" m struct:od_data typeref:typename:char * [2]
+bytes globals.h /^ long entries, bytes;$/;" m struct:xargs_data typeref:typename:long
+bytes globals.h /^ unsigned long long bytes, c_count, in_full, in_part, out_full, out_part;$/;" m struct:dd_data typeref:typename:unsigned long long
+bytes_per_inode globals.h /^ long bytes_per_inode;$/;" m struct:mke2fs_data typeref:typename:long
+c globals.h /^ long c;$/;" m struct:skeleton_data::__anonc826279f010a::__anonc826279f0208 typeref:typename:long
+c globals.h /^ char c[64];$/;" m union:md5sum_data::__anonc826279f040a typeref:typename:char[64]
+c globals.h /^ } c;$/;" m union:cp_data::__anonc826279f070a typeref:struct:cp_data::__anonc826279f070a::__anonc826279f0908
+c globals.h /^ char *d, *c;$/;" m struct:mix_data typeref:typename:char *
+c globals.h /^ char *c;$/;" m struct:oneit_data typeref:typename:char *
+c globals.h /^ char *c;$/;" m struct:stat_data typeref:typename:char *
+c globals.h /^ char *c;$/;" m struct:su_data typeref:typename:char *
+c globals.h /^ char *c;$/;" m struct:switch_root_data typeref:typename:char *
+c globals.h /^ long c, n;$/;" m struct:head_data typeref:typename:long
+c globals.h /^ long n, c;$/;" m struct:tail_data typeref:typename:long
+c globals.h /^ long s, g, o, l, c;$/;" m struct:xxd_data typeref:typename:long
+c globals.h /^ long w, W, i, s, c, t, m;$/;" m struct:ping_data typeref:typename:long
+c globals.h /^ struct arg_list *c;$/;" m struct:md5sum_data typeref:struct:arg_list *
+c lib/args.c /^ int c; \/\/ Argument character to match$/;" m struct:opts typeref:typename:int file:
+c_count globals.h /^ unsigned long long bytes, c_count, in_full, in_part, out_full, out_part;$/;" m struct:dd_data typeref:typename:unsigned long long
+c_name lib/portability.h /^typedef struct {char *c_name; int c_val;} CODE;$/;" m struct:__anon24da09b40108 typeref:typename:char *
+c_val lib/portability.h /^typedef struct {char *c_name; int c_val;} CODE;$/;" m struct:__anon24da09b40108 typeref:typename:int
+callback globals.h /^ int (*callback)(struct dirtree *try);$/;" m struct:cp_data typeref:typename:int (*)(struct dirtree * try)
+cdir globals.h /^ char *cdir;$/;" m struct:crontab_data typeref:typename:char *
+change globals.h /^ int dir_num, size, is_binary, status, change, len[2];$/;" m struct:diff_data typeref:typename:int
+chgrp globals.h /^ struct chgrp_data chgrp;$/;" m union:global_union typeref:struct:chgrp_data
+chgrp_data globals.h /^struct chgrp_data {$/;" s
+child lib/lib.h /^ struct dirtree *next, *parent, *child;$/;" m struct:dirtree typeref:struct:dirtree *
+chmod globals.h /^ struct chmod_data chmod;$/;" m union:global_union typeref:struct:chmod_data
+chmod_data globals.h /^struct chmod_data {$/;" s
+chomp lib/lib.c /^char *chomp(char *s)$/;" f typeref:typename:char *
+chrt globals.h /^ struct chrt_data chrt;$/;" m union:global_union typeref:struct:chrt_data
+chrt_data globals.h /^struct chrt_data {$/;" s
+cin_fd globals.h /^ int cin_fd;$/;" m struct:more_data typeref:typename:int
+cksum globals.h /^ struct cksum_data cksum;$/;" m union:global_union typeref:struct:cksum_data
+cksum_data globals.h /^struct cksum_data {$/;" s
+clearenv lib/portability.c /^int clearenv(void)$/;" f typeref:typename:int
+cmdopts globals.h /^ char *cmdopts;$/;" m struct:modprobe_data typeref:typename:char *
+cmp globals.h /^ struct cmp_data cmp;$/;" m union:global_union typeref:struct:cmp_data
+cmp_data globals.h /^struct cmp_data {$/;" s
+cn globals.h /^ long cn;$/;" m struct:tcpsvd_data typeref:typename:long
+col globals.h /^ int fd, col;$/;" m struct:stty_data typeref:typename:int
+color globals.h /^ char *color;$/;" m struct:ls_data typeref:typename:char *
+column_widths globals.h /^ int column_widths[5];$/;" m struct:df_data typeref:typename:int[5]
+comma_args lib/commas.c /^void comma_args(struct arg_list *al, void *data, char *err,$/;" f typeref:typename:void
+comma_collate lib/commas.c /^void comma_collate(char **old, char *new)$/;" f typeref:typename:void
+comma_iterate lib/commas.c /^char *comma_iterate(char **list, int *len)$/;" f typeref:typename:char *
+comma_scan lib/commas.c /^int comma_scan(char *optlist, char *opt, int clean)$/;" f typeref:typename:int
+comma_scanall lib/commas.c /^int comma_scanall(char *optlist, char *scanlist)$/;" f typeref:typename:int
+command globals.h /^ char *command;$/;" m struct:sh_data typeref:typename:char *
+config_file globals.h /^ char *config_file;$/;" m struct:syslogd_data typeref:typename:char *
+confstr lib/portability.h /^static inline void confstr(int a, char *b, int c) {strcpy(b, a ? "POSIXLY_CORRECT=1" : "\/bin:\//;" f typeref:typename:void
+connected globals.h /^ int sockfd, connected, from_ok, route_cmd;$/;" m struct:ip_data typeref:typename:int
+context globals.h /^ int context, state, filein, fileout, filepatch, hunknum;$/;" m struct:patch_data typeref:typename:int
+cool globals.h /^ int ac, bat, therm, cool;$/;" m struct:acpi_data typeref:typename:int
+copy_tempfile lib/lib.c /^int copy_tempfile(int fdin, char *name, char **tempname)$/;" f typeref:typename:int
+count globals.h /^ long count;$/;" m struct:arping_data typeref:typename:long
+count globals.h /^ long sz, count;$/;" m struct:dd_data::__anonc826279f0608 typeref:typename:long
+count globals.h /^ long nextlen, rememberlen, count;$/;" m struct:sed_data typeref:typename:long
+count globals.h /^ uint64_t count;$/;" m struct:md5sum_data typeref:typename:uint64_t
+count_all globals.h /^ int count_all;$/;" m struct:tcpsvd_data typeref:typename:int
+cp globals.h /^ struct cp_data cp;$/;" m union:global_union typeref:struct:cp_data
+cp_data globals.h /^struct cp_data {$/;" s
+cpath globals.h /^ char *cpath;$/;" m struct:acpi_data typeref:typename:char *
+cpio globals.h /^ struct cpio_data cpio;$/;" m union:global_union typeref:struct:cpio_data
+cpio_data globals.h /^struct cpio_data {$/;" s
+crc lib/deflate.c /^ unsigned crctable[256], crc;$/;" m struct:deflate typeref:typename:unsigned file:
+crc_init lib/lib.c /^void crc_init(unsigned int *crc_table, int little_endian)$/;" f typeref:typename:void
+crc_table globals.h /^ unsigned crc_table[256];$/;" m struct:cksum_data typeref:typename:unsigned[256]
+crcfunc lib/deflate.c /^ void (*crcfunc)(struct deflate *dd, char *data, int len);$/;" m struct:deflate typeref:typename:void (*)(struct deflate * dd,char * data,int len) file:
+crctable lib/deflate.c /^ unsigned crctable[256], crc;$/;" m struct:deflate typeref:typename:unsigned[256] file:
+create_uuid lib/lib.c /^void create_uuid(char *uuid)$/;" f typeref:typename:void
+crntio globals.h /^ struct termios crntio;$/;" m struct:sulogin_data typeref:struct:termios
+crond globals.h /^ struct crond_data crond;$/;" m union:global_union typeref:struct:crond_data
+crond_data globals.h /^struct crond_data {$/;" s
+crontab globals.h /^ struct crontab_data crontab;$/;" m union:global_union typeref:struct:crontab_data
+crontab_data globals.h /^struct crontab_data {$/;" s
+crontabs_dir globals.h /^ char *crontabs_dir;$/;" m struct:crond_data typeref:typename:char *
+crontabs_dir_mtime globals.h /^ time_t crontabs_dir_mtime;$/;" m struct:crond_data typeref:typename:time_t
+crunch_escape lib/linestack.c /^int crunch_escape(FILE *out, int cols, int wc)$/;" f typeref:typename:int
+crunch_rev_escape lib/linestack.c /^int crunch_rev_escape(FILE *out, int cols, int wc)$/;" f typeref:typename:int
+crunch_str lib/linestack.c /^int crunch_str(char **str, int width, FILE *out, char *escmore,$/;" f typeref:typename:int
+ct globals.h /^ long ct;$/;" m struct:diff_data typeref:typename:long
+cur_pid globals.h /^ pid_t cur_pid;$/;" m struct:killall_data typeref:typename:pid_t
+current_hunk globals.h /^ struct double_list *current_hunk;$/;" m struct:patch_data typeref:struct:double_list *
+cut globals.h /^ struct cut_data cut;$/;" m union:global_union typeref:struct:cut_data
+cut_data globals.h /^struct cut_data {$/;" s
+cylinders globals.h /^ long cylinders;$/;" m struct:fdisk_data typeref:typename:long
+d globals.h /^ char *d;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0d08 typeref:typename:char *
+d globals.h /^ long n, m, d, s;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0c08 typeref:typename:long
+d globals.h /^ struct arg_list *d;$/;" m struct:skeleton_data::__anonc826279f010a::__anonc826279f0208 typeref:struct:arg_list *
+d globals.h /^ char *d, *c;$/;" m struct:mix_data typeref:typename:char *
+d globals.h /^ char *d, *O;$/;" m struct:cut_data typeref:typename:char *
+d globals.h /^ char *d;$/;" m struct:paste_data typeref:typename:char *
+d globals.h /^ char *i, *d;$/;" m struct:patch_data typeref:typename:char *
+d globals.h /^ char *r, *D, *d;$/;" m struct:date_data typeref:typename:char *
+d globals.h /^ char *t, *r, *d;$/;" m struct:touch_data typeref:typename:char *
+d globals.h /^ long d;$/;" m struct:du_data typeref:typename:long
+data globals.h /^ char *data;$/;" m struct:hexedit_data typeref:typename:char *
+data lib/deflate.c /^ char data[];$/;" m struct:deflate typeref:typename:char[] file:
+data lib/lib.h /^ char *data;$/;" m struct:double_list typeref:typename:char *
+data lib/lib.h /^ char data[];$/;" m struct:num_cache typeref:typename:char[]
+date globals.h /^ struct date_data date;$/;" m union:global_union typeref:struct:date_data
+date_data globals.h /^struct date_data {$/;" s
+db globals.h /^ FILE *db;$/;" m struct:lspci_data typeref:typename:FILE *
+dbase globals.h /^ struct arg_list *dbase[256];$/;" m struct:modprobe_data typeref:struct:arg_list * [256]
+dd globals.h /^ struct dd_data dd;$/;" m union:global_union typeref:struct:dd_data
+dd_data globals.h /^struct dd_data {$/;" s
+def_term globals.h /^ struct termios def_term;$/;" m struct:telnet_data typeref:struct:termios
+deflate lib/deflate.c /^static void deflate(struct deflate *dd, struct bitbuf *bb)$/;" f typeref:typename:void file:
+deflate lib/deflate.c /^struct deflate {$/;" s file:
+delete_tempfile lib/lib.c /^void delete_tempfile(int fdin, int fdout, char **tempname)$/;" f typeref:typename:void
+delim globals.h /^ char delim;$/;" m struct:xargs_data typeref:typename:char
+depth globals.h /^ int topdir, xdev, depth;$/;" m struct:find_data typeref:typename:int
+depth globals.h /^ unsigned long depth, total;$/;" m struct:du_data typeref:typename:unsigned long
+destname globals.h /^ char *destname;$/;" m struct:cp_data typeref:typename:char *
+dev_major lib/lib.c /^int dev_major(int dev)$/;" f typeref:typename:int
+dev_makedev lib/lib.c /^int dev_makedev(int major, int minor)$/;" f typeref:typename:int
+dev_minor lib/lib.c /^int dev_minor(int dev)$/;" f typeref:typename:int
+device globals.h /^ char *device;$/;" m struct:arp_data typeref:typename:char *
+device globals.h /^ char *device;$/;" m struct:stty_data typeref:typename:char *
+device lib/lib.h /^ char *device;$/;" m struct:mtab_list typeref:typename:char *
+devices globals.h /^ struct double_list *devices;$/;" m struct:fsck_data typeref:struct:double_list *
+dex lib/args.c /^ unsigned long long dex[3]; \/\/ bits to disable\/enable\/exclude in toys.optflags$/;" m struct:opts typeref:typename:unsigned long long[3] file:
+df globals.h /^ struct df_data df;$/;" m union:global_union typeref:struct:df_data
+df_data globals.h /^struct df_data {$/;" s
+dhcp globals.h /^ struct dhcp_data dhcp;$/;" m union:global_union typeref:struct:dhcp_data
+dhcp6 globals.h /^ struct dhcp6_data dhcp6;$/;" m union:global_union typeref:struct:dhcp6_data
+dhcp6_data globals.h /^struct dhcp6_data {$/;" s
+dhcp_data globals.h /^struct dhcp_data {$/;" s
+dhcpd globals.h /^ struct dhcpd_data dhcpd;$/;" m union:global_union typeref:struct:dhcpd_data
+dhcpd_data globals.h /^struct dhcpd_data {$/;" s
+diff globals.h /^ struct diff_data diff;$/;" m union:global_union typeref:struct:diff_data
+diff_data globals.h /^struct diff_data {$/;" s
+dir globals.h /^ char *dir;$/;" m struct:tar_data typeref:typename:char *
+dir globals.h /^ char *dir;$/;" m struct:useradd_data typeref:typename:char *
+dir lib/lib.h /^ char *dir;$/;" m struct:mtab_list typeref:typename:char *
+dir_num globals.h /^ int dir_num, size, is_binary, status, change, len[2];$/;" m struct:diff_data typeref:typename:int
+dirfd lib/lib.h /^ int dirfd;$/;" m struct:dirtree typeref:typename:int
+dirs globals.h /^ struct arg_list *dirs;$/;" m struct:modprobe_data typeref:struct:arg_list *
+dirtree lib/lib.h /^struct dirtree {$/;" s
+dirtree_add_node lib/dirtree.c /^struct dirtree *dirtree_add_node(struct dirtree *parent, char *name, int flags)$/;" f typeref:struct:dirtree *
+dirtree_flagread lib/dirtree.c /^struct dirtree *dirtree_flagread(char *path, int flags,$/;" f typeref:struct:dirtree *
+dirtree_handle_callback lib/dirtree.c /^struct dirtree *dirtree_handle_callback(struct dirtree *new,$/;" f typeref:struct:dirtree *
+dirtree_notdotdot lib/dirtree.c /^int dirtree_notdotdot(struct dirtree *catch)$/;" f typeref:typename:int
+dirtree_parentfd lib/dirtree.c /^int dirtree_parentfd(struct dirtree *node)$/;" f typeref:typename:int
+dirtree_path lib/dirtree.c /^char *dirtree_path(struct dirtree *node, int *plen)$/;" f typeref:typename:char *
+dirtree_read lib/dirtree.c /^struct dirtree *dirtree_read(char *path, int (*callback)(struct dirtree *node))$/;" f typeref:struct:dirtree *
+dirtree_recurse lib/dirtree.c /^int dirtree_recurse(struct dirtree *node,$/;" f typeref:typename:int
+distbase lib/deflate.c /^ unsigned short lenbase[29], distbase[30];$/;" m struct:deflate typeref:typename:unsigned short[30] file:
+distbits lib/deflate.c /^ char lenbits[29], distbits[30];$/;" m struct:deflate typeref:typename:char[30] file:
+dlist_add lib/llist.c /^struct double_list *dlist_add(struct double_list **list, char *data)$/;" f typeref:struct:double_list *
+dlist_add_nomalloc lib/llist.c /^void dlist_add_nomalloc(struct double_list **list, struct double_list *new)$/;" f typeref:typename:void
+dlist_pop lib/llist.c /^void *dlist_pop(void *list)$/;" f typeref:typename:void *
+dlist_terminate lib/llist.c /^void *dlist_terminate(void *list)$/;" f typeref:typename:void *
+dmesg globals.h /^ struct dmesg_data dmesg;$/;" m union:global_union typeref:struct:dmesg_data
+dmesg_data globals.h /^struct dmesg_data {$/;" s
+do_lines lib/lib.c /^void do_lines(int fd, void (*call)(char **pline, long len))$/;" f typeref:typename:void
+do_lines_bridge lib/lib.c /^static void (*do_lines_bridge)(char **pline, long len);$/;" v typeref:typename:void (*)(char ** pline,long len) file:
+dos2unix globals.h /^ struct dos2unix_data dos2unix;$/;" m union:global_union typeref:struct:dos2unix_data
+dos2unix_data globals.h /^struct dos2unix_data {$/;" s
+double_list lib/lib.h /^struct double_list {$/;" s
+draw_str lib/linestack.c /^int draw_str(char *start, int width)$/;" f typeref:typename:int
+draw_trim lib/linestack.c /^int draw_trim(char *str, int padto, int width)$/;" f typeref:typename:int
+draw_trim_esc lib/linestack.c /^int draw_trim_esc(char *str, int padto, int width, char *escmore,$/;" f typeref:typename:int
+dt globals.h /^ struct dirtree *dt; \/\/ Tree of files to copy into the new filesystem.$/;" m struct:mke2fs_data typeref:struct:dirtree *
+du globals.h /^ struct du_data du;$/;" m union:global_union typeref:struct:du_data
+du_data globals.h /^struct du_data {$/;" s
+dumpleases globals.h /^ struct dumpleases_data dumpleases;$/;" m union:global_union typeref:struct:dumpleases_data
+dumpleases_data globals.h /^struct dumpleases_data {$/;" s
+e globals.h /^ long e;$/;" m struct:skeleton_data::__anonc826279f010a::__anonc826279f0208 typeref:typename:long
+e globals.h /^ struct arg_list *f, *e, *M, *S;$/;" m struct:grep_data typeref:struct:arg_list *
+e globals.h /^ struct arg_list *f, *e;$/;" m struct:sed_data typeref:struct:arg_list *
+end globals.h /^ unsigned long start, end;$/;" m struct:arping_data typeref:typename:unsigned long
+endutxent lib/portability.h /^static inline void endutxent(void) {;}$/;" f typeref:typename:void
+entries globals.h /^ long entries, bytes;$/;" m struct:xargs_data typeref:typename:long
+env globals.h /^ struct env_data env;$/;" m union:global_union typeref:struct:env_data
+env_data globals.h /^struct env_data {$/;" s
+environ_bytes lib/lib.c /^long environ_bytes()$/;" f typeref:typename:long
+err globals.h /^ short *err;$/;" m struct:killall_data typeref:typename:short *
+error_exit lib/lib.c /^void error_exit(char *msg, ...)$/;" f typeref:typename:void
+error_exit_raw lib/lib.c /^void error_exit_raw(char *msg)$/;" f typeref:typename:void
+error_msg lib/lib.c /^void error_msg(char *msg, ...)$/;" f typeref:typename:void
+error_msg_raw lib/lib.c /^void error_msg_raw(char *msg)$/;" f typeref:typename:void
+errortimeout globals.h /^ long retry, timeout, errortimeout;$/;" m struct:dhcp6_data typeref:typename:long
+escmore globals.h /^ char *escmore;$/;" m struct:ls_data typeref:typename:char *
+estrtol lib/lib.c /^long long estrtol(char *str, char **end, int base)$/;" f typeref:typename:long long
+exc globals.h /^ struct arg_list *exc;$/;" m struct:tar_data typeref:struct:arg_list *
+exc_file globals.h /^ struct arg_list *exc_file;$/;" m struct:tar_data typeref:struct:arg_list *
+excludes lib/args.c /^ unsigned excludes, requires;$/;" m struct:getoptflagstate typeref:typename:unsigned file:
+exit_signal lib/lib.c /^void exit_signal(int sig)$/;" f typeref:typename:void
+exitval toys.h /^ char exitval; \/\/ Value error_exit feeds to exit()$/;" m struct:toy_context typeref:typename:char
+expand globals.h /^ struct expand_data expand;$/;" m union:global_union typeref:struct:expand_data
+expand_data globals.h /^struct expand_data {$/;" s
+expr globals.h /^ struct expr_data expr;$/;" m union:global_union typeref:struct:expr_data
+expr_data globals.h /^struct expr_data {$/;" s
+extra lib/lib.h /^ long extra; \/\/ place for user to store their stuff (can be pointer)$/;" m struct:dirtree typeref:typename:long
+f globals.h /^ char *f, *s;$/;" m struct:netcat_data typeref:typename:char *
+f globals.h /^ char *f, *t;$/;" m struct:iconv_data typeref:typename:char *
+f globals.h /^ char *s, *f;$/;" m struct:seq_data typeref:typename:char *
+f globals.h /^ long w, s, f;$/;" m struct:uniq_data typeref:typename:long
+f globals.h /^ struct arg_list *f, *e, *M, *S;$/;" m struct:grep_data typeref:struct:arg_list *
+f globals.h /^ struct arg_list *f, *e;$/;" m struct:sed_data typeref:struct:arg_list *
+f lib/args.c /^ FLOAT f;$/;" m union:opts::__anon2edfd129010a typeref:typename:FLOAT file:
+fallocate globals.h /^ struct fallocate_data fallocate;$/;" m union:global_union typeref:struct:fallocate_data
+fallocate_data globals.h /^struct fallocate_data {$/;" s
+family globals.h /^ char *family;$/;" m struct:route_data typeref:typename:char *
+fd globals.h /^ int fd;$/;" m struct:dd_data::__anonc826279f0608 typeref:typename:int
+fd globals.h /^ int fd, col;$/;" m struct:stty_data typeref:typename:int
+fd globals.h /^ int fd;$/;" m struct:cmp_data typeref:typename:int
+fd globals.h /^ int fd;$/;" m struct:ftpget_data typeref:typename:int
+fd globals.h /^ int fd;$/;" m struct:klogd_data typeref:typename:int
+fd globals.h /^ int fd;$/;" m struct:microcom_data typeref:typename:int
+fd lib/deflate.c /^ int fd, bitpos, len, max;$/;" m struct:bitbuf typeref:typename:int file:
+fd_num globals.h /^ int fd_num;$/;" m struct:fsck_data typeref:typename:int
+fdisk globals.h /^ struct fdisk_data fdisk;$/;" m union:global_union typeref:struct:fdisk_data
+fdisk_data globals.h /^struct fdisk_data {$/;" s
+fdlength lib/lib.c /^off_t fdlength(int fd)$/;" f typeref:typename:off_t
+fdn_name globals.h /^ char *fdn_name;$/;" m struct:dhcp_data typeref:typename:char *
+fdout globals.h /^ int fdout, noeol;$/;" m struct:sed_data typeref:typename:int
+ffd globals.h /^ int file_no, ffd, *files;$/;" m struct:tail_data typeref:typename:int
+fgetfilecon lib/lsm.h /^#define fgetfilecon(/;" d
+fields globals.h /^ void *fields, *kfields;$/;" m struct:ps_data typeref:typename:void *
+file globals.h /^ struct file_data file;$/;" m union:global_union typeref:struct:file_data
+file globals.h /^ char *file;$/;" m struct:dumpleases_data typeref:typename:char *
+file globals.h /^ char *file, *pattern;$/;" m struct:stat_data typeref:typename:char *
+file globals.h /^ char *file;$/;" m struct:last_data typeref:typename:char *
+file_data globals.h /^struct file_data {$/;" s
+file_no globals.h /^ int file_no, ffd, *files;$/;" m struct:tail_data typeref:typename:int
+file_no globals.h /^ int file_no;$/;" m struct:head_data typeref:typename:int
+filein globals.h /^ int context, state, filein, fileout, filepatch, hunknum;$/;" m struct:patch_data typeref:typename:int
+filename globals.h /^ char *filename;$/;" m struct:wget_data typeref:typename:char *
+fileout globals.h /^ int context, state, filein, fileout, filepatch, hunknum;$/;" m struct:patch_data typeref:typename:int
+filepatch globals.h /^ int context, state, filein, fileout, filepatch, hunknum;$/;" m struct:patch_data typeref:typename:int
+files globals.h /^ int file_no, ffd, *files;$/;" m struct:tail_data typeref:typename:int *
+files globals.h /^ int files;$/;" m struct:paste_data typeref:typename:int
+files globals.h /^ struct dirtree *files, *singledir;$/;" m struct:ls_data typeref:struct:dirtree *
+files globals.h /^ struct double_list *all_sockets, *files;$/;" m struct:lsof_data typeref:struct:double_list *
+fileunderdir lib/lib.c /^int fileunderdir(char *file, char *dir)$/;" f typeref:typename:int
+filter globals.h /^ char **filter;$/;" m struct:find_data typeref:typename:char **
+filter_dev globals.h /^ char stats, singleline, flush, *filter_dev, gbuf[8192];$/;" m struct:ip_data typeref:typename:char *
+find globals.h /^ struct find_data find;$/;" m union:global_union typeref:struct:find_data
+find_data globals.h /^struct find_data {$/;" s
+find_in_path lib/lib.c /^struct string_list *find_in_path(char *path, char *filename)$/;" f typeref:struct:string_list *
+first_ttl globals.h /^ long first_ttl;$/;" m struct:traceroute_data typeref:typename:long
+fixdisthuff lib/deflate.c /^ void *fixdisthuff, *fixlithuff;$/;" m struct:deflate typeref:typename:void * file:
+fixlithuff lib/deflate.c /^ void *fixdisthuff, *fixlithuff;$/;" m struct:deflate typeref:typename:void * file:
+flagd globals.h /^ uint8_t flagd;$/;" m struct:crond_data typeref:typename:uint8_t
+flags globals.h /^ uint8_t flags;$/;" m struct:telnet_data typeref:typename:uint8_t
+flags globals.h /^ unsigned long flags;$/;" m struct:mount_data typeref:typename:unsigned long
+flags lib/args.c /^ int flags; \/\/ |=1, ^=2, " "=4, ;=8$/;" m struct:opts typeref:typename:int file:
+flags toys.h /^ int flags;$/;" m struct:toy_list typeref:typename:int
+flush globals.h /^ char stats, singleline, flush, *filter_dev, gbuf[8192];$/;" m struct:ip_data typeref:typename:char
+fmt globals.h /^ struct fmt_data fmt;$/;" m union:global_union typeref:struct:fmt_data
+fmt_data globals.h /^struct fmt_data {$/;" s
+fname globals.h /^ char *fname;$/;" m struct:hwclock_data typeref:typename:char *
+fname globals.h /^ char *fname;$/;" m struct:makedevs_data typeref:typename:char *
+fname globals.h /^ char *fname;$/;" m struct:tar_data typeref:typename:char *
+fold globals.h /^ struct fold_data fold;$/;" m union:global_union typeref:struct:fold_data
+fold_data globals.h /^struct fold_data {$/;" s
+forcek globals.h /^ int kcount, forcek, sortpos;$/;" m struct:ps_data typeref:typename:int
+fork_pid globals.h /^ pid_t fork_pid;$/;" m struct:telnetd_data typeref:typename:pid_t
+format_iso_time lib/lib.c /^char *format_iso_time(char *buf, size_t len, struct timespec *ts)$/;" f typeref:typename:char *
+found globals.h /^ int found;$/;" m struct:grep_data typeref:typename:int
+free globals.h /^ struct free_data free;$/;" m union:global_union typeref:struct:free_data
+free_data globals.h /^struct free_data {$/;" s
+freeblocks globals.h /^ unsigned freeblocks; \/\/ Free blocks in the filesystem.$/;" m struct:mke2fs_data typeref:typename:unsigned
+from_ok globals.h /^ int sockfd, connected, from_ok, route_cmd;$/;" m struct:ip_data typeref:typename:int
+fsck globals.h /^ struct fsck_data fsck;$/;" m union:global_union typeref:struct:fsck_data
+fsck_data globals.h /^struct fsck_data {$/;" s
+fsetfilecon lib/lsm.h /^#define fsetfilecon(/;" d
+fsfd globals.h /^ int fsfd; \/\/ File descriptor of filesystem (to output to).$/;" m struct:mke2fs_data typeref:typename:int
+fstatat lib/portability.h /^#define fstatat /;" d
+ftpget globals.h /^ struct ftpget_data ftpget;$/;" m union:global_union typeref:struct:ftpget_data
+ftpget_data globals.h /^struct ftpget_data {$/;" s
+fugit globals.h /^ unsigned long sent, recv, fugit, min, max;$/;" m struct:ping_data typeref:typename:unsigned long
+g globals.h /^ char *g, *o, *m;$/;" m struct:cp_data::__anonc826279f070a::__anonc826279f0808 typeref:typename:char *
+g globals.h /^ struct arg_list *G, *g, *P, *s, *t, *U, *u;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0d08 typeref:struct:arg_list *
+g globals.h /^ struct arg_list *G, *g, *U, *u, *t, *s, *p, *O, *o, *P, *k;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0b08 typeref:struct:arg_list *
+g globals.h /^ long s, g, o, l, c;$/;" m struct:xxd_data typeref:typename:long
+gbuf globals.h /^ char stats, singleline, flush, *filter_dev, gbuf[8192];$/;" m struct:ip_data typeref:typename:char[8192]
+gecos globals.h /^ char *gecos;$/;" m struct:useradd_data typeref:typename:char *
+gendir globals.h /^ char *gendir; \/\/ Where to read dirtree from.$/;" m struct:mke2fs_data typeref:typename:char *
+generic_signal lib/lib.c /^void generic_signal(int sig)$/;" f typeref:typename:void
+get_line lib/lib.c /^char *get_line(int fd)$/;" f typeref:typename:char *
+get_nextcolon lib/password.c /^static char *get_nextcolon(char *line, int cnt)$/;" f typeref:typename:char * file:
+get_num_cache lib/llist.c /^struct num_cache *get_num_cache(struct num_cache *cache, long long num)$/;" f typeref:struct:num_cache *
+get_optflags lib/args.c /^void get_optflags(void)$/;" f typeref:typename:void
+get_rawline lib/lib.c /^char *get_rawline(int fd, long *plen, char end)$/;" f typeref:typename:char *
+get_salt lib/password.c /^int get_salt(char *salt, char *algo)$/;" f typeref:typename:int
+get_sched_policy lib/portability.h /^static inline int get_sched_policy(int tid, void *policy) {return 0;}$/;" f typeref:typename:int
+get_sched_policy_name lib/portability.h /^static inline char *get_sched_policy_name(int policy) {return "unknown";}$/;" f typeref:typename:char *
+getbasename lib/lib.c /^char *getbasename(char *name)$/;" f typeref:typename:char *
+getcon lib/lsm.h /^#define getcon(/;" d
+getdelim lib/portability.c /^ssize_t getdelim(char **linep, size_t *np, int delim, FILE *stream)$/;" f typeref:typename:ssize_t
+getdirname lib/lib.c /^char *getdirname(char *name)$/;" f typeref:typename:char *
+getfattr globals.h /^ struct getfattr_data getfattr;$/;" m union:global_union typeref:struct:getfattr_data
+getfattr_data globals.h /^struct getfattr_data {$/;" s
+getfilecon lib/lsm.h /^#define getfilecon(/;" d
+getgroupname lib/lib.c /^char *getgroupname(gid_t gid)$/;" f typeref:typename:char *
+getline lib/portability.c /^ssize_t getline(char **linep, size_t *np, FILE *stream)$/;" f typeref:typename:ssize_t
+getoptflagstate lib/args.c /^struct getoptflagstate$/;" s file:
+getprop globals.h /^ struct getprop_data getprop;$/;" m union:global_union typeref:struct:getprop_data
+getprop_data globals.h /^struct getprop_data {$/;" s
+getty globals.h /^ struct getty_data getty;$/;" m union:global_union typeref:struct:getty_data
+getty_data globals.h /^struct getty_data {$/;" s
+getusername lib/lib.c /^char *getusername(uid_t uid)$/;" f typeref:typename:char *
+getutxent lib/portability.h /^static inline struct utmpx *getutxent(void) {return 0;}$/;" f typeref:struct:utmpx *
+gg globals.h /^ struct ptr_len gg, GG, pp, PP, ss, tt, uu, UU;$/;" m struct:ps_data typeref:struct:ptr_len
+gid globals.h /^ gid_t gid;$/;" m struct:cp_data typeref:typename:gid_t
+gid globals.h /^ long gid;$/;" m struct:groupadd_data typeref:typename:long
+gid globals.h /^ long gid;$/;" m struct:useradd_data typeref:typename:long
+global_union globals.h /^extern union global_union {$/;" u
+gmax_fd globals.h /^ int gmax_fd;$/;" m struct:telnetd_data typeref:typename:int
+gotflag lib/args.c /^static int gotflag(struct getoptflagstate *gof, struct opts *opt)$/;" f typeref:typename:int file:
+gr lib/lib.c /^ struct group gr;$/;" m struct:bufgetgrgid::grgidbuf_list typeref:struct:group file:
+grep globals.h /^ struct grep_data grep;$/;" m union:global_union typeref:struct:grep_data
+grep_data globals.h /^struct grep_data {$/;" s
+grgidbuf_list lib/lib.c /^ struct grgidbuf_list {$/;" s function:bufgetgrgid file:
+group globals.h /^ gid_t group;$/;" m struct:chgrp_data typeref:typename:gid_t
+group_name globals.h /^ char *owner_name, *group_name;$/;" m struct:chgrp_data typeref:typename:char *
+groupadd globals.h /^ struct groupadd_data groupadd;$/;" m union:global_union typeref:struct:groupadd_data
+groupadd_data globals.h /^struct groupadd_data {$/;" s
+groups globals.h /^ unsigned groups; \/\/ Total number of block groups.$/;" m struct:mke2fs_data typeref:typename:unsigned
+gunzip_fd lib/deflate.c /^long long gunzip_fd(int infd, int outfd)$/;" f typeref:typename:long long
+gw_list globals.h /^ uint32_t gw_list[9];$/;" m struct:traceroute_data typeref:typename:uint32_t[9]
+gzip globals.h /^ struct gzip_data gzip;$/;" m union:global_union typeref:struct:gzip_data
+gzip_crc lib/deflate.c /^void gzip_crc(struct deflate *dd, char *data, int len)$/;" f typeref:typename:void
+gzip_data globals.h /^struct gzip_data {$/;" s
+gzip_fd lib/deflate.c /^long long gzip_fd(int infd, int outfd)$/;" f typeref:typename:long long
+handle globals.h /^ struct selabel_handle *handle;$/;" m struct:getprop_data typeref:struct:selabel_handle *
+handle globals.h /^ void *inodes, *handle;$/;" m struct:tar_data typeref:typename:void *
+hashchain lib/deflate.c /^ unsigned short *hashhead, *hashchain;$/;" m struct:deflate typeref:typename:unsigned short * file:
+hashhead lib/deflate.c /^ unsigned short *hashhead, *hashchain;$/;" m struct:deflate typeref:typename:unsigned short * file:
+head globals.h /^ struct head_data head;$/;" m union:global_union typeref:struct:head_data
+head globals.h /^ void *head;$/;" m struct:bootchartd_data typeref:typename:void *
+head_data globals.h /^struct head_data {$/;" s
+header_shown globals.h /^ int header_shown;$/;" m struct:df_data typeref:typename:int
+heads globals.h /^ long heads;$/;" m struct:fdisk_data typeref:typename:long
+height globals.h /^ unsigned height;$/;" m struct:hexedit_data typeref:typename:unsigned
+height globals.h /^ unsigned width, height;$/;" m struct:ps_data typeref:typename:unsigned
+hello globals.h /^ struct hello_data hello;$/;" m union:global_union typeref:struct:hello_data
+hello_data globals.h /^struct hello_data {$/;" s
+help_data lib/help.c /^static char *help_data =$/;" v typeref:typename:char * file:
+help_exit lib/lib.c /^void help_exit(char *msg, ...)$/;" f typeref:typename:void
+hexedit globals.h /^ struct hexedit_data hexedit;$/;" m union:global_union typeref:struct:hexedit_data
+hexedit_data globals.h /^struct hexedit_data {$/;" s
+highest_bit lib/lib.c /^int highest_bit(unsigned long l)$/;" f typeref:typename:int
+host globals.h /^ struct host_data host;$/;" m union:global_union typeref:struct:host_data
+host_addr globals.h /^ char *host_addr;$/;" m struct:telnetd_data typeref:typename:char *
+host_data globals.h /^struct host_data {$/;" s
+host_str globals.h /^ char *host_str; $/;" m struct:getty_data typeref:typename:char *
+hostname globals.h /^ struct hostname_data hostname;$/;" m union:global_union typeref:struct:hostname_data
+hostname globals.h /^ char *hostname;$/;" m struct:dhcp_data typeref:typename:char *
+hostname globals.h /^ char *hostname;$/;" m struct:login_data typeref:typename:char *
+hostname_data globals.h /^struct hostname_data {$/;" s
+huff lib/deflate.c /^struct huff {$/;" s file:
+huff_and_puff lib/deflate.c /^static unsigned huff_and_puff(struct bitbuf *bb, struct huff *huff)$/;" f typeref:typename:unsigned file:
+human_readable lib/lib.c /^int human_readable(char *buf, unsigned long long num, int style)$/;" f typeref:typename:int
+hunknum globals.h /^ int context, state, filein, fileout, filepatch, hunknum;$/;" m struct:patch_data typeref:typename:int
+hw_type globals.h /^ char *hw_type;$/;" m struct:arp_data typeref:typename:char *
+hwclock globals.h /^ struct hwclock_data hwclock;$/;" m union:global_union typeref:struct:hwclock_data
+hwclock_data globals.h /^struct hwclock_data {$/;" s
+i globals.h /^ unsigned i[16];$/;" m union:md5sum_data::__anonc826279f040a typeref:typename:unsigned[16]
+i globals.h /^ } i;$/;" m union:cp_data::__anonc826279f070a typeref:struct:cp_data::__anonc826279f070a::__anonc826279f0808
+i globals.h /^ char *i, *d;$/;" m struct:patch_data typeref:typename:char *
+i globals.h /^ char *i;$/;" m struct:lspci_data typeref:typename:char *
+i globals.h /^ long w, W, i, s, c, t, m;$/;" m struct:ping_data typeref:typename:long
+iac globals.h /^ char iac[256];$/;" m struct:telnet_data typeref:typename:char[256]
+ic globals.h /^ void *ic;$/;" m struct:iconv_data typeref:typename:void *
+iconv globals.h /^ struct iconv_data iconv;$/;" m union:global_union typeref:struct:iconv_data
+iconv_data globals.h /^struct iconv_data {$/;" s
+id globals.h /^ struct id_data id;$/;" m union:global_union typeref:struct:id_data
+id globals.h /^ int id;$/;" m struct:ipcs_data typeref:typename:int
+id lib/password.c /^ char *type, id, len;$/;" m struct:get_salt::__anon8e1926ef0108 typeref:typename:char file:
+id_data globals.h /^struct id_data {$/;" s
+ident globals.h /^ uint32_t ident;$/;" m struct:traceroute_data typeref:typename:uint32_t
+idx lib/lib.h /^ struct ptr_len idx[];$/;" m struct:linestack typeref:struct:ptr_len[]
+iface globals.h /^ char *iface;$/;" m struct:arping_data typeref:typename:char *
+iface globals.h /^ char *iface;$/;" m struct:dhcp_data typeref:typename:char *
+iface globals.h /^ char *iface;$/;" m struct:dhcpd_data typeref:typename:char *
+iface globals.h /^ char *iface;$/;" m struct:traceroute_data typeref:typename:char *
+ifconfig globals.h /^ struct ifconfig_data ifconfig;$/;" m union:global_union typeref:struct:ifconfig_data
+ifconfig_data globals.h /^struct ifconfig_data {$/;" s
+in globals.h /^ } in, out;$/;" m struct:dd_data typeref:struct:dd_data::__anonc826279f0608
+in_full globals.h /^ unsigned long long bytes, c_count, in_full, in_part, out_full, out_part;$/;" m struct:dd_data typeref:typename:unsigned long long
+in_part globals.h /^ unsigned long long bytes, c_count, in_full, in_part, out_full, out_part;$/;" m struct:dd_data typeref:typename:unsigned long long
+inaddr globals.h /^ struct sockaddr_storage inaddr;$/;" m struct:tftp_data typeref:struct:sockaddr_storage
+inc globals.h /^ struct arg_list *inc, *pass;$/;" m struct:tar_data typeref:struct:arg_list *
+inc_file globals.h /^ struct arg_list *inc_file;$/;" m struct:tar_data typeref:struct:arg_list *
+indelim globals.h /^ char indelim, outdelim;$/;" m struct:grep_data typeref:typename:char
+inf globals.h /^ struct termios inf;$/;" m struct:more_data typeref:struct:termios
+infd lib/deflate.c /^ int infd, outfd;$/;" m struct:deflate typeref:typename:int file:
+inflate lib/deflate.c /^static void inflate(struct deflate *dd, struct bitbuf *bb)$/;" f typeref:typename:void file:
+init_deflate lib/deflate.c /^static struct deflate *init_deflate(int compress)$/;" f typeref:struct:deflate * file:
+init_str globals.h /^ char *init_str;$/;" m struct:getty_data typeref:typename:char *
+inodes globals.h /^ long inodes; \/\/ Total inodes in filesystem.$/;" m struct:mke2fs_data typeref:typename:long
+inodes globals.h /^ struct num_cache *inodes;$/;" m struct:netstat_data typeref:struct:num_cache *
+inodes globals.h /^ void *inodes, *handle;$/;" m struct:tar_data typeref:typename:void *
+inodes globals.h /^ void *inodes;$/;" m struct:du_data typeref:typename:void *
+inodespg globals.h /^ unsigned inodespg; \/\/ Inodes per group$/;" m struct:mke2fs_data typeref:typename:unsigned
+input_socket6 globals.h /^ struct sockaddr_in6 input_socket6;$/;" m struct:dhcp6_data typeref:struct:sockaddr_in6
+interface globals.h /^ char *interface;$/;" m struct:arp_data typeref:typename:char *
+interface_name globals.h /^ char *interface_name, *pidfile, *script;$/;" m struct:dhcp6_data typeref:typename:char *
+interval globals.h /^ long interval;$/;" m struct:syslogd_data typeref:typename:long
+ionice globals.h /^ struct ionice_data ionice;$/;" m union:global_union typeref:struct:ionice_data
+ionice_data globals.h /^struct ionice_data {$/;" s
+ip globals.h /^ struct ip_data ip;$/;" m union:global_union typeref:struct:ip_data
+ip_data globals.h /^struct ip_data {$/;" s
+ipcrm globals.h /^ struct ipcrm_data ipcrm;$/;" m union:global_union typeref:struct:ipcrm_data
+ipcrm_data globals.h /^struct ipcrm_data {$/;" s
+ipcs globals.h /^ struct ipcs_data ipcs;$/;" m union:global_union typeref:struct:ipcs_data
+ipcs_data globals.h /^struct ipcs_data {$/;" s
+is_addr globals.h /^ int8_t addressfamily, is_addr;$/;" m struct:ip_data typeref:typename:int8_t
+is_binary globals.h /^ int dir_num, size, is_binary, status, change, len[2];$/;" m struct:diff_data typeref:typename:int
+is_groups globals.h /^ int is_groups;$/;" m struct:id_data typeref:typename:int
+is_gzip lib/deflate.c /^static int is_gzip(struct bitbuf *bb)$/;" f typeref:typename:int file:
+is_login globals.h /^ int is_login;$/;" m struct:bootchartd_data typeref:typename:int
+is_selinux_enabled lib/lsm.h /^#define is_selinux_enabled(/;" d
+isdotdot lib/dirtree.c /^int isdotdot(char *name)$/;" f typeref:typename:int
+issue_path globals.h /^ char *issue_path;$/;" m struct:telnetd_data typeref:typename:char *
+issue_str globals.h /^ char *issue_str;$/;" m struct:getty_data typeref:typename:char *
+istraceroute6 globals.h /^ int istraceroute6;$/;" m struct:traceroute_data typeref:typename:int
+itv globals.h /^ struct itimerval itv;$/;" m struct:timeout_data typeref:struct:itimerval
+j globals.h /^ long N, w, j;$/;" m struct:od_data typeref:typename:long
+jdev globals.h /^ dev_t jdev;$/;" m struct:losetup_data typeref:typename:dev_t
+jfile globals.h /^ char *jfile;$/;" m struct:losetup_data typeref:typename:char *
+jino globals.h /^ ino_t jino;$/;" m struct:losetup_data typeref:typename:ino_t
+k globals.h /^ struct arg_list *G, *g, *U, *u, *t, *s, *p, *O, *o, *P, *k;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0b08 typeref:struct:arg_list *
+k globals.h /^ struct arg_list *u, *p, *o, *k, *O;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0c08 typeref:struct:arg_list *
+k globals.h /^ char *F, *k, *b;$/;" m struct:modinfo_data typeref:typename:char *
+k globals.h /^ char *s, *k;$/;" m struct:timeout_data typeref:typename:char *
+k globals.h /^ struct arg_list *k;$/;" m struct:sort_data typeref:struct:arg_list *
+kcount globals.h /^ int kcount, forcek, sortpos;$/;" m struct:ps_data typeref:typename:int
+key_list globals.h /^ void *key_list;$/;" m struct:sort_data typeref:typename:void *
+kfields globals.h /^ void *fields, *kfields;$/;" m struct:ps_data typeref:typename:void *
+kill globals.h /^ struct kill_data kill;$/;" m union:global_union typeref:struct:kill_data
+kill_data globals.h /^struct kill_data {$/;" s
+killall globals.h /^ struct killall_data killall;$/;" m union:global_union typeref:struct:killall_data
+killall_data globals.h /^struct killall_data {$/;" s
+klogd globals.h /^ struct klogd_data klogd;$/;" m union:global_union typeref:struct:klogd_data
+klogd_data globals.h /^struct klogd_data {$/;" s
+ktv globals.h /^ struct timeval ktv;$/;" m struct:timeout_data typeref:struct:timeval
+l globals.h /^ long r, l;$/;" m struct:mix_data typeref:typename:long
+l globals.h /^ long l, b, a;$/;" m struct:split_data typeref:typename:long
+l globals.h /^ long l;$/;" m struct:ls_data typeref:typename:long
+l globals.h /^ long s, g, o, l, c;$/;" m struct:xxd_data typeref:typename:long
+l globals.h /^ long w, l, v;$/;" m struct:nl_data typeref:typename:long
+l lib/args.c /^ long l;$/;" m union:opts::__anon2edfd129010a typeref:typename:long file:
+last globals.h /^ struct last_data last;$/;" m union:global_union typeref:struct:last_data
+last_data globals.h /^struct last_data {$/;" s
+last_shown_pid globals.h /^ int last_shown_pid, shown_header;$/;" m struct:lsof_data typeref:typename:int
+lastregex globals.h /^ void *restart, *lastregex;$/;" m struct:sed_data typeref:typename:void *
+lcount globals.h /^ long lcount;$/;" m struct:nl_data typeref:typename:long
+leftover globals.h /^ unsigned types, leftover, star;$/;" m struct:od_data typeref:typename:unsigned
+len globals.h /^ int dir_num, size, is_binary, status, change, len[2];$/;" m struct:diff_data typeref:typename:int[2]
+len globals.h /^ long long len, base;$/;" m struct:hexedit_data typeref:typename:long long
+len globals.h /^ off_t len;$/;" m struct:file_data typeref:typename:off_t
+len lib/args.c /^ int len;$/;" m struct:longopts typeref:typename:int file:
+len lib/deflate.c /^ int fd, bitpos, len, max;$/;" m struct:bitbuf typeref:typename:int file:
+len lib/deflate.c /^ unsigned pos, len;$/;" m struct:deflate typeref:typename:unsigned file:
+len lib/lib.h /^ long len, max;$/;" m struct:linestack typeref:typename:long
+len lib/lib.h /^ long len;$/;" m struct:ptr_len typeref:typename:long
+len lib/lib.h /^ long len;$/;" m struct:str_len typeref:typename:long
+len lib/password.c /^ char *type, id, len;$/;" m struct:get_salt::__anon8e1926ef0108 typeref:typename:char file:
+len1 globals.h /^ int len1, len2;$/;" m struct:tr_data typeref:typename:int
+len2 globals.h /^ int len1, len2;$/;" m struct:tr_data typeref:typename:int
+len2huff lib/deflate.c /^static void len2huff(struct huff *huff, char bitlen[], int len)$/;" f typeref:typename:void file:
+lenbase lib/deflate.c /^ unsigned short lenbase[29], distbase[30];$/;" m struct:deflate typeref:typename:unsigned short[29] file:
+lenbits lib/deflate.c /^ char lenbits[29], distbits[30];$/;" m struct:deflate typeref:typename:char[29] file:
+length globals.h /^ int length, state, request_length, sock, sock1, status, retval, retries;$/;" m struct:dhcp6_data typeref:typename:int
+length lib/deflate.c /^ unsigned short length[16]; \/\/ How many symbols have this bit length?$/;" m struct:huff typeref:typename:unsigned short[16] file:
+level globals.h /^ int level, pos;$/;" m struct:fmt_data typeref:typename:int
+level globals.h /^ int level;$/;" m struct:gzip_data typeref:typename:int
+level globals.h /^ long level;$/;" m struct:ionice_data typeref:typename:long
+level globals.h /^ long level;$/;" m struct:klogd_data typeref:typename:long
+lfiles globals.h /^ struct logfile *lfiles; \/\/ list of write logfiles$/;" m struct:syslogd_data typeref:struct:logfile *
+lgetfilecon lib/lsm.h /^#define lgetfilecon(/;" d
+libbuf main.c /^char toybuf[4096], libbuf[4096];$/;" v typeref:typename:char[4096]
+linecount globals.h /^ int linecount;$/;" m struct:sort_data typeref:typename:int
+lineno globals.h /^ long lineno;$/;" m struct:sh_data typeref:typename:long
+linenum globals.h /^ long linenum;$/;" m struct:patch_data typeref:typename:long
+lines globals.h /^ char **lines;$/;" m struct:sort_data typeref:typename:char **
+linestack lib/lib.h /^struct linestack {$/;" s
+linestack_addstack lib/linestack.c /^void linestack_addstack(struct linestack **lls, struct linestack *throw,$/;" f typeref:typename:void
+linestack_append lib/linestack.c /^void linestack_append(struct linestack **lls, char *line)$/;" f typeref:typename:void
+linestack_insert lib/linestack.c /^void linestack_insert(struct linestack **lls, long pos, char *line, long len)$/;" f typeref:typename:void
+linestack_load lib/linestack.c /^struct linestack *linestack_load(char *name)$/;" f typeref:struct:linestack *
+list globals.h /^ struct arg_list *list;$/;" m struct:last_data typeref:struct:arg_list *
+llist_free_arg lib/llist.c /^void llist_free_arg(void *node)$/;" f typeref:typename:void
+llist_free_double lib/llist.c /^void llist_free_double(void *node)$/;" f typeref:typename:void
+llist_pop lib/llist.c /^void *llist_pop(void *list)$/;" f typeref:typename:void *
+llist_traverse lib/llist.c /^void llist_traverse(void *list, void (*using)(void *node))$/;" f typeref:typename:void
+local_file globals.h /^ char *local_file;$/;" m struct:tftp_data typeref:typename:char *
+log globals.h /^ struct log_data log;$/;" m union:global_union typeref:struct:log_data
+log_data globals.h /^struct log_data {$/;" s
+log_prio globals.h /^ long log_prio;$/;" m struct:syslogd_data typeref:typename:long
+logfile globals.h /^ char *logfile;$/;" m struct:crond_data typeref:typename:char *
+logfile globals.h /^ char *logfile;$/;" m struct:syslogd_data typeref:typename:char *
+logger globals.h /^ struct logger_data logger;$/;" m union:global_union typeref:struct:logger_data
+logger_data globals.h /^struct logger_data {$/;" s
+login globals.h /^ struct login_data login;$/;" m union:global_union typeref:struct:login_data
+login_data globals.h /^struct login_data {$/;" s
+login_fail_timeout globals.h /^ int login_timeout, login_fail_timeout;$/;" m struct:login_data typeref:typename:int
+login_main login.c /^void login_main(void)$/;" f typeref:typename:void
+login_path globals.h /^ char *login_path;$/;" m struct:telnetd_data typeref:typename:char *
+login_str globals.h /^ char *login_str;$/;" m struct:getty_data typeref:typename:char *
+login_timeout globals.h /^ int login_timeout, login_fail_timeout;$/;" m struct:login_data typeref:typename:int
+loglevel globals.h /^ int loglevel;$/;" m struct:crond_data typeref:typename:int
+loglevel_d globals.h /^ int loglevel_d;$/;" m struct:crond_data typeref:typename:int
+longopts lib/args.c /^ struct longopts *longopts;$/;" m struct:getoptflagstate typeref:struct:longopts * file:
+longopts lib/args.c /^struct longopts {$/;" s file:
+loopfile_lines_bridge lib/lib.c /^static void loopfile_lines_bridge(int fd, char *name)$/;" f typeref:typename:void file:
+loopfiles lib/lib.c /^void loopfiles(char **argv, void (*function)(int fd, char *name))$/;" f typeref:typename:void
+loopfiles_lines lib/lib.c /^void loopfiles_lines(char **argv, void (*function)(char **pline, long len))$/;" f typeref:typename:void
+loopfiles_rw lib/lib.c /^void loopfiles_rw(char **argv, int flags, int permissions,$/;" f typeref:typename:void
+loose_source globals.h /^ struct arg_list *loose_source;$/;" m struct:traceroute_data typeref:struct:arg_list *
+losetup globals.h /^ struct losetup_data losetup;$/;" m union:global_union typeref:struct:losetup_data
+losetup_data globals.h /^struct losetup_data {$/;" s
+ls globals.h /^ struct ls_data ls;$/;" m union:global_union typeref:struct:ls_data
+ls globals.h /^ struct linestack *ls;$/;" m struct:vi_data typeref:struct:linestack *
+ls lib/linestack.c /^ struct linestack ls;$/;" m struct:linestack_insert::__anon00a587ba0108 typeref:struct:linestack file:
+ls_data globals.h /^struct ls_data {$/;" s
+lsetfilecon lib/lsm.h /^#define lsetfilecon(/;" d
+lskip lib/lib.c /^off_t lskip(int fd, off_t offset)$/;" f typeref:typename:off_t
+lsm_context lib/lsm.h /^static inline char *lsm_context(void)$/;" f typeref:typename:char *
+lsm_enabled lib/lsm.h /^static inline int lsm_enabled(void)$/;" f typeref:typename:int
+lsm_fget_context lib/lsm.h /^static inline int lsm_fget_context(int file, char **context)$/;" f typeref:typename:int
+lsm_fset_context lib/lsm.h /^static inline int lsm_fset_context(int file, char *context)$/;" f typeref:typename:int
+lsm_get_context lib/lsm.h /^static inline int lsm_get_context(char *filename, char **context)$/;" f typeref:typename:int
+lsm_lget_context lib/lsm.h /^static inline int lsm_lget_context(char *filename, char **context)$/;" f typeref:typename:int
+lsm_lset_context lib/lsm.h /^static inline int lsm_lset_context(char *filename, char *context)$/;" f typeref:typename:int
+lsm_name lib/lsm.h /^static inline char *lsm_name(void)$/;" f typeref:typename:char *
+lsm_set_context lib/lsm.h /^static inline int lsm_set_context(char *filename, char *context)$/;" f typeref:typename:int
+lsm_set_create lib/lsm.h /^static inline int lsm_set_create(char *context)$/;" f typeref:typename:int
+lsocks globals.h /^ struct unsocks *lsocks; \/\/ list of listen sockets$/;" m struct:syslogd_data typeref:struct:unsocks *
+lsof globals.h /^ struct lsof_data lsof;$/;" m union:global_union typeref:struct:lsof_data
+lsof_data globals.h /^struct lsof_data {$/;" s
+lspci globals.h /^ struct lspci_data lspci;$/;" m union:global_union typeref:struct:lspci_data
+lspci_data globals.h /^struct lspci_data {$/;" s
+m globals.h /^ char *g, *o, *m;$/;" m struct:cp_data::__anonc826279f070a::__anonc826279f0808 typeref:typename:char *
+m globals.h /^ long n, m, d, s;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0c08 typeref:typename:long
+m globals.h /^ char *Z, *m;$/;" m struct:mknod_data typeref:typename:char *
+m globals.h /^ char *m, *S;$/;" m struct:mkpasswd_data typeref:typename:char *
+m globals.h /^ char *m, *Z;$/;" m struct:mkdir_data typeref:typename:char *
+m globals.h /^ char *m;$/;" m struct:mkfifo_data typeref:typename:char *
+m globals.h /^ long m, A, B, C;$/;" m struct:grep_data typeref:typename:long
+m globals.h /^ long w, W, i, s, c, t, m;$/;" m struct:ping_data typeref:typename:long
+main main.c /^int main(int argc, char *argv[])$/;" f typeref:typename:int
+makedevs globals.h /^ struct makedevs_data makedevs;$/;" m union:global_union typeref:struct:makedevs_data
+makedevs_data globals.h /^struct makedevs_data {$/;" s
+map globals.h /^ short map[256]; \/\/map of chars$/;" m struct:tr_data typeref:typename:short[256]
+match globals.h /^ pid_t self, match;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0d08 typeref:typename:pid_t
+match_process globals.h /^ int (*match_process)(long long *slot);$/;" m struct:ps_data typeref:typename:int (*)(long long * slot)
+max globals.h /^ unsigned long sent, recv, fugit, min, max;$/;" m struct:ping_data typeref:typename:unsigned long
+max lib/deflate.c /^ int fd, bitpos, len, max;$/;" m struct:bitbuf typeref:typename:int file:
+max lib/lib.h /^ long len, max;$/;" m struct:linestack typeref:typename:long
+max_bytes globals.h /^ long max_bytes;$/;" m struct:find_data typeref:typename:long
+max_name_len globals.h /^ int max_name_len;$/;" m struct:file_data typeref:typename:int
+max_nr_run globals.h /^ long max_nr_run;$/;" m struct:fsck_data typeref:typename:long
+max_ttl globals.h /^ long max_ttl;$/;" m struct:traceroute_data typeref:typename:long
+maxargs lib/args.c /^ int argc, minargs, maxargs;$/;" m struct:getoptflagstate typeref:typename:int file:
+maxc globals.h /^ int maxc;$/;" m struct:tcpsvd_data typeref:typename:int
+maxof lib/lib.h /^#define maxof(/;" d
+md5sum globals.h /^ struct md5sum_data md5sum;$/;" m union:global_union typeref:struct:md5sum_data
+md5sum_data globals.h /^struct md5sum_data {$/;" s
+microcom globals.h /^ struct microcom_data microcom;$/;" m union:global_union typeref:struct:microcom_data
+microcom_data globals.h /^struct microcom_data {$/;" s
+mid globals.h /^ struct arg_list *mid;$/;" m struct:ipcrm_data typeref:struct:arg_list *
+millitime lib/lib.c /^long long millitime(void)$/;" f typeref:typename:long long
+min globals.h /^ unsigned long sent, recv, fugit, min, max;$/;" m struct:ping_data typeref:typename:unsigned long
+minargs lib/args.c /^ int argc, minargs, maxargs;$/;" m struct:getoptflagstate typeref:typename:int file:
+minof lib/lib.h /^#define minof(/;" d
+mix globals.h /^ struct mix_data mix;$/;" m union:global_union typeref:struct:mix_data
+mix_data globals.h /^struct mix_data {$/;" s
+mkdir globals.h /^ struct mkdir_data mkdir;$/;" m union:global_union typeref:struct:mkdir_data
+mkdir_data globals.h /^struct mkdir_data {$/;" s
+mke2fs globals.h /^ struct mke2fs_data mke2fs;$/;" m union:global_union typeref:struct:mke2fs_data
+mke2fs_data globals.h /^struct mke2fs_data {$/;" s
+mkey globals.h /^ struct arg_list *mkey;$/;" m struct:ipcrm_data typeref:struct:arg_list *
+mkfifo globals.h /^ struct mkfifo_data mkfifo;$/;" m union:global_union typeref:struct:mkfifo_data
+mkfifo_data globals.h /^struct mkfifo_data {$/;" s
+mknod globals.h /^ struct mknod_data mknod;$/;" m union:global_union typeref:struct:mknod_data
+mknod_data globals.h /^struct mknod_data {$/;" s
+mkpasswd globals.h /^ struct mkpasswd_data mkpasswd;$/;" m union:global_union typeref:struct:mkpasswd_data
+mkpasswd_data globals.h /^struct mkpasswd_data {$/;" s
+mkpath lib/lib.c /^int mkpath(char *dir)$/;" f typeref:typename:int
+mkpathat lib/lib.c /^int mkpathat(int atfd, char *dir, mode_t lastmode, int flags)$/;" f typeref:typename:int
+mkswap globals.h /^ struct mkswap_data mkswap;$/;" m union:global_union typeref:struct:mkswap_data
+mkswap_data globals.h /^struct mkswap_data {$/;" s
+mktemp globals.h /^ struct mktemp_data mktemp;$/;" m union:global_union typeref:struct:mktemp_data
+mktemp_data globals.h /^struct mktemp_data {$/;" s
+mod globals.h /^ long mod;$/;" m struct:modinfo_data typeref:typename:long
+mode globals.h /^ char *mode;$/;" m struct:chmod_data typeref:typename:char *
+mode globals.h /^ mode_t mode;$/;" m struct:mkfifo_data typeref:typename:mode_t
+mode_to_string lib/lib.c /^void mode_to_string(mode_t mode, char *buf)$/;" f typeref:typename:void
+modinfo globals.h /^ struct modinfo_data modinfo;$/;" m union:global_union typeref:struct:modinfo_data
+modinfo_data globals.h /^struct modinfo_data {$/;" s
+modprobe globals.h /^ struct modprobe_data modprobe;$/;" m union:global_union typeref:struct:modprobe_data
+modprobe_data globals.h /^struct modprobe_data {$/;" s
+more globals.h /^ struct more_data more;$/;" m union:global_union typeref:struct:more_data
+more_data globals.h /^struct more_data {$/;" s
+more_globals globals.h /^ int more_globals;$/;" m struct:skeleton_data typeref:typename:int
+mount globals.h /^ struct mount_data mount;$/;" m union:global_union typeref:struct:mount_data
+mount_data globals.h /^struct mount_data {$/;" s
+mountlist_istype lib/getmountlist.c /^int mountlist_istype(struct mtab_list *ml, char *typelist)$/;" f typeref:typename:int
+msg_len globals.h /^ unsigned msg_len;$/;" m struct:traceroute_data typeref:typename:unsigned
+msleep lib/lib.c /^void msleep(long miliseconds)$/;" f typeref:typename:void
+mtab_list lib/lib.h /^struct mtab_list {$/;" s
+n globals.h /^ long n, m, d, s;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0c08 typeref:typename:long
+n globals.h /^ char *n;$/;" m struct:getfattr_data typeref:typename:char *
+n globals.h /^ char *s, *n, *b;$/;" m struct:nl_data typeref:typename:char *
+n globals.h /^ char *x, *v, *n;$/;" m struct:setfattr_data typeref:typename:char *
+n globals.h /^ int n;$/;" m struct:watch_data typeref:typename:int
+n globals.h /^ long c, n;$/;" m struct:head_data typeref:typename:long
+n globals.h /^ long n, c;$/;" m struct:tail_data typeref:typename:long
+n globals.h /^ long n, s;$/;" m struct:dmesg_data typeref:typename:long
+n globals.h /^ long n;$/;" m struct:lspci_data typeref:typename:long
+n globals.h /^ long n;$/;" m struct:nice_data typeref:typename:long
+n globals.h /^ long n;$/;" m struct:renice_data typeref:typename:long
+n globals.h /^ long n;$/;" m struct:strings_data typeref:typename:long
+n globals.h /^ long o, n, s;$/;" m struct:shred_data typeref:typename:long
+n globals.h /^ long s, n, L;$/;" m struct:xargs_data typeref:typename:long
+name globals.h /^ char *name;$/;" m struct:dd_data::__anonc826279f0608 typeref:typename:char *
+name globals.h /^ char *name;$/;" m struct:cmp_data typeref:typename:char *
+name globals.h /^ char *name;$/;" m struct:tcpsvd_data typeref:typename:char *
+name lib/lib.c /^ char *name;$/;" m struct:signame typeref:typename:char * file:
+name lib/lib.h /^ char name[];$/;" m struct:dirtree typeref:typename:char[]
+name lib/tty.c /^ char *name, *seq;$/;" m struct:scan_key_list typeref:typename:char * file:
+name toys.h /^ char *name;$/;" m struct:toy_list typeref:typename:char *
+names globals.h /^ char **names;$/;" m struct:killall_data typeref:typename:char **
+names_to_pid lib/lib.c /^void names_to_pid(char **names, int (*callback)(pid_t pid, char *name))$/;" f typeref:typename:void
+nano globals.h /^ unsigned nano;$/;" m struct:date_data typeref:typename:unsigned
+negate globals.h /^ int negate;$/;" m struct:fsck_data typeref:typename:int
+netcat globals.h /^ struct netcat_data netcat;$/;" m union:global_union typeref:struct:netcat_data
+netcat_data globals.h /^struct netcat_data {$/;" s
+netstat globals.h /^ struct netstat_data netstat;$/;" m union:global_union typeref:struct:netstat_data
+netstat_data globals.h /^struct netstat_data {$/;" s
+newlen globals.h /^ long oldline, oldlen, newline, newlen;$/;" m struct:patch_data typeref:typename:long
+newline globals.h /^ long oldline, oldlen, newline, newlen;$/;" m struct:patch_data typeref:typename:long
+next lib/args.c /^ struct longopts *next;$/;" m struct:longopts typeref:struct:longopts * file:
+next lib/args.c /^ struct opts *next;$/;" m struct:opts typeref:struct:opts * file:
+next lib/lib.c /^ struct grgidbuf_list *next;$/;" m struct:bufgetgrgid::grgidbuf_list typeref:struct:grgidbuf_list * file:
+next lib/lib.c /^ struct pwuidbuf_list *next;$/;" m struct:bufgetpwuid::pwuidbuf_list typeref:struct:pwuidbuf_list * file:
+next lib/lib.h /^ struct arg_list *next;$/;" m struct:arg_list typeref:struct:arg_list *
+next lib/lib.h /^ struct dirtree *next, *parent, *child;$/;" m struct:dirtree typeref:struct:dirtree *
+next lib/lib.h /^ struct double_list *next, *prev;$/;" m struct:double_list typeref:struct:double_list *
+next lib/lib.h /^ struct mtab_list *next, *prev;$/;" m struct:mtab_list typeref:struct:mtab_list *
+next lib/lib.h /^ struct num_cache *next;$/;" m struct:num_cache typeref:struct:num_cache *
+next lib/lib.h /^ struct string_list *next;$/;" m struct:string_list typeref:struct:string_list *
+next_printf lib/lib.c /^char *next_printf(char *s, char **start)$/;" f typeref:typename:char *
+nextblock globals.h /^ unsigned nextblock; \/\/ Next data block to allocate$/;" m struct:mke2fs_data typeref:typename:unsigned
+nextgroup globals.h /^ unsigned nextgroup; \/\/ Next group we'll be allocating from$/;" m struct:mke2fs_data typeref:typename:unsigned
+nextlen globals.h /^ long nextlen, rememberlen, count;$/;" m struct:sed_data typeref:typename:long
+nextline globals.h /^ char *nextline, *remember;$/;" m struct:sed_data typeref:typename:char *
+nextsig globals.h /^ int nextsig;$/;" m struct:timeout_data typeref:typename:int
+nice globals.h /^ struct nice_data nice;$/;" m union:global_union typeref:struct:nice_data
+nice_data globals.h /^struct nice_data {$/;" s
+nl globals.h /^ struct nl_data nl;$/;" m union:global_union typeref:struct:nl_data
+nl_data globals.h /^struct nl_data {$/;" s
+nl_title globals.h /^ int nl_title;$/;" m struct:ls_data typeref:typename:int
+nmsg globals.h /^ char *nmsg;$/;" m struct:tcpsvd_data typeref:typename:char *
+nodash_now lib/args.c /^ int noerror, nodash_now, stopearly;$/;" m struct:getoptflagstate typeref:typename:int file:
+noeol globals.h /^ int fdout, noeol;$/;" m struct:sed_data typeref:typename:int
+noerror lib/args.c /^ int noerror, nodash_now, stopearly;$/;" m struct:getoptflagstate typeref:typename:int file:
+noreturn lib/portability.h /^#define noreturn /;" d
+noreturn lib/portability.h /^#define noreturn$/;" d
+notstdio lib/xwrap.c /^int notstdio(int fd)$/;" f typeref:typename:int
+now globals.h /^ time_t now;$/;" m struct:find_data typeref:typename:time_t
+nr_run globals.h /^ int nr_run;$/;" m struct:fsck_data typeref:typename:int
+nsenter globals.h /^ struct nsenter_data nsenter;$/;" m union:global_union typeref:struct:nsenter_data
+nsenter_data globals.h /^struct nsenter_data {$/;" s
+ntop lib/net.c /^char *ntop(struct sockaddr *sa)$/;" f typeref:typename:char *
+nudeps globals.h /^ int nudeps;$/;" m struct:modprobe_data typeref:typename:int
+num lib/lib.c /^ int num;$/;" m struct:signame typeref:typename:int file:
+num lib/lib.h /^ long long num;$/;" m struct:num_cache typeref:typename:long long
+num_cache lib/lib.h /^struct num_cache {$/;" s
+num_to_sig lib/lib.c /^char *num_to_sig(int sig)$/;" f typeref:typename:char *
+numlen globals.h /^ int numlen, undo, undolen;$/;" m struct:hexedit_data typeref:typename:int
+nv globals.h /^ char **nv; \/\/ name\/value pairs: even=name, odd=value$/;" m struct:getprop_data typeref:typename:char **
+o globals.h /^ char *g, *o, *m;$/;" m struct:cp_data::__anonc826279f070a::__anonc826279f0808 typeref:typename:char *
+o globals.h /^ struct arg_list *G, *g, *U, *u, *t, *s, *p, *O, *o, *P, *k;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0b08 typeref:struct:arg_list *
+o globals.h /^ struct arg_list *u, *p, *o, *k, *O;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0c08 typeref:struct:arg_list *
+o globals.h /^ char *o, *T, S;$/;" m struct:sort_data typeref:typename:char *
+o globals.h /^ char *o;$/;" m struct:uudecode_data typeref:typename:char *
+o globals.h /^ long o, n, s;$/;" m struct:shred_data typeref:typename:long
+o globals.h /^ long s, g, o, l, c;$/;" m struct:xxd_data typeref:typename:long
+o globals.h /^ struct arg_list *o;$/;" m struct:kill_data typeref:struct:arg_list *
+octal_deslash lib/getmountlist.c /^static void octal_deslash(char *s)$/;" f typeref:typename:void file:
+od globals.h /^ struct od_data od;$/;" m union:global_union typeref:struct:od_data
+od_data globals.h /^struct od_data {$/;" s
+offset globals.h /^ unsigned long long offset;$/;" m struct:dd_data::__anonc826279f0608 typeref:typename:unsigned long long
+offset globals.h /^ int *offset[2];$/;" m struct:diff_data typeref:typename:int * [2]
+offset globals.h /^ long offset;$/;" m struct:fallocate_data typeref:typename:long
+offset globals.h /^ long offset;$/;" m struct:losetup_data typeref:typename:long
+okuser globals.h /^ int okuser;$/;" m struct:mount_data typeref:typename:int
+old_umask toys.h /^ int old_umask; \/\/ Old umask preserved by TOYFLAG_UMASK$/;" m struct:toy_context typeref:typename:int
+oldlen globals.h /^ long oldline, oldlen, newline, newlen;$/;" m struct:patch_data typeref:typename:long
+oldline globals.h /^ long oldline, oldlen, newline, newlen;$/;" m struct:patch_data typeref:typename:long
+oldpid globals.h /^ pid_t pid, oldpid;$/;" m struct:watch_data typeref:typename:pid_t
+oldstate globals.h /^ unsigned oldstate[5];$/;" m struct:md5sum_data typeref:typename:unsigned[5]
+omit globals.h /^ char *omit;$/;" m struct:pidof_data typeref:typename:char *
+oneit globals.h /^ struct oneit_data oneit;$/;" m union:global_union typeref:struct:oneit_data
+oneit_data globals.h /^struct oneit_data {$/;" s
+openflags globals.h /^ int openflags;$/;" m struct:losetup_data typeref:typename:int
+openro lib/xwrap.c /^int openro(char *path, int flags)$/;" f typeref:typename:int
+openvt globals.h /^ struct openvt_data openvt;$/;" m union:global_union typeref:struct:openvt_data
+openvt_data globals.h /^struct openvt_data {$/;" s
+opt lib/args.c /^ struct opts *opt;$/;" m struct:longopts typeref:struct:opts * file:
+optargs toys.h /^ char **optargs; \/\/ Arguments left over from get_optflags()$/;" m struct:toy_context typeref:typename:char **
+optc toys.h /^ int optc; \/\/ Count of optargs$/;" m struct:toy_context typeref:typename:int
+optflags toys.h /^ unsigned long long optflags; \/\/ Command line option flags from get_optflags()$/;" m struct:toy_context typeref:typename:unsigned long long
+options toys.h /^ char *options;$/;" m struct:toy_list typeref:typename:char *
+optlist globals.h /^ struct arg_list *optlist;$/;" m struct:mount_data typeref:struct:arg_list *
+opts globals.h /^ char *opts;$/;" m struct:mount_data typeref:typename:char *
+opts lib/args.c /^ struct opts *opts;$/;" m struct:getoptflagstate typeref:struct:opts * file:
+opts lib/args.c /^struct opts {$/;" s file:
+opts lib/lib.h /^ char *opts;$/;" m struct:mtab_list typeref:typename:char *
+original_fd_state globals.h /^ struct termios original_stdin_state, original_fd_state;$/;" m struct:microcom_data typeref:struct:termios
+original_stdin_state globals.h /^ struct termios original_stdin_state, original_fd_state;$/;" m struct:microcom_data typeref:struct:termios
+out globals.h /^ } in, out;$/;" m struct:dd_data typeref:struct:dd_data::__anonc826279f0608
+out_full globals.h /^ unsigned long long bytes, c_count, in_full, in_part, out_full, out_part;$/;" m struct:dd_data typeref:typename:unsigned long long
+out_part globals.h /^ unsigned long long bytes, c_count, in_full, in_part, out_full, out_part;$/;" m struct:dd_data typeref:typename:unsigned long long
+outdelim globals.h /^ char indelim, outdelim;$/;" m struct:grep_data typeref:typename:char
+outfd lib/deflate.c /^ int infd, outfd;$/;" m struct:deflate typeref:typename:int file:
+outfile globals.h /^ char *outfile;$/;" m struct:split_data typeref:typename:char *
+output_byte lib/deflate.c /^static void output_byte(struct deflate *dd, char sym)$/;" f typeref:typename:void file:
+output_cols globals.h /^ unsigned output_cols;$/;" m struct:stty_data typeref:typename:unsigned
+outputs globals.h /^ void *outputs;$/;" m struct:tee_data typeref:typename:void *
+owner globals.h /^ uid_t owner;$/;" m struct:chgrp_data typeref:typename:uid_t
+owner_name globals.h /^ char *owner_name, *group_name;$/;" m struct:chgrp_data typeref:typename:char *
+p globals.h /^ struct arg_list *G, *g, *U, *u, *t, *s, *p, *O, *o, *P, *k;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0b08 typeref:struct:arg_list *
+p globals.h /^ struct arg_list *u, *p, *o, *k, *O;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0c08 typeref:struct:arg_list *
+p globals.h /^ char *F, *p, *H;$/;" m struct:cpio_data typeref:typename:char *
+p globals.h /^ char *p, *t;$/;" m struct:logger_data typeref:typename:char *
+p globals.h /^ char *p;$/;" m struct:mktemp_data typeref:typename:char *
+p globals.h /^ char *t, *p;$/;" m struct:log_data typeref:typename:char *
+p globals.h /^ char *u, *p, *P;$/;" m struct:ftpget_data typeref:typename:char *
+p globals.h /^ long p;$/;" m struct:chrt_data typeref:typename:long
+p globals.h /^ long p;$/;" m struct:patch_data typeref:typename:long
+p globals.h /^ long p;$/;" m struct:swapon_data typeref:typename:long
+p globals.h /^ long q, p, W, w;$/;" m struct:netcat_data typeref:typename:long
+p globals.h /^ struct arg_list *p;$/;" m struct:lsof_data typeref:struct:arg_list *
+packet globals.h /^ char *packet;$/;" m struct:traceroute_data typeref:typename:char *
+pairs globals.h /^ int pairs;$/;" m struct:cut_data typeref:typename:int
+parent lib/lib.h /^ struct dirtree *next, *parent, *child;$/;" m struct:dirtree typeref:struct:dirtree *
+parse_optflaglist lib/args.c /^void parse_optflaglist(struct getoptflagstate *gof)$/;" f typeref:typename:void
+pass globals.h /^ struct arg_list *inc, *pass;$/;" m struct:tar_data typeref:struct:arg_list *
+passwd globals.h /^ struct passwd_data passwd;$/;" m union:global_union typeref:struct:passwd_data
+passwd_data globals.h /^struct passwd_data {$/;" s
+paste globals.h /^ struct paste_data paste;$/;" m union:global_union typeref:struct:paste_data
+paste_data globals.h /^struct paste_data {$/;" s
+patch globals.h /^ struct patch_data patch;$/;" m union:global_union typeref:struct:patch_data
+patch_data globals.h /^struct patch_data {$/;" s
+patlen globals.h /^ int patlen;$/;" m struct:stat_data typeref:typename:int
+pattern globals.h /^ char *file, *pattern;$/;" m struct:stat_data typeref:typename:char *
+pattern globals.h /^ struct double_list *pattern;$/;" m struct:sed_data typeref:struct:double_list *
+pause_time globals.h /^ long pause_time;$/;" m struct:traceroute_data typeref:typename:long
+pbuff globals.h /^ int pbuff;$/;" m struct:telnet_data typeref:typename:int
+peek lib/lib.c /^int64_t peek(void *ptr, unsigned size)$/;" f typeref:typename:int64_t
+peek_be lib/lib.c /^int64_t peek_be(void *ptr, unsigned size)$/;" f typeref:typename:int64_t
+peek_le lib/lib.c /^int64_t peek_le(void *ptr, unsigned size)$/;" f typeref:typename:int64_t
+perror_exit lib/lib.c /^void perror_exit(char *msg, ...)$/;" f typeref:typename:void
+perror_exit_raw lib/lib.c /^void perror_exit_raw(char *msg)$/;" f typeref:typename:void
+perror_msg lib/lib.c /^void perror_msg(char *msg, ...)$/;" f typeref:typename:void
+perror_msg_raw lib/lib.c /^void perror_msg_raw(char *msg)$/;" f typeref:typename:void
+pflags globals.h /^ int pflags;$/;" m struct:cp_data typeref:typename:int
+pgrep globals.h /^ } pgrep;$/;" m union:ps_data::__anonc826279f0a0a typeref:struct:ps_data::__anonc826279f0a0a::__anonc826279f0d08
+piac globals.h /^ int piac;$/;" m struct:telnet_data typeref:typename:int
+pid globals.h /^ long pid;$/;" m struct:ionice_data typeref:typename:long
+pid globals.h /^ pid_t pid, oldpid;$/;" m struct:watch_data typeref:typename:pid_t
+pid globals.h /^ pid_t pid;$/;" m struct:timeout_data typeref:typename:pid_t
+pidfile globals.h /^ char *pidfile;$/;" m struct:dhcp_data typeref:typename:char *
+pidfile globals.h /^ char *interface_name, *pidfile, *script;$/;" m struct:dhcp6_data typeref:typename:char *
+pidof globals.h /^ struct pidof_data pidof;$/;" m union:global_union typeref:struct:pidof_data
+pidof_data globals.h /^struct pidof_data {$/;" s
+ping globals.h /^ struct ping_data ping;$/;" m union:global_union typeref:struct:ping_data
+ping_data globals.h /^struct ping_data {$/;" s
+pkt_opt globals.h /^ struct arg_list *pkt_opt;$/;" m struct:dhcp_data typeref:struct:arg_list *
+pl lib/linestack.c /^ struct ptr_len pl;$/;" m struct:linestack_insert::__anon00a587ba0108 typeref:struct:ptr_len file:
+poke lib/lib.c /^void poke(void *ptr, uint64_t val, int size)$/;" f typeref:typename:void
+pollinate lib/net.c /^int pollinate(int in1, int in2, int out1, int out2, int timeout, int shutdown_timeout)$/;" f typeref:typename:int
+port globals.h /^ int port;$/;" m struct:telnetd_data typeref:typename:int
+port globals.h /^ long port;$/;" m struct:dhcpd_data typeref:typename:long
+port globals.h /^ int port;$/;" m struct:telnet_data typeref:typename:int
+port globals.h /^ long port;$/;" m struct:traceroute_data typeref:typename:long
+pos globals.h /^ int level, pos;$/;" m struct:fmt_data typeref:typename:int
+pos globals.h /^ off_t pos;$/;" m struct:od_data typeref:typename:off_t
+pos lib/deflate.c /^ unsigned pos, len;$/;" m struct:deflate typeref:typename:unsigned file:
+pp globals.h /^ struct ptr_len gg, GG, pp, PP, ss, tt, uu, UU;$/;" m struct:ps_data typeref:struct:ptr_len
+precision globals.h /^ int precision;$/;" m struct:seq_data typeref:typename:int
+preserve globals.h /^ char *preserve;$/;" m struct:cp_data::__anonc826279f070a::__anonc826279f0908 typeref:typename:char *
+prev lib/lib.h /^ struct double_list *next, *prev;$/;" m struct:double_list typeref:struct:double_list *
+prev lib/lib.h /^ struct mtab_list *next, *prev;$/;" m struct:mtab_list typeref:struct:mtab_list *
+printf_format lib/portability.h /^#define printf_format /;" d
+printf_format lib/portability.h /^#define printf_format$/;" d
+probes globals.h /^ struct arg_list *probes;$/;" m struct:modprobe_data typeref:struct:arg_list *
+proc_accounting globals.h /^ int proc_accounting;$/;" m struct:bootchartd_data typeref:typename:int
+ps globals.h /^ struct ps_data ps;$/;" m union:global_union typeref:struct:ps_data
+ps globals.h /^ } ps;$/;" m union:ps_data::__anonc826279f0a0a typeref:struct:ps_data::__anonc826279f0a0a::__anonc826279f0b08
+ps_data globals.h /^struct ps_data {$/;" s
+ptr lib/lib.h /^ void *ptr;$/;" m struct:ptr_len typeref:typename:void *
+ptr_len lib/lib.h /^struct ptr_len {$/;" s
+pw globals.h /^ struct passwd *pw;$/;" m struct:tftpd_data typeref:struct:passwd *
+pw lib/lib.c /^ struct passwd pw;$/;" m struct:bufgetpwuid::pwuidbuf_list typeref:struct:passwd file:
+pwuidbuf_list lib/lib.c /^ struct pwuidbuf_list {$/;" s function:bufgetpwuid file:
+q globals.h /^ long q, p, W, w;$/;" m struct:netcat_data typeref:typename:long
+qid globals.h /^ struct arg_list *qid;$/;" m struct:ipcrm_data typeref:struct:arg_list *
+qkey globals.h /^ struct arg_list *qkey;$/;" m struct:ipcrm_data typeref:struct:arg_list *
+qstrcmp lib/lib.c /^int qstrcmp(const void *a, const void *b)$/;" f typeref:typename:int
+r globals.h /^ long r, l;$/;" m struct:mix_data typeref:typename:long
+r globals.h /^ char *r, *D, *d;$/;" m struct:date_data typeref:typename:char *
+r globals.h /^ char *t, *r, *d;$/;" m struct:touch_data typeref:typename:char *
+raw_term globals.h /^ struct termios raw_term;$/;" m struct:telnet_data typeref:struct:termios
+rcvd_nr globals.h /^ unsigned sent_at, sent_nr, rcvd_nr, brd_sent, rcvd_req, brd_rcv,$/;" m struct:arping_data typeref:typename:unsigned
+rcvd_req globals.h /^ unsigned sent_at, sent_nr, rcvd_nr, brd_sent, rcvd_req, brd_rcv,$/;" m struct:arping_data typeref:typename:unsigned
+read_password lib/password.c /^int read_password(char *buf, int buflen, char *mesg)$/;" f typeref:typename:int
+readall lib/lib.c /^ssize_t readall(int fd, void *buf, size_t len)$/;" f typeref:typename:ssize_t
+readfile lib/lib.c /^char *readfile(char *name, char *ibuf, off_t len)$/;" f typeref:typename:char *
+readfileat lib/lib.c /^char *readfileat(int dirfd, char *name, char *ibuf, off_t *plen)$/;" f typeref:typename:char *
+readlink0 lib/lib.c /^int readlink0(char *path, char *buf, int len)$/;" f typeref:typename:int
+readlinkat0 lib/lib.c /^int readlinkat0(int dirfd, char *path, char *buf, int len)$/;" f typeref:typename:int
+rebound toys.h /^ jmp_buf *rebound; \/\/ longjmp here instead of exit when do_rebound set$/;" m struct:toy_context typeref:typename:jmp_buf *
+recv globals.h /^ unsigned long sent, recv, fugit, min, max;$/;" m struct:ping_data typeref:typename:unsigned long
+recv_sock globals.h /^ int recv_sock;$/;" m struct:traceroute_data typeref:typename:int
+refree globals.h /^ char *refree;$/;" m struct:expr_data typeref:typename:char *
+reg globals.h /^ regex_t reg;$/;" m struct:cut_data typeref:typename:regex_t
+regexec0 lib/lib.c /^int regexec0(regex_t *preg, char *string, long len, int nmatch,$/;" f typeref:typename:int
+regexes globals.h /^ void *regexes, *snapshot;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0d08 typeref:typename:void *
+remember globals.h /^ char *nextline, *remember;$/;" m struct:sed_data typeref:typename:char *
+rememberlen globals.h /^ long nextlen, rememberlen, count;$/;" m struct:sed_data typeref:typename:long
+remote_file globals.h /^ char *remote_file;$/;" m struct:tftp_data typeref:typename:char *
+remote_log globals.h /^ char *remote_log;$/;" m struct:syslogd_data typeref:typename:char *
+renice globals.h /^ struct renice_data renice;$/;" m union:global_union typeref:struct:renice_data
+renice_data globals.h /^struct renice_data {$/;" s
+repeats globals.h /^ long repeats;$/;" m struct:uniq_data typeref:typename:long
+replace_tempfile lib/lib.c /^void replace_tempfile(int fdin, int fdout, char **tempname)$/;" f typeref:typename:void
+req_ip globals.h /^ char *req_ip;$/;" m struct:dhcp_data typeref:typename:char *
+req_ip globals.h /^ char *req_ip;$/;" m struct:dhcp6_data typeref:typename:char *
+req_opt globals.h /^ struct arg_list *req_opt;$/;" m struct:dhcp_data typeref:struct:arg_list *
+request_length globals.h /^ int length, state, request_length, sock, sock1, status, retval, retries;$/;" m struct:dhcp6_data typeref:typename:int
+requires lib/args.c /^ unsigned excludes, requires;$/;" m struct:getoptflagstate typeref:typename:unsigned file:
+reserved_percent globals.h /^ long reserved_percent; \/\/ Integer precent of space to reserve for root.$/;" m struct:mke2fs_data typeref:typename:long
+restart globals.h /^ void *restart, *lastregex;$/;" m struct:sed_data typeref:typename:void *
+retries globals.h /^ long retries;$/;" m struct:dhcp_data typeref:typename:long
+retries globals.h /^ int length, state, request_length, sock, sock1, status, retval, retries;$/;" m struct:dhcp6_data typeref:typename:int
+retry globals.h /^ long retry, timeout, errortimeout;$/;" m struct:dhcp6_data typeref:typename:long
+retval globals.h /^ int length, state, request_length, sock, sock1, status, retval, retries;$/;" m struct:dhcp6_data typeref:typename:int
+rootdev globals.h /^ dev_t rootdev;$/;" m struct:switch_root_data typeref:typename:dev_t
+rot_count globals.h /^ long rot_count;$/;" m struct:syslogd_data typeref:typename:long
+rot_size globals.h /^ long rot_size;$/;" m struct:syslogd_data typeref:typename:long
+route globals.h /^ struct route_data route;$/;" m union:global_union typeref:struct:route_data
+route_cmd globals.h /^ int sockfd, connected, from_ok, route_cmd;$/;" m struct:ip_data typeref:typename:int
+route_data globals.h /^struct route_data {$/;" s
+s globals.h /^ long n, m, d, s;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0c08 typeref:typename:long
+s globals.h /^ struct arg_list *G, *g, *P, *s, *t, *U, *u;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0d08 typeref:struct:arg_list *
+s globals.h /^ struct arg_list *G, *g, *U, *u, *t, *s, *p, *O, *o, *P, *k;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0b08 typeref:struct:arg_list *
+s globals.h /^ } s;$/;" m union:skeleton_data::__anonc826279f010a typeref:struct:skeleton_data::__anonc826279f010a::__anonc826279f0208
+s globals.h /^ char *f, *s;$/;" m struct:netcat_data typeref:typename:char *
+s globals.h /^ char *s, *f;$/;" m struct:seq_data typeref:typename:char *
+s globals.h /^ char *s, *k;$/;" m struct:timeout_data typeref:typename:char *
+s globals.h /^ char *s, *n, *b;$/;" m struct:nl_data typeref:typename:char *
+s globals.h /^ char *s;$/;" m struct:basename_data typeref:typename:char *
+s globals.h /^ char *s;$/;" m struct:kill_data typeref:typename:char *
+s globals.h /^ char *s;$/;" m struct:killall_data typeref:typename:char *
+s globals.h /^ char *s;$/;" m struct:microcom_data typeref:typename:char *
+s globals.h /^ char *s;$/;" m struct:su_data typeref:typename:char *
+s globals.h /^ char *s;$/;" m struct:truncate_data typeref:typename:char *
+s globals.h /^ long n, s;$/;" m struct:dmesg_data typeref:typename:long
+s globals.h /^ long o, n, s;$/;" m struct:shred_data typeref:typename:long
+s globals.h /^ long s, g, o, l, c;$/;" m struct:xxd_data typeref:typename:long
+s globals.h /^ long s, n, L;$/;" m struct:xargs_data typeref:typename:long
+s globals.h /^ long w, W, i, s, c, t, m;$/;" m struct:ping_data typeref:typename:long
+s globals.h /^ long w, s, f;$/;" m struct:uniq_data typeref:typename:long
+sa globals.h /^ struct sockaddr *sa;$/;" m struct:ping_data typeref:struct:sockaddr *
+sawline globals.h /^ int sawline;$/;" m struct:md5sum_data typeref:typename:int
+sc globals.h /^ int sc; $/;" m struct:getty_data typeref:typename:int
+scan_key lib/tty.c /^int scan_key(char *scratch, int miliwait)$/;" f typeref:typename:int
+scan_key_getsize lib/tty.c /^int scan_key_getsize(char *scratch, int miliwait, unsigned *xx, unsigned *yy)$/;" f typeref:typename:int
+scan_key_list lib/tty.c /^struct scan_key_list {$/;" s file:
+scan_key_list lib/tty.c /^} static const scan_key_list[] = TAGGED_ARRAY(KEY,$/;" v typeref:struct:scan_key_list const[]
+screen_width globals.h /^ unsigned screen_width;$/;" m struct:ls_data typeref:typename:unsigned
+script globals.h /^ char *script;$/;" m struct:dhcp_data typeref:typename:char *
+script globals.h /^ char *interface_name, *pidfile, *script;$/;" m struct:dhcp6_data typeref:typename:char *
+sect_sz globals.h /^ long sect_sz;$/;" m struct:fdisk_data typeref:typename:long
+sectors globals.h /^ long sectors;$/;" m struct:fdisk_data typeref:typename:long
+sed globals.h /^ struct sed_data sed;$/;" m union:global_union typeref:struct:sed_data
+sed_data globals.h /^struct sed_data {$/;" s
+select globals.h /^ struct arg_list *select[5]; \/\/ we treat them the same, so loop through$/;" m struct:cut_data typeref:struct:arg_list * [5]
+self globals.h /^ pid_t self, match;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0d08 typeref:typename:pid_t
+sent globals.h /^ unsigned long sent, recv, fugit, min, max;$/;" m struct:ping_data typeref:typename:unsigned long
+sent_at globals.h /^ unsigned sent_at, sent_nr, rcvd_nr, brd_sent, rcvd_req, brd_rcv,$/;" m struct:arping_data typeref:typename:unsigned
+sent_nr globals.h /^ unsigned sent_at, sent_nr, rcvd_nr, brd_sent, rcvd_req, brd_rcv,$/;" m struct:arping_data typeref:typename:unsigned
+seq globals.h /^ struct seq_data seq;$/;" m union:global_union typeref:struct:seq_data
+seq lib/tty.c /^ char *name, *seq;$/;" m struct:scan_key_list typeref:typename:char * file:
+seq_data globals.h /^struct seq_data {$/;" s
+set_terminal lib/tty.c /^int set_terminal(int fd, int raw, int speed, struct termios *old)$/;" f typeref:typename:int
+setbsz globals.h /^ long setbsz, setra;$/;" m struct:blockdev_data typeref:typename:long
+setfattr globals.h /^ struct setfattr_data setfattr;$/;" m union:global_union typeref:struct:setfattr_data
+setfattr_data globals.h /^struct setfattr_data {$/;" s
+setfilecon lib/lsm.h /^#define setfilecon(/;" d
+setfscreatecon lib/lsm.h /^#define setfscreatecon(/;" d
+setra globals.h /^ long setbsz, setra;$/;" m struct:blockdev_data typeref:typename:long
+setutxent lib/portability.h /^static inline void setutxent(void) {;}$/;" f typeref:typename:void
+sf globals.h /^ struct statfs sf;$/;" m union:stat_data::__anonc826279f050a typeref:struct:statfs
+sfd globals.h /^ int sfd;$/;" m struct:telnet_data typeref:typename:int
+sfd globals.h /^ long sfd;$/;" m struct:tftpd_data typeref:typename:long
+sh globals.h /^ struct sh_data sh;$/;" m union:global_union typeref:struct:sh_data
+sh_data globals.h /^struct sh_data {$/;" s
+shell globals.h /^ char *shell;$/;" m struct:useradd_data typeref:typename:char *
+show_help lib/help.c /^void show_help(FILE *out)$/;" f typeref:typename:void
+show_process globals.h /^ void (*show_process)(void *tb);$/;" m struct:ps_data typeref:typename:void (*)(void * tb)
+show_records globals.h /^ int show_xfer, show_records;$/;" m struct:dd_data typeref:typename:int
+show_uuid lib/lib.c /^char *show_uuid(char *uuid)$/;" f typeref:typename:char *
+show_xfer globals.h /^ int show_xfer, show_records;$/;" m struct:dd_data typeref:typename:int
+shown_header globals.h /^ int last_shown_pid, shown_header;$/;" m struct:lsof_data typeref:typename:int
+shred globals.h /^ struct shred_data shred;$/;" m union:global_union typeref:struct:shred_data
+shred_data globals.h /^struct shred_data {$/;" s
+si globals.h /^ struct sysinfo si;$/;" m struct:ps_data typeref:struct:sysinfo
+sid globals.h /^ struct arg_list *sid;$/;" m struct:ipcrm_data typeref:struct:arg_list *
+sig globals.h /^ unsigned long sig;$/;" m struct:bc_data typeref:typename:unsigned long
+sig_num globals.h /^ int sig_num;$/;" m struct:fsck_data typeref:typename:int
+sig_other globals.h /^ long sig_other;$/;" m struct:bc_data typeref:typename:long
+sig_to_num lib/lib.c /^int sig_to_num(char *pidstr)$/;" f typeref:typename:int
+sigatexit lib/lib.c /^void sigatexit(void *handler)$/;" f typeref:typename:void
+sigc globals.h /^ unsigned long sigc;$/;" m struct:bc_data typeref:typename:unsigned long
+sigfd globals.h /^ int sigfd[2];$/;" m struct:syslogd_data typeref:typename:int[2]
+signal globals.h /^ int signal;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0d08 typeref:typename:int
+signal toys.h /^ short signal; \/\/ generic_signal() records what signal it saw here$/;" m struct:toy_context typeref:typename:short
+signalfd toys.h /^ int signalfd; \/\/ and writes signal to this fd, if set$/;" m struct:toy_context typeref:typename:int
+signame lib/lib.c /^struct signame {$/;" s file:
+signames lib/lib.c /^static struct signame signames[] = {$/;" v typeref:struct:signame[] file:
+signe globals.h /^ unsigned long signe;$/;" m struct:bc_data typeref:typename:unsigned long
+signum globals.h /^ int signum;$/;" m struct:killall_data typeref:typename:int
+singledir globals.h /^ struct dirtree *files, *singledir;$/;" m struct:ls_data typeref:struct:dirtree *
+singleline globals.h /^ char stats, singleline, flush, *filter_dev, gbuf[8192];$/;" m struct:ip_data typeref:typename:char
+size globals.h /^ int dir_num, size, is_binary, status, change, len[2];$/;" m struct:diff_data typeref:typename:int
+size globals.h /^ long size;$/;" m struct:fallocate_data typeref:typename:long
+size globals.h /^ long size;$/;" m struct:losetup_data typeref:typename:long
+size globals.h /^ long size;$/;" m struct:truncate_data typeref:typename:long
+size globals.h /^ size_t size;$/;" m struct:getprop_data typeref:typename:size_t
+skeleton globals.h /^ struct skeleton_data skeleton;$/;" m union:global_union typeref:struct:skeleton_data
+skeleton_data globals.h /^struct skeleton_data {$/;" s
+skey globals.h /^ struct arg_list *skey;$/;" m struct:ipcrm_data typeref:struct:arg_list *
+smack_new_label_from_file lib/lsm.h /^#define smack_new_label_from_file(/;" d
+smack_new_label_from_path lib/lsm.h /^#define smack_new_label_from_path(/;" d
+smack_new_label_from_self lib/lsm.h /^#define smack_new_label_from_self(/;" d
+smack_set_label_for_file lib/lsm.h /^#define smack_set_label_for_file(/;" d
+smack_set_label_for_path lib/lsm.h /^#define smack_set_label_for_path(/;" d
+smack_set_label_for_self lib/lsm.h /^#define smack_set_label_for_self(/;" d
+smack_smackfs_path lib/lsm.h /^#define smack_smackfs_path(/;" d
+smpl_period_usec globals.h /^ long smpl_period_usec;$/;" m struct:bootchartd_data typeref:typename:long
+snapshot globals.h /^ void *regexes, *snapshot;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0d08 typeref:typename:void *
+snd_sock globals.h /^ int snd_sock;$/;" m struct:traceroute_data typeref:typename:int
+sock globals.h /^ int length, state, request_length, sock, sock1, status, retval, retries;$/;" m struct:dhcp6_data typeref:typename:int
+sock globals.h /^ int sock;$/;" m struct:ping_data typeref:typename:int
+sock1 globals.h /^ int length, state, request_length, sock, sock1, status, retval, retries;$/;" m struct:dhcp6_data typeref:typename:int
+socket globals.h /^ char *socket;$/;" m struct:syslogd_data typeref:typename:char *
+sockfd globals.h /^ int sockfd;$/;" m struct:arp_data typeref:typename:int
+sockfd globals.h /^ int sockfd;$/;" m struct:arping_data typeref:typename:int
+sockfd globals.h /^ int sockfd;$/;" m struct:brctl_data typeref:typename:int
+sockfd globals.h /^ int sockfd, connected, from_ok, route_cmd;$/;" m struct:ip_data typeref:typename:int
+sockfd globals.h /^ int sockfd;$/;" m struct:ifconfig_data typeref:typename:int
+sort globals.h /^ struct sort_data sort;$/;" m union:global_union typeref:struct:sort_data
+sort_data globals.h /^struct sort_data {$/;" s
+sortpos globals.h /^ int kcount, forcek, sortpos;$/;" m struct:ps_data typeref:typename:int
+sought_files globals.h /^ struct stat *sought_files;$/;" m struct:lsof_data typeref:struct:stat *
+speeds globals.h /^ int speeds[20];$/;" m struct:getty_data typeref:typename:int[20]
+split globals.h /^ struct split_data split;$/;" m union:global_union typeref:struct:split_data
+split_data globals.h /^struct split_data {$/;" s
+splitpath lib/lib.c /^struct string_list **splitpath(char *path, struct string_list **list)$/;" f typeref:struct:string_list **
+src_ip globals.h /^ char *src_ip;$/;" m struct:arping_data typeref:typename:char *
+src_ip globals.h /^ char *src_ip;$/;" m struct:traceroute_data typeref:typename:char *
+ss globals.h /^ struct ptr_len gg, GG, pp, PP, ss, tt, uu, UU;$/;" m struct:ps_data typeref:struct:ptr_len
+st globals.h /^ struct stat st;$/;" m union:stat_data::__anonc826279f050a typeref:struct:stat
+st globals.h /^ struct stat st[2];$/;" m struct:diff_data typeref:struct:stat[2]
+st lib/lib.h /^ struct stat st;$/;" m struct:dirtree typeref:struct:stat
+st_dev globals.h /^ dev_t st_dev;$/;" m struct:du_data typeref:typename:dev_t
+stacktop toys.h /^ void *stacktop; \/\/ nested toy_exec() call count, or 0 if vforked$/;" m struct:toy_context typeref:typename:void *
+star globals.h /^ unsigned types, leftover, star;$/;" m struct:od_data typeref:typename:unsigned
+start globals.h /^ unsigned long start, end;$/;" m struct:arping_data typeref:typename:unsigned long
+start globals.h /^ char *start;$/;" m struct:diff_data typeref:typename:char *
+start globals.h /^ struct timeval start;$/;" m struct:dd_data typeref:struct:timeval
+start_redraw lib/tty.c /^void start_redraw(unsigned *width, unsigned *height)$/;" f typeref:typename:void
+stat globals.h /^ struct stat_data stat;$/;" m union:global_union typeref:struct:stat_data
+stat globals.h /^ } stat;$/;" m struct:stat_data typeref:union:stat_data::__anonc826279f050a
+stat lib/lib.h /^ struct stat stat;$/;" m struct:mtab_list typeref:struct:stat
+stat_data globals.h /^struct stat_data {$/;" s
+state globals.h /^ int context, state, filein, fileout, filepatch, hunknum;$/;" m struct:patch_data typeref:typename:int
+state globals.h /^ int length, state, request_length, sock, sock1, status, retval, retries;$/;" m struct:dhcp6_data typeref:typename:int
+state globals.h /^ unsigned state[5];$/;" m struct:md5sum_data typeref:typename:unsigned[5]
+statline globals.h /^ char *statline;$/;" m struct:vi_data typeref:typename:char *
+stats globals.h /^ char stats, singleline, flush, *filter_dev, gbuf[8192];$/;" m struct:ip_data typeref:typename:char
+status globals.h /^ int dir_num, size, is_binary, status, change, len[2];$/;" m struct:diff_data typeref:typename:int
+status globals.h /^ int length, state, request_length, sock, sock1, status, retval, retries;$/;" m struct:dhcp6_data typeref:typename:int
+statvfs lib/lib.h /^ struct statvfs statvfs;$/;" m struct:mtab_list typeref:struct:statvfs
+stopearly lib/args.c /^ int noerror, nodash_now, stopearly;$/;" m struct:getoptflagstate typeref:typename:int file:
+str lib/args.c /^ char *str;$/;" m struct:longopts typeref:typename:char * file:
+str lib/lib.h /^ char *str;$/;" m struct:str_len typeref:typename:char *
+str lib/lib.h /^ char str[0];$/;" m struct:string_list typeref:typename:char[0]
+str_len lib/lib.h /^struct str_len {$/;" s
+strafter lib/lib.c /^char *strafter(char *haystack, char *needle)$/;" f typeref:typename:char *
+strend lib/lib.c /^char *strend(char *str, char *suffix)$/;" f typeref:typename:char *
+stridx lib/lib.c /^int stridx(char *haystack, char needle)$/;" f typeref:typename:int
+string_list lib/lib.h /^struct string_list {$/;" s
+string_to_mode lib/lib.c /^mode_t string_to_mode(char *modestr, mode_t mode)$/;" f typeref:typename:mode_t
+strings globals.h /^ struct strings_data strings;$/;" m union:global_union typeref:struct:strings_data
+strings_data globals.h /^struct strings_data {$/;" s
+strlower lib/lib.c /^char *strlower(char *s)$/;" f typeref:typename:char *
+strnstr lib/lib.c /^char *strnstr(char *line, char *str)$/;" f typeref:typename:char *
+strstart lib/lib.c /^int strstart(char **a, char *b)$/;" f typeref:typename:int
+stty globals.h /^ struct stty_data stty;$/;" m union:global_union typeref:struct:stty_data
+stty_data globals.h /^struct stty_data {$/;" s
+su globals.h /^ struct su_data su;$/;" m union:global_union typeref:struct:su_data
+su_data globals.h /^struct su_data {$/;" s
+sulogin globals.h /^ struct sulogin_data sulogin;$/;" m union:global_union typeref:struct:sulogin_data
+sulogin_data globals.h /^struct sulogin_data {$/;" s
+sum_status globals.h /^ int sum_status;$/;" m struct:fsck_data typeref:typename:int
+swapon globals.h /^ struct swapon_data swapon;$/;" m union:global_union typeref:struct:swapon_data
+swapon_data globals.h /^struct swapon_data {$/;" s
+switch_root globals.h /^ struct switch_root_data switch_root;$/;" m union:global_union typeref:struct:switch_root_data
+switch_root_data globals.h /^struct switch_root_data {$/;" s
+symbol lib/deflate.c /^ unsigned short symbol[288]; \/\/ sorted by bit length, then ascending order$/;" m struct:huff typeref:typename:unsigned short[288] file:
+symfollow globals.h /^ int symfollow;$/;" m struct:chgrp_data typeref:typename:int
+symlink lib/lib.h /^ char *symlink;$/;" m struct:dirtree typeref:typename:char *
+symreq globals.h /^ uint8_t symreq;$/;" m struct:modprobe_data typeref:typename:uint8_t
+syslogd globals.h /^ struct syslogd_data syslogd;$/;" m union:global_union typeref:struct:syslogd_data
+syslogd_data globals.h /^struct syslogd_data {$/;" s
+sz globals.h /^ long sz, count;$/;" m struct:dd_data::__anonc826279f0608 typeref:typename:long
+t globals.h /^ struct arg_list *G, *g, *P, *s, *t, *U, *u;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0d08 typeref:struct:arg_list *
+t globals.h /^ struct arg_list *G, *g, *U, *u, *t, *s, *p, *O, *o, *P, *k;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0b08 typeref:struct:arg_list *
+t globals.h /^ char *f, *t;$/;" m struct:iconv_data typeref:typename:char *
+t globals.h /^ char *p, *t;$/;" m struct:logger_data typeref:typename:char *
+t globals.h /^ char *t, *p;$/;" m struct:log_data typeref:typename:char *
+t globals.h /^ char *t, *r, *d;$/;" m struct:touch_data typeref:typename:char *
+t globals.h /^ char *t;$/;" m struct:sort_data typeref:typename:char *
+t globals.h /^ char *t;$/;" m struct:strings_data typeref:typename:char *
+t globals.h /^ long t;$/;" m struct:nsenter_data typeref:typename:long
+t globals.h /^ long w, W, i, s, c, t, m;$/;" m struct:ping_data typeref:typename:long
+t globals.h /^ struct arg_list *t;$/;" m struct:df_data typeref:struct:arg_list *
+t globals.h /^ struct arg_list *t;$/;" m struct:expand_data typeref:struct:arg_list *
+t globals.h /^ struct arg_list *t;$/;" m struct:od_data typeref:struct:arg_list *
+t globals.h /^ struct arg_list *t;$/;" m struct:umount_data typeref:struct:arg_list *
+t_list globals.h /^ char *t_list;$/;" m struct:fsck_data typeref:typename:char *
+tab globals.h /^ unsigned tabcount, *tab;$/;" m struct:expand_data typeref:typename:unsigned *
+tabcount globals.h /^ unsigned tabcount, *tab;$/;" m struct:expand_data typeref:typename:unsigned
+tail globals.h /^ struct tail_data tail;$/;" m union:global_union typeref:struct:tail_data
+tail_data globals.h /^struct tail_data {$/;" s
+tar globals.h /^ struct tar_data tar;$/;" m union:global_union typeref:struct:tar_data
+tar_data globals.h /^struct tar_data {$/;" s
+tcpsvd globals.h /^ struct tcpsvd_data tcpsvd;$/;" m union:global_union typeref:struct:tcpsvd_data
+tcpsvd_data globals.h /^struct tcpsvd_data {$/;" s
+tea globals.h /^ time_t tea;$/;" m struct:dmesg_data typeref:typename:time_t
+tee globals.h /^ struct tee_data tee;$/;" m union:global_union typeref:struct:tee_data
+tee_data globals.h /^struct tee_data {$/;" s
+telnet globals.h /^ struct telnet_data telnet;$/;" m union:global_union typeref:struct:telnet_data
+telnet_data globals.h /^struct telnet_data {$/;" s
+telnetd globals.h /^ struct telnetd_data telnetd;$/;" m union:global_union typeref:struct:telnetd_data
+telnetd_data globals.h /^struct telnetd_data {$/;" s
+tempfile globals.h /^ char *tempfile;$/;" m struct:dos2unix_data typeref:typename:char *
+tempfile2zap lib/lib.c /^static char *tempfile2zap;$/;" v typeref:typename:char * file:
+tempfile_handler lib/lib.c /^static void tempfile_handler(void)$/;" f typeref:typename:void file:
+tempname globals.h /^ char *tempname;$/;" m struct:patch_data typeref:typename:char *
+term_mode globals.h /^ uint8_t term_mode;$/;" m struct:telnet_data typeref:typename:uint8_t
+term_ok globals.h /^ uint8_t term_ok;$/;" m struct:telnet_data typeref:typename:uint8_t
+terminal_probesize lib/tty.c /^int terminal_probesize(unsigned *xx, unsigned *yy)$/;" f typeref:typename:int
+terminal_size lib/tty.c /^int terminal_size(unsigned *xx, unsigned *yy)$/;" f typeref:typename:int
+termios globals.h /^ struct termios termios;$/;" m struct:getty_data typeref:struct:termios
+tftp globals.h /^ struct tftp_data tftp;$/;" m union:global_union typeref:struct:tftp_data
+tftp_data globals.h /^struct tftp_data {$/;" s
+tftpd globals.h /^ struct tftpd_data tftpd;$/;" m union:global_union typeref:struct:tftpd_data
+tftpd_data globals.h /^struct tftpd_data {$/;" s
+therm globals.h /^ int ac, bat, therm, cool;$/;" m struct:acpi_data typeref:typename:int
+this main.c /^union global_union this;$/;" v typeref:union:global_union
+threadparent globals.h /^ struct dirtree *threadparent;$/;" m struct:ps_data typeref:struct:dirtree *
+ticks globals.h /^ long long ticks, bits, time;$/;" m struct:ps_data typeref:typename:long long
+time globals.h /^ long long ticks, bits, time;$/;" m struct:ps_data typeref:typename:long long
+time_out globals.h /^ unsigned long time_out;$/;" m struct:arping_data typeref:typename:unsigned long
+timeout globals.h /^ struct timeout_data timeout;$/;" m union:global_union typeref:struct:timeout_data
+timeout globals.h /^ long timeout;$/;" m struct:dhcp_data typeref:typename:long
+timeout globals.h /^ long retry, timeout, errortimeout;$/;" m struct:dhcp6_data typeref:typename:long
+timeout globals.h /^ long timeout;$/;" m struct:getty_data typeref:typename:long
+timeout globals.h /^ long timeout;$/;" m struct:sulogin_data typeref:typename:long
+timeout_data globals.h /^struct timeout_data {$/;" s
+tocmd globals.h /^ char *tocmd;$/;" m struct:tar_data typeref:typename:char *
+tok globals.h /^ char **tok; \/\/ current token, not on the stack since recursive calls mutate it$/;" m struct:expr_data typeref:typename:char **
+top globals.h /^ } top;$/;" m union:ps_data::__anonc826279f0a0a typeref:struct:ps_data::__anonc826279f0a0a::__anonc826279f0c08
+top globals.h /^ struct stat top;$/;" m struct:cp_data typeref:struct:stat
+topdir globals.h /^ int topdir, xdev, depth;$/;" m struct:find_data typeref:typename:int
+tos globals.h /^ long tos;$/;" m struct:traceroute_data typeref:typename:long
+total globals.h /^ unsigned long depth, total;$/;" m struct:du_data typeref:typename:unsigned long
+total globals.h /^ unsigned total;$/;" m struct:base64_data typeref:typename:unsigned
+totals globals.h /^ unsigned long totals[4];$/;" m struct:wc_data typeref:typename:unsigned long[4]
+touch globals.h /^ struct touch_data touch;$/;" m union:global_union typeref:struct:touch_data
+touch_data globals.h /^struct touch_data {$/;" s
+toy_context toys.h /^extern struct toy_context {$/;" s
+toy_exec main.c /^void toy_exec(char *argv[])$/;" f typeref:typename:void
+toy_exec_which main.c /^void toy_exec_which(struct toy_list *which, char *argv[])$/;" f typeref:typename:void
+toy_find main.c /^struct toy_list *toy_find(char *name)$/;" f typeref:struct:toy_list *
+toy_init main.c /^void toy_init(struct toy_list *which, char *argv[])$/;" f typeref:typename:void
+toy_list main.c /^struct toy_list toy_list[] = {$/;" v typeref:struct:toy_list[]
+toy_list toys.h /^extern struct toy_list {$/;" s
+toy_list toys.h /^} toy_list[];$/;" v typeref:struct:toy_list[]
+toy_main toys.h /^ void (*toy_main)(void);$/;" m struct:toy_list typeref:typename:void (*)(void)
+toy_singleinit main.c /^static void toy_singleinit(struct toy_list *which, char *argv[])$/;" f typeref:typename:void file:
+toybox_main main.c /^void toybox_main(void)$/;" f typeref:typename:void
+toybuf main.c /^char toybuf[4096], libbuf[4096];$/;" v typeref:typename:char[4096]
+toycount toys.h /^ short toycount; \/\/ Total number of commands in this build$/;" m struct:toy_context typeref:typename:short
+toys main.c /^struct toy_context toys;$/;" v typeref:struct:toy_context
+toys toys.h /^} toys;$/;" v typeref:struct:toy_context
+tr globals.h /^ struct tr_data tr;$/;" m union:global_union typeref:struct:tr_data
+tr_data globals.h /^struct tr_data {$/;" s
+traceroute globals.h /^ struct traceroute_data traceroute;$/;" m union:global_union typeref:struct:traceroute_data
+traceroute_data globals.h /^struct traceroute_data {$/;" s
+transction_id globals.h /^ uint8_t transction_id[3];$/;" m struct:dhcp6_data typeref:typename:uint8_t[3]
+treeblocks globals.h /^ unsigned treeblocks; \/\/ Blocks used by dt$/;" m struct:mke2fs_data typeref:typename:unsigned
+treeinodes globals.h /^ unsigned treeinodes; \/\/ Inodes used by dt$/;" m struct:mke2fs_data typeref:typename:unsigned
+truncate globals.h /^ struct truncate_data truncate;$/;" m union:global_union typeref:struct:truncate_data
+truncate_data globals.h /^struct truncate_data {$/;" s
+tryagain globals.h /^ long tryagain;$/;" m struct:dhcp_data typeref:typename:long
+tt globals.h /^ struct ptr_len gg, GG, pp, PP, ss, tt, uu, UU;$/;" m struct:ps_data typeref:struct:ptr_len
+ttl_probes globals.h /^ long ttl_probes;$/;" m struct:traceroute_data typeref:typename:long
+tty globals.h /^ dev_t tty;$/;" m struct:ps_data typeref:typename:dev_t
+tty globals.h /^ long tty;$/;" m struct:bc_data typeref:typename:long
+tty_esc lib/tty.c /^void tty_esc(char *s)$/;" f typeref:typename:void
+tty_fd lib/tty.c /^int tty_fd(void)$/;" f typeref:typename:int
+tty_jump lib/tty.c /^void tty_jump(int x, int y)$/;" f typeref:typename:void
+tty_name globals.h /^ char *tty_name; $/;" m struct:getty_data typeref:typename:char *
+tty_reset lib/tty.c /^void tty_reset(void)$/;" f typeref:typename:void
+tty_sigreset lib/tty.c /^void tty_sigreset(int i)$/;" f typeref:typename:void
+ttyin globals.h /^ long ttyin;$/;" m struct:bc_data typeref:typename:long
+ttype globals.h /^ char *ttype;$/;" m struct:telnet_data typeref:typename:char *
+tunctl globals.h /^ struct tunctl_data tunctl;$/;" m union:global_union typeref:struct:tunctl_data
+tunctl_data globals.h /^struct tunctl_data {$/;" s
+tv globals.h /^ struct timeval tv;$/;" m struct:dhcp6_data typeref:struct:timeval
+type globals.h /^ char *type;$/;" m struct:mount_data typeref:typename:char *
+type globals.h /^ int type;$/;" m struct:truncate_data typeref:typename:int
+type lib/args.c /^ char type; \/\/ Type of arguments to store union "this"$/;" m struct:opts typeref:typename:char file:
+type lib/lib.h /^ char type[0];$/;" m struct:mtab_list typeref:typename:char[0]
+type lib/password.c /^ char *type, id, len;$/;" m struct:get_salt::__anon8e1926ef0108 typeref:typename:char * file:
+type_str globals.h /^ char *type_str;$/;" m struct:host_data typeref:typename:char *
+types globals.h /^ char *types;$/;" m struct:umount_data typeref:typename:char *
+types globals.h /^ unsigned types, leftover, star;$/;" m struct:od_data typeref:typename:unsigned
+u globals.h /^ struct arg_list *G, *g, *P, *s, *t, *U, *u;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0d08 typeref:struct:arg_list *
+u globals.h /^ struct arg_list *G, *g, *U, *u, *t, *s, *p, *O, *o, *P, *k;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0b08 typeref:struct:arg_list *
+u globals.h /^ struct arg_list *u, *p, *o, *k, *O;$/;" m struct:ps_data::__anonc826279f0a0a::__anonc826279f0c08 typeref:struct:arg_list *
+u globals.h /^ char *u, *p, *P;$/;" m struct:ftpget_data typeref:typename:char *
+u globals.h /^ char *u;$/;" m struct:tunctl_data typeref:typename:char *
+u globals.h /^ struct arg_list *u;$/;" m struct:env_data typeref:struct:arg_list *
+u_grp globals.h /^ char *u_grp;$/;" m struct:useradd_data typeref:typename:char *
+udp globals.h /^ int udp;$/;" m struct:tcpsvd_data typeref:typename:int
+uid globals.h /^ long uid;$/;" m struct:useradd_data typeref:typename:long
+uid globals.h /^ uid_t uid;$/;" m struct:cp_data typeref:typename:uid_t
+ulimit globals.h /^ struct ulimit_data ulimit;$/;" m union:global_union typeref:struct:ulimit_data
+ulimit_data globals.h /^struct ulimit_data {$/;" s
+umount globals.h /^ struct umount_data umount;$/;" m union:global_union typeref:struct:umount_data
+umount_data globals.h /^struct umount_data {$/;" s
+undo globals.h /^ int numlen, undo, undolen;$/;" m struct:hexedit_data typeref:typename:int
+undolen globals.h /^ int numlen, undo, undolen;$/;" m struct:hexedit_data typeref:typename:int
+unescape lib/lib.c /^int unescape(char c)$/;" f typeref:typename:int
+unicast_flag globals.h /^ unicast_flag;$/;" m struct:arping_data typeref:typename:unsigned
+uniq globals.h /^ struct uniq_data uniq;$/;" m union:global_union typeref:struct:uniq_data
+uniq_data globals.h /^struct uniq_data {$/;" s
+units globals.h /^ long units;$/;" m struct:df_data typeref:typename:long
+units globals.h /^ unsigned long long units;$/;" m struct:free_data typeref:typename:unsigned long long
+unix_socket globals.h /^ char *unix_socket;$/;" m struct:syslogd_data typeref:typename:char *
+unknown main.c /^static void unknown(char *name)$/;" f typeref:typename:void file:
+unused globals.h /^ int unused;$/;" m struct:hello_data typeref:typename:int
+update_password lib/password.c /^int update_password(char *filename, char* username, char* entry)$/;" f typeref:typename:int
+use_color globals.h /^ int use_color;$/;" m struct:dmesg_data typeref:typename:int
+user globals.h /^ char *user;$/;" m struct:crontab_data typeref:typename:char *
+user globals.h /^ char *user;$/;" m struct:tcpsvd_data typeref:typename:char *
+user globals.h /^ char *user;$/;" m struct:tftpd_data typeref:typename:char *
+useradd globals.h /^ struct useradd_data useradd;$/;" m union:global_union typeref:struct:useradd_data
+useradd_data globals.h /^struct useradd_data {$/;" s
+username globals.h /^ char *username;$/;" m struct:login_data typeref:typename:char *
+ut_type lib/portability.h /^struct utmpx {int ut_type;};$/;" m struct:utmpx typeref:typename:int
+utc globals.h /^ int utc;$/;" m struct:hwclock_data typeref:typename:int
+utf8len lib/linestack.c /^int utf8len(char *str)$/;" f typeref:typename:int
+utf8skip lib/linestack.c /^int utf8skip(char *str, int width)$/;" f typeref:typename:int
+utf8towc lib/lib.c /^int utf8towc(wchar_t *wc, char *str, unsigned len)$/;" f typeref:typename:int
+utmpx lib/portability.h /^struct utmpx {int ut_type;};$/;" s
+uu globals.h /^ struct ptr_len gg, GG, pp, PP, ss, tt, uu, UU;$/;" m struct:ps_data typeref:struct:ptr_len
+uudecode globals.h /^ struct uudecode_data uudecode;$/;" m union:global_union typeref:struct:uudecode_data
+uudecode_data globals.h /^struct uudecode_data {$/;" s
+v globals.h /^ char *x, *v, *n;$/;" m struct:setfattr_data typeref:typename:char *
+v globals.h /^ long w, l, v;$/;" m struct:nl_data typeref:typename:long
+val lib/args.c /^ } val[3]; \/\/ low, high, default - range of allowed values$/;" m struct:opts typeref:union:opts::__anon2edfd129010a[3] file:
+vendor_cls globals.h /^ char *vendor_cls;$/;" m struct:dhcp_data typeref:typename:char *
+verror_msg lib/lib.c /^void verror_msg(char *msg, int err, va_list va)$/;" f typeref:typename:void
+vi globals.h /^ struct vi_data vi;$/;" m union:global_union typeref:struct:vi_data
+vi_data globals.h /^struct vi_data {$/;" s
+vt_num globals.h /^ unsigned long vt_num;$/;" m struct:openvt_data typeref:typename:unsigned long
+w globals.h /^ long N, w, j;$/;" m struct:od_data typeref:typename:long
+w globals.h /^ long q, p, W, w;$/;" m struct:netcat_data typeref:typename:long
+w globals.h /^ long w, W, i, s, c, t, m;$/;" m struct:ping_data typeref:typename:long
+w globals.h /^ long w, l, v;$/;" m struct:nl_data typeref:typename:long
+w globals.h /^ long w, s, f;$/;" m struct:uniq_data typeref:typename:long
+w globals.h /^ long w;$/;" m struct:base64_data typeref:typename:long
+w_sec globals.h /^ long w_sec;$/;" m struct:telnetd_data typeref:typename:long
+wait_time globals.h /^ long wait_time;$/;" m struct:traceroute_data typeref:typename:long
+wasroot toys.h /^ char wasroot; \/\/ dropped setuid$/;" m struct:toy_context typeref:typename:char
+watch globals.h /^ struct watch_data watch;$/;" m union:global_union typeref:struct:watch_data
+watch_data globals.h /^struct watch_data {$/;" s
+wc globals.h /^ struct wc_data wc;$/;" m union:global_union typeref:struct:wc_data
+wc_data globals.h /^struct wc_data {$/;" s
+wfchmodat lib/lib.c /^int wfchmodat(int fd, char *name, mode_t mode)$/;" f typeref:typename:int
+wget globals.h /^ struct wget_data wget;$/;" m union:global_union typeref:struct:wget_data
+wget_data globals.h /^struct wget_data {$/;" s
+which toys.h /^ struct toy_list *which; \/\/ Which entry in toy_list is this one?$/;" m struct:toy_context typeref:struct:toy_list *
+width globals.h /^ int width;$/;" m struct:fmt_data typeref:typename:int
+width globals.h /^ int width;$/;" m struct:fold_data typeref:typename:int
+width globals.h /^ unsigned width, height;$/;" m struct:ps_data typeref:typename:unsigned
+win_height globals.h /^ unsigned win_height;$/;" m struct:telnet_data typeref:typename:unsigned
+win_width globals.h /^ unsigned win_width;$/;" m struct:telnet_data typeref:typename:unsigned
+wpad globals.h /^ int wpad;$/;" m struct:netstat_data typeref:typename:int
+writeall lib/lib.c /^ssize_t writeall(int fd, void *buf, size_t len)$/;" f typeref:typename:ssize_t
+x globals.h /^ char *x, *v, *n;$/;" m struct:setfattr_data typeref:typename:char *
+xabspath lib/xwrap.c /^char *xabspath(char *path, int exact)$/;" f typeref:typename:char *
+xaccess lib/xwrap.c /^void xaccess(char *path, int flags)$/;" f typeref:typename:void
+xargs globals.h /^ struct xargs_data xargs;$/;" m union:global_union typeref:struct:xargs_data
+xargs_data globals.h /^struct xargs_data {$/;" s
+xchdir lib/xwrap.c /^void xchdir(char *path)$/;" f typeref:typename:void
+xchroot lib/xwrap.c /^void xchroot(char *path)$/;" f typeref:typename:void
+xclose lib/xwrap.c /^void xclose(int fd)$/;" f typeref:typename:void
+xconnect lib/net.c /^int xconnect(struct addrinfo *ai_arg)$/;" f typeref:typename:int
+xcreate lib/xwrap.c /^int xcreate(char *path, int flags, int mode)$/;" f typeref:typename:int
+xcreate_stdio lib/xwrap.c /^int xcreate_stdio(char *path, int flags, int mode)$/;" f typeref:typename:int
+xdev globals.h /^ int topdir, xdev, depth;$/;" m struct:find_data typeref:typename:int
+xdup lib/xwrap.c /^int xdup(int fd)$/;" f typeref:typename:int
+xexec lib/xwrap.c /^void xexec(char **argv)$/;" f typeref:typename:void
+xexit lib/xwrap.c /^void xexit(void)$/;" f typeref:typename:void
+xexit toys.h /^ struct arg_list *xexit; \/\/ atexit() functions for xexit(), set by sigatexit()$/;" m struct:toy_context typeref:struct:arg_list *
+xfdopen lib/xwrap.c /^FILE *xfdopen(int fd, char *mode)$/;" f typeref:typename:FILE *
+xflush lib/xwrap.c /^void xflush(void)$/;" f typeref:typename:void
+xfopen lib/xwrap.c /^FILE *xfopen(char *path, char *mode)$/;" f typeref:typename:FILE *
+xfork lib/portability.c /^pid_t xfork(void)$/;" f typeref:typename:pid_t
+xgetaddrinfo lib/net.c /^struct addrinfo *xgetaddrinfo(char *host, char *port, int family, int socktype,$/;" f typeref:struct:addrinfo *
+xgetcwd lib/xwrap.c /^char *xgetcwd(void)$/;" f typeref:typename:char *
+xgetgid lib/xwrap.c /^unsigned xgetgid(char *name)$/;" f typeref:typename:unsigned
+xgetgrgid lib/xwrap.c /^struct group *xgetgrgid(gid_t gid)$/;" f typeref:struct:group *
+xgetgrnam lib/xwrap.c /^struct group *xgetgrnam(char *name)$/;" f typeref:struct:group *
+xgetmountlist lib/getmountlist.c /^struct mtab_list *xgetmountlist(char *path)$/;" f typeref:struct:mtab_list *
+xgetpwnam lib/xwrap.c /^struct passwd *xgetpwnam(char *name)$/;" f typeref:struct:passwd *
+xgetpwuid lib/xwrap.c /^struct passwd *xgetpwuid(uid_t uid)$/;" f typeref:struct:passwd *
+xgetrandom lib/portability.c /^void xgetrandom(void *buf, unsigned buflen, unsigned flags)$/;" f typeref:typename:void
+xgetuid lib/xwrap.c /^unsigned xgetuid(char *name)$/;" f typeref:typename:unsigned
+xioctl lib/xwrap.c /^int xioctl(int fd, int request, void *data)$/;" f typeref:typename:int
+xlseek lib/xwrap.c /^off_t xlseek(int fd, off_t offset, int whence)$/;" f typeref:typename:off_t
+xmalloc lib/xwrap.c /^void *xmalloc(size_t size)$/;" f typeref:typename:void *
+xmemdup lib/xwrap.c /^void *xmemdup(void *s, long len)$/;" f typeref:typename:void *
+xmmap lib/xwrap.c /^void *xmmap(void *addr, size_t length, int prot, int flags, int fd, off_t off)$/;" f typeref:typename:void *
+xmprintf lib/xwrap.c /^char *xmprintf(char *format, ...)$/;" f typeref:typename:char *
+xopen lib/xwrap.c /^int xopen(char *path, int flags)$/;" f typeref:typename:int
+xopen_stdio lib/xwrap.c /^int xopen_stdio(char *path, int flags)$/;" f typeref:typename:int
+xopenro lib/xwrap.c /^int xopenro(char *path)$/;" f typeref:typename:int
+xparsemillitime lib/xwrap.c /^long long xparsemillitime(char *arg)$/;" f typeref:typename:long long
+xparsetime lib/xwrap.c /^long xparsetime(char *arg, long zeroes, long *fraction)$/;" f typeref:typename:long
+xpclose lib/xwrap.c /^int xpclose(pid_t pid, int pipe)$/;" f typeref:typename:int
+xpclose_both lib/xwrap.c /^int xpclose_both(pid_t pid, int *pipes)$/;" f typeref:typename:int
+xpidfile lib/xwrap.c /^void xpidfile(char *name)$/;" f typeref:typename:void
+xpipe lib/xwrap.c /^void xpipe(int *pp)$/;" f typeref:typename:void
+xpoll lib/net.c /^int xpoll(struct pollfd *fds, int nfds, int timeout)$/;" f typeref:typename:int
+xpopen lib/xwrap.c /^pid_t xpopen(char **argv, int *pipe, int isstdout)$/;" f typeref:typename:pid_t
+xpopen_both lib/xwrap.c /^pid_t xpopen_both(char **argv, int *pipes)$/;" f typeref:typename:pid_t
+xprintf lib/xwrap.c /^void xprintf(char *format, ...)$/;" f typeref:typename:void
+xputc lib/xwrap.c /^void xputc(char c)$/;" f typeref:typename:void
+xputs lib/xwrap.c /^void xputs(char *s)$/;" f typeref:typename:void
+xread lib/xwrap.c /^size_t xread(int fd, void *buf, size_t len)$/;" f typeref:typename:size_t
+xreadall lib/xwrap.c /^void xreadall(int fd, void *buf, size_t len)$/;" f typeref:typename:void
+xreadfile lib/xwrap.c /^char *xreadfile(char *name, char *buf, off_t len)$/;" f typeref:typename:char *
+xreadlink lib/xwrap.c /^char *xreadlink(char *name)$/;" f typeref:typename:char *
+xrealloc lib/xwrap.c /^void *xrealloc(void *ptr, size_t size)$/;" f typeref:typename:void *
+xregcomp lib/xwrap.c /^void xregcomp(regex_t *preg, char *regex, int cflags)$/;" f typeref:typename:void
+xrun lib/xwrap.c /^int xrun(char **argv)$/;" f typeref:typename:int
+xsendfile lib/xwrap.c /^long long xsendfile(int in, int out)$/;" f typeref:typename:long long
+xset_terminal lib/tty.c /^void xset_terminal(int fd, int raw, int speed, struct termios *old)$/;" f typeref:typename:void
+xsetsockopt lib/net.c /^void xsetsockopt(int fd, int level, int opt, void *val, socklen_t len)$/;" f typeref:typename:void
+xsetuser lib/xwrap.c /^void xsetuser(struct passwd *pwd)$/;" f typeref:typename:void
+xsignal lib/xwrap.c /^void xsignal(int signal, void *handler)$/;" f typeref:typename:void
+xsignal_flags lib/xwrap.c /^void xsignal_flags(int signal, void *handler, int flags)$/;" f typeref:typename:void
+xsocket lib/net.c /^int xsocket(int domain, int type, int protocol)$/;" f typeref:typename:int
+xstat lib/xwrap.c /^void xstat(char *path, struct stat *st)$/;" f typeref:typename:void
+xstrdup lib/xwrap.c /^char *xstrdup(char *s)$/;" f typeref:typename:char *
+xstrncat lib/xwrap.c /^void xstrncat(char *dest, char *src, size_t size)$/;" f typeref:typename:void
+xstrncpy lib/xwrap.c /^void xstrncpy(char *dest, char *src, size_t size)$/;" f typeref:typename:void
+xstrndup lib/xwrap.c /^char *xstrndup(char *s, size_t n)$/;" f typeref:typename:char *
+xstrtod lib/xwrap.c /^double xstrtod(char *s)$/;" f typeref:typename:double
+xstrtol lib/lib.c /^long long xstrtol(char *str, char **end, int base)$/;" f typeref:typename:long long
+xtempfile lib/xwrap.c /^int xtempfile(char *name, char **tempname)$/;" f typeref:typename:int
+xtzset lib/xwrap.c /^char *xtzset(char *new)$/;" f typeref:typename:char *
+xunlink lib/xwrap.c /^void xunlink(char *path)$/;" f typeref:typename:void
+xvforkwrap lib/xwrap.c /^pid_t __attribute__((returns_twice)) xvforkwrap(pid_t pid)$/;" f typeref:typename:pid_t
+xwaitpid lib/xwrap.c /^int xwaitpid(pid_t pid)$/;" f typeref:typename:int
+xwrite lib/xwrap.c /^void xwrite(int fd, void *buf, size_t len)$/;" f typeref:typename:void
+xx globals.h /^ unsigned xx;$/;" m struct:sed_data typeref:typename:unsigned
+xxd globals.h /^ struct xxd_data xxd;$/;" m union:global_union typeref:struct:xxd_data
+xxd_data globals.h /^struct xxd_data {$/;" s
+xzalloc lib/xwrap.c /^void *xzalloc(size_t size)$/;" f typeref:typename:void *
+yesno lib/lib.c /^int yesno(int def)$/;" f typeref:typename:int
diff --git a/login/tags.h b/login/tags.h
@@ -0,0 +1,192 @@
+#define CP_mode 0
+#define _CP_mode (1<<0)
+#define CP_ownership 1
+#define _CP_ownership (1<<1)
+#define CP_timestamps 2
+#define _CP_timestamps (1<<2)
+#define CP_context 3
+#define _CP_context (1<<3)
+#define CP_xattr 4
+#define _CP_xattr (1<<4)
+#define PS_PID 0
+#define _PS_PID (1<<0)
+#define PS_PPID 1
+#define _PS_PPID (1<<1)
+#define PS_PRI 2
+#define _PS_PRI (1<<2)
+#define PS_NI 3
+#define _PS_NI (1<<3)
+#define PS_ADDR 4
+#define _PS_ADDR (1<<4)
+#define PS_SZ 5
+#define _PS_SZ (1<<5)
+#define PS_RSS 6
+#define _PS_RSS (1<<6)
+#define PS_PGID 7
+#define _PS_PGID (1<<7)
+#define PS_VSZ 8
+#define _PS_VSZ (1<<8)
+#define PS_MAJFL 9
+#define _PS_MAJFL (1<<9)
+#define PS_MINFL 10
+#define _PS_MINFL (1<<10)
+#define PS_PR 11
+#define _PS_PR (1<<11)
+#define PS_PSR 12
+#define _PS_PSR (1<<12)
+#define PS_RTPRIO 13
+#define _PS_RTPRIO (1<<13)
+#define PS_SCH 14
+#define _PS_SCH (1<<14)
+#define PS_CPU 15
+#define _PS_CPU (1<<15)
+#define PS_TID 16
+#define _PS_TID (1<<16)
+#define PS_TCNT 17
+#define _PS_TCNT (1<<17)
+#define PS_BIT 18
+#define _PS_BIT (1<<18)
+#define PS_TTY 19
+#define _PS_TTY (1<<19)
+#define PS_WCHAN 20
+#define _PS_WCHAN (1<<20)
+#define PS_LABEL 21
+#define _PS_LABEL (1<<21)
+#define PS_COMM 22
+#define _PS_COMM (1<<22)
+#define PS_NAME 23
+#define _PS_NAME (1<<23)
+#define PS_COMMAND 24
+#define _PS_COMMAND (1<<24)
+#define PS_CMDLINE 25
+#define _PS_CMDLINE (1<<25)
+#define PS_ARGS 26
+#define _PS_ARGS (1<<26)
+#define PS_CMD 27
+#define _PS_CMD (1<<27)
+#define PS_UID 28
+#define _PS_UID (1<<28)
+#define PS_USER 29
+#define _PS_USER (1<<29)
+#define PS_RUID 30
+#define _PS_RUID (1<<30)
+#define PS_RUSER 31
+#define _PS_RUSER (1<<31)
+#define PS_GID 32
+#define _PS_GID (1LL<<32)
+#define PS_GROUP 33
+#define _PS_GROUP (1LL<<33)
+#define PS_RGID 34
+#define _PS_RGID (1LL<<34)
+#define PS_RGROUP 35
+#define _PS_RGROUP (1LL<<35)
+#define PS_TIME 36
+#define _PS_TIME (1LL<<36)
+#define PS_ELAPSED 37
+#define _PS_ELAPSED (1LL<<37)
+#define PS_TIME_ 38
+#define _PS_TIME_ (1LL<<38)
+#define PS_C 39
+#define _PS_C (1LL<<39)
+#define PS__VSZ 40
+#define _PS__VSZ (1LL<<40)
+#define PS__MEM 41
+#define _PS__MEM (1LL<<41)
+#define PS__CPU 42
+#define _PS__CPU (1LL<<42)
+#define PS_VIRT 43
+#define _PS_VIRT (1LL<<43)
+#define PS_RES 44
+#define _PS_RES (1LL<<44)
+#define PS_SHR 45
+#define _PS_SHR (1LL<<45)
+#define PS_READ 46
+#define _PS_READ (1LL<<46)
+#define PS_WRITE 47
+#define _PS_WRITE (1LL<<47)
+#define PS_IO 48
+#define _PS_IO (1LL<<48)
+#define PS_DREAD 49
+#define _PS_DREAD (1LL<<49)
+#define PS_DWRITE 50
+#define _PS_DWRITE (1LL<<50)
+#define PS_SWAP 51
+#define _PS_SWAP (1LL<<51)
+#define PS_DIO 52
+#define _PS_DIO (1LL<<52)
+#define PS_STIME 53
+#define _PS_STIME (1LL<<53)
+#define PS_F 54
+#define _PS_F (1LL<<54)
+#define PS_S 55
+#define _PS_S (1LL<<55)
+#define PS_STAT 56
+#define _PS_STAT (1LL<<56)
+#define PS_PCY 57
+#define _PS_PCY (1LL<<57)
+#define KEY_UP 0
+#define _KEY_UP (1<<0)
+#define KEY_DOWN 1
+#define _KEY_DOWN (1<<1)
+#define KEY_RIGHT 2
+#define _KEY_RIGHT (1<<2)
+#define KEY_LEFT 3
+#define _KEY_LEFT (1<<3)
+#define KEY_PGUP 4
+#define _KEY_PGUP (1<<4)
+#define KEY_PGDN 5
+#define _KEY_PGDN (1<<5)
+#define KEY_HOME 6
+#define _KEY_HOME (1<<6)
+#define KEY_END 7
+#define _KEY_END (1<<7)
+#define KEY_INSERT 8
+#define _KEY_INSERT (1<<8)
+#define KEY_F1 9
+#define _KEY_F1 (1<<9)
+#define KEY_F2 10
+#define _KEY_F2 (1<<10)
+#define KEY_F3 11
+#define _KEY_F3 (1<<11)
+#define KEY_F4 12
+#define _KEY_F4 (1<<12)
+#define KEY_F5 13
+#define _KEY_F5 (1<<13)
+#define KEY_F6 14
+#define _KEY_F6 (1<<14)
+#define KEY_F7 15
+#define _KEY_F7 (1<<15)
+#define KEY_F8 16
+#define _KEY_F8 (1<<16)
+#define KEY_F9 17
+#define _KEY_F9 (1<<17)
+#define KEY_SUP 18
+#define _KEY_SUP (1<<18)
+#define KEY_AUP 19
+#define _KEY_AUP (1<<19)
+#define KEY_CUP 20
+#define _KEY_CUP (1<<20)
+#define KEY_SDOWN 21
+#define _KEY_SDOWN (1<<21)
+#define KEY_ADOWN 22
+#define _KEY_ADOWN (1<<22)
+#define KEY_CDOWN 23
+#define _KEY_CDOWN (1<<23)
+#define KEY_SRIGHT 24
+#define _KEY_SRIGHT (1<<24)
+#define KEY_ARIGHT 25
+#define _KEY_ARIGHT (1<<25)
+#define KEY_CRIGHT 26
+#define _KEY_CRIGHT (1<<26)
+#define KEY_SLEFT 27
+#define _KEY_SLEFT (1<<27)
+#define KEY_ALEFT 28
+#define _KEY_ALEFT (1<<28)
+#define KEY_CLEFT 29
+#define _KEY_CLEFT (1<<29)
+#define KEY_SF1 30
+#define _KEY_SF1 (1<<30)
+#define KEY_AF1 31
+#define _KEY_AF1 (1<<31)
+#define KEY_CF1 32
+#define _KEY_CF1 (1LL<<32)
diff --git a/login/toys.h b/login/toys.h
@@ -0,0 +1,127 @@
+/* Toybox infrastructure.
+ *
+ * Copyright 2006 Rob Landley <rob@landley.net>
+ */
+
+// Stuff that needs to go before the standard headers
+
+#include "config.h"
+#include "lib/portability.h"
+
+// General posix-2008 headers
+#include <ctype.h>
+#include <dirent.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <fnmatch.h>
+#include <grp.h>
+#include <inttypes.h>
+#include <limits.h>
+#include <math.h>
+#include <pwd.h>
+#include <regex.h>
+#include <sched.h>
+#include <setjmp.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <strings.h>
+#include <sys/mman.h>
+#include <sys/resource.h>
+#include <sys/stat.h>
+#include <sys/statvfs.h>
+#include <sys/time.h>
+#include <sys/times.h>
+#include <sys/utsname.h>
+#include <sys/wait.h>
+#include <syslog.h>
+#include <termios.h>
+#include <time.h>
+#include <unistd.h>
+#include <utime.h>
+
+// Posix networking
+
+#include <arpa/inet.h>
+#include <netdb.h>
+#include <net/if.h>
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+#include <poll.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+
+// Internationalization support (also in POSIX and LSB)
+
+#include <locale.h>
+#include <wchar.h>
+#include <wctype.h>
+
+// LSB 4.1 headers
+#include <pty.h>
+#include <sys/ioctl.h>
+#include <sys/statfs.h>
+#include <sys/sysinfo.h>
+
+#include "lib/lib.h"
+#include "lib/lsm.h"
+#include "lib/toyflags.h"
+
+// Get list of function prototypes for all enabled command_main() functions.
+
+#define NEWTOY(name, opts, flags) void name##_main(void);
+#define OLDTOY(name, oldname, flags) void oldname##_main(void);
+#include "newtoys.h"
+#include "flags.h"
+#include "globals.h"
+#include "tags.h"
+
+// These live in main.c
+
+struct toy_list *toy_find(char *name);
+void toy_init(struct toy_list *which, char *argv[]);
+void toy_exec(char *argv[]);
+
+// Array of available commands
+
+extern struct toy_list {
+ char *name;
+ void (*toy_main)(void);
+ char *options;
+ int flags;
+} toy_list[];
+
+// Global context shared by all commands.
+
+extern struct toy_context {
+ struct toy_list *which; // Which entry in toy_list is this one?
+ char **argv; // Original command line arguments
+ char **optargs; // Arguments left over from get_optflags()
+ unsigned long long optflags; // Command line option flags from get_optflags()
+ int optc; // Count of optargs
+ int old_umask; // Old umask preserved by TOYFLAG_UMASK
+ short toycount; // Total number of commands in this build
+ short signal; // generic_signal() records what signal it saw here
+ int signalfd; // and writes signal to this fd, if set
+ char exitval; // Value error_exit feeds to exit()
+ char wasroot; // dropped setuid
+
+ // This is at the end so toy_init() doesn't zero it.
+ jmp_buf *rebound; // longjmp here instead of exit when do_rebound set
+ struct arg_list *xexit; // atexit() functions for xexit(), set by sigatexit()
+ void *stacktop; // nested toy_exec() call count, or 0 if vforked
+} toys;
+
+// Two big temporary buffers: one for use by commands, one for library functions
+
+extern char toybuf[4096], libbuf[4096];
+
+extern char **environ;
+
+#define GLOBALS(...)
+#define ARRAY_LEN(array) (sizeof(array)/sizeof(*array))
+#define TAGGED_ARRAY(X, ...) {__VA_ARGS__}