suckless unix tools https://core.suckless.org/sbase
Go to file
Michael Forney e6b6f34506 find: Fix buffer overflow in token stack
The stack is used for two purposes: storing operators for the
shunting yard algorithm, and storing primitives when arranging the
operators into a tree. The number of operators is bounded by the
number of arguments, since we only insert at most one extra operator
per primitive. However, the number of primitives may be as high as
argc + 1, since -print may have been added implicitly.

This can triggered with an empty expression, `find .`, since in
this case argc is 0, but we still try to store -print in the stack.

Detected with musl's WIP allocator, mallocng-draft.
2020-05-12 20:01:43 -07:00
libutf paste: Support -d '\0' 2020-04-15 16:11:12 -07:00
libutil libutil/recurse: Use a single path buffer, and directory fd 2020-03-05 00:45:53 -08:00
.gitignore Add implementation of dd(1) 2020-05-12 19:58:21 -07:00
arg.h arg.h: fixed argv checks order 2016-02-20 08:23:57 +00:00
basename.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
basename.c basename: support -- 2018-07-07 12:16:11 +01:00
cal.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
cal.c cal: Centre month and year above calendar 2019-04-28 14:10:38 -07:00
cat.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
cat.c concat: Use plain read/write instead of buffered stdio 2017-07-14 07:50:47 +02:00
chgrp.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
chgrp.c libutil/recurse: Use a single path buffer, and directory fd 2020-03-05 00:45:53 -08:00
chmod.1 chmod: Remove -HLP flags, and ignore symlinks during traversal 2020-03-05 00:45:44 -08:00
chmod.c libutil/recurse: Use a single path buffer, and directory fd 2020-03-05 00:45:53 -08:00
chown.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
chown.c libutil/recurse: Use a single path buffer, and directory fd 2020-03-05 00:45:53 -08:00
chroot.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
chroot.c Revert "Do not use arg.h for tools which take no flags" 2019-06-29 18:33:48 -07:00
cksum.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
cksum.c Revert "Do not use arg.h for tools which take no flags" 2019-06-29 18:33:48 -07:00
cmp.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
cmp.c No need for semicolon after ARGEND 2015-11-01 10:18:55 +00:00
cols.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
cols.c Use the UTF8_POINT macro in cols(1) 2016-03-10 08:48:09 +00:00
comm.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
comm.c Rename struct linebufline to struct line and add linecmp() 2016-03-10 08:48:09 +00:00
compat.h Add compat.h 2014-11-17 15:46:28 +00:00
config.mk Use -D_FILE_OFFSET_BITS=64 by default 2015-11-13 11:01:00 +00:00
cp.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
cp.c cp: Default to -P when -R is specified 2019-12-21 21:26:19 -08:00
cron.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
cron.c Sync cron with latest scron 2015-11-06 11:01:00 +00:00
crypt.h Don't use buffered IO (fread) when not appropriate 2017-07-03 21:04:14 +02:00
cut.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
cut.c Support NUL containing lines in cut(1) 2016-03-10 08:48:09 +00:00
date.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
date.c date: Fix default format string 2019-04-12 19:40:34 -07:00
dd.1 Add implementation of dd(1) 2020-05-12 19:58:21 -07:00
dd.c Add implementation of dd(1) 2020-05-12 19:58:21 -07:00
dirname.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
dirname.c dirname: support -- 2018-07-07 12:16:15 +01:00
du.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
du.c libutil/recurse: Use a single path buffer, and directory fd 2020-03-05 00:45:53 -08:00
echo.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
echo.c Handle { NULL } argv[] properly in manual arg-reduction 2017-08-05 23:50:39 +02:00
ed.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
ed.c Add a bugs section to TODO 2020-04-05 20:02:15 -07:00
env.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
env.c env: Check unsetenv() return value 2015-11-06 10:52:49 +00:00
expand.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
expand.c No need for semicolon after ARGEND 2015-11-01 10:18:55 +00:00
expr.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
expr.c expr: Allocate arrays with reallocarray instead of VLA 2019-04-16 17:44:08 -07:00
false.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
false.c Simplify true(1) and false(1) 2014-10-03 00:03:08 +01:00
find.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
find.c find: Fix buffer overflow in token stack 2020-05-12 20:01:43 -07:00
flock.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
flock.c flock: Check for waitpid() error 2015-12-21 14:13:36 +00:00
fold.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
fold.c Support NUL containing lines in fold(1) and reuse the line-buffer(!) 2016-03-10 08:48:09 +00:00
fs.h libutil/recurse: Use a single path buffer, and directory fd 2020-03-05 00:45:53 -08:00
getconf.1 getconf: Report invalid variables as errors 2017-09-03 17:23:28 -07:00
getconf.c getconf: Add an explicit return at the end of main 2020-03-01 16:40:01 -08:00
getconf.sh getconf.sh: remove unnecessary use of cat(1) 2020-03-01 16:47:15 -08:00
grep.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
grep.c grep: Fix exit status on use of -l 2019-05-20 12:38:54 -07:00
head.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
head.c Support NUL containing lines in head(1) 2016-03-10 08:48:09 +00:00
hostname.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
hostname.c Revert "Do not use arg.h for tools which take no flags" 2019-06-29 18:33:48 -07:00
join.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
join.c Support NUL containing lines in join(1) 2016-03-10 08:48:09 +00:00
kill.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
kill.c Handle { NULL } argv[] properly in manual arg-reduction 2017-08-05 23:50:39 +02:00
LICENSE ed: Don't match against line 0 in search() 2016-12-27 12:28:36 +01:00
link.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
link.c Revert "Do not use arg.h for tools which take no flags" 2019-06-29 18:33:48 -07:00
ln.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
ln.c ln: Only fail if same inode without -f flag 2016-07-09 10:17:16 +01:00
logger.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
logger.c No need for semicolon after ARGEND 2015-11-01 10:18:55 +00:00
logname.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
logname.c Handle { NULL } argv[] properly in manual arg-reduction 2017-08-05 23:50:39 +02:00
ls.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
ls.c ls, tar: Guard inclusion of sys/sysmacros.h by absence of major definition 2019-08-05 14:38:32 -07:00
Makefile Add implementation of dd(1) 2020-05-12 19:58:21 -07:00
md5.h Add crypt.[ch] and update md5sum and sha1sum 2013-07-18 09:51:17 -04:00
md5sum.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
md5sum.c *sum: Ignore -b and -t flags 2020-03-05 00:45:53 -08:00
mkdir.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
mkdir.c mkdir: Fix created directory permissions 2017-07-03 21:03:11 +02:00
mkfifo.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
mkfifo.c mkfifo: Simplify -m handling 2019-06-13 13:45:37 -07:00
mknod.1 mknod: Add support for making FIFOs 2020-03-01 16:33:18 -08:00
mknod.c mknod: Add support for making FIFOs 2020-03-01 16:33:18 -08:00
mktemp.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
mktemp.c No need for semicolon after ARGEND 2015-11-01 10:18:55 +00:00
mv.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
mv.c libutil/recurse: Use a single path buffer, and directory fd 2020-03-05 00:45:53 -08:00
nice.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
nice.c Check if PRIO_MIN and PRIO_MAX are defined 2015-12-15 17:05:21 +00:00
nl.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
nl.c Support NUL containing lines in nl(1) and reuse the line-buffer(!) 2016-03-10 08:48:09 +00:00
nohup.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
nohup.c Revert "Do not use arg.h for tools which take no flags" 2019-06-29 18:33:48 -07:00
od.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
od.c od: For the 'c' type, format non-printable charecters as octal 2018-02-25 23:01:57 -08:00
paste.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
paste.c paste: Minor style tweaks 2020-04-15 16:13:22 -07:00
pathchk.1 Fix pathchk manpage regarding exit status 2016-02-11 10:09:38 +00:00
pathchk.c Remove unnecessary ';' after ARGEND 2019-06-29 18:39:07 -07:00
printenv.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
printenv.c Revert "Do not use arg.h for tools which take no flags" 2019-06-29 18:33:48 -07:00
printf.1 Change the note in printf.1 on octal escapes 2016-02-21 08:52:48 +00:00
printf.c printf: handle \0 in %b arguments 2016-12-27 13:25:38 +01:00
pwd.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
pwd.c No need for semicolon after ARGEND 2015-11-01 10:18:55 +00:00
queue.h Use queue.h in grep(1) 2014-11-16 12:39:15 +00:00
readlink.1 readlink: Remove broken support for -m and -e 2015-11-16 16:30:19 +00:00
readlink.c readlink: Remove broken support for -m and -e 2015-11-16 16:30:19 +00:00
README Import mknod from ubase 2020-03-01 16:33:11 -08:00
renice.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
renice.c Cleanup usage() across sbase 2015-12-21 18:07:25 +00:00
rev.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
rev.c Add rev(1) 2016-12-27 11:35:27 +01:00
rm.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
rm.c libutil/recurse: Use a single path buffer, and directory fd 2020-03-05 00:45:53 -08:00
rmdir.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
rmdir.c No need for semicolon after ARGEND 2015-11-01 10:18:55 +00:00
sed.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
sed.c sed: Include filename in error message 2020-02-20 21:49:11 -08:00
seq.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
seq.c Cleanup usage() across sbase 2015-12-21 18:07:25 +00:00
setsid.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
setsid.c Revert "Do not use arg.h for tools which take no flags" 2019-06-29 18:33:48 -07:00
sha1.h Add crypt.[ch] and update md5sum and sha1sum 2013-07-18 09:51:17 -04:00
sha1sum.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
sha1sum.c *sum: Ignore -b and -t flags 2020-03-05 00:45:53 -08:00
sha224.h add sha224sum and sha384sum 2016-02-24 10:15:16 +00:00
sha224sum.1 add sha224sum and sha384sum 2016-02-24 10:15:16 +00:00
sha224sum.c *sum: Ignore -b and -t flags 2020-03-05 00:45:53 -08:00
sha256.h Add sha256sum(1) 2013-07-20 13:20:16 -04:00
sha256sum.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
sha256sum.c *sum: Ignore -b and -t flags 2020-03-05 00:45:53 -08:00
sha384.h add sha224sum and sha384sum 2016-02-24 10:15:16 +00:00
sha384sum.1 add sha224sum and sha384sum 2016-02-24 10:15:16 +00:00
sha384sum.c *sum: Ignore -b and -t flags 2020-03-05 00:45:53 -08:00
sha512-224.h add sha512-224sum (SHA512/224) and sha512-256sum (SHA512/256) 2016-02-24 10:40:57 +00:00
sha512-224sum.1 add sha512-224sum (SHA512/224) and sha512-256sum (SHA512/256) 2016-02-24 10:40:57 +00:00
sha512-224sum.c *sum: Ignore -b and -t flags 2020-03-05 00:45:53 -08:00
sha512-256.h add sha512-224sum (SHA512/224) and sha512-256sum (SHA512/256) 2016-02-24 10:40:57 +00:00
sha512-256sum.1 add sha512-224sum (SHA512/224) and sha512-256sum (SHA512/256) 2016-02-24 10:40:57 +00:00
sha512-256sum.c *sum: Ignore -b and -t flags 2020-03-05 00:45:53 -08:00
sha512.h Add sha512sum(1) 2013-08-04 11:00:34 -04:00
sha512sum.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
sha512sum.c *sum: Ignore -b and -t flags 2020-03-05 00:45:53 -08:00
sleep.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
sleep.c Revert "Do not use arg.h for tools which take no flags" 2019-06-29 18:33:48 -07:00
sort.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
sort.c sort: Don't do fallback top-level sort in check mode 2020-01-03 15:42:33 -08:00
split.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
split.c Fix type mismatch in split(1) 2015-11-26 10:35:46 +00:00
sponge.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
sponge.c Revert "Do not use arg.h for tools which take no flags" 2019-06-29 18:33:48 -07:00
strings.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
strings.c No need for semicolon after ARGEND 2015-11-01 10:18:55 +00:00
sync.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
sync.c Revert "Do not use arg.h for tools which take no flags" 2019-06-29 18:33:48 -07:00
tail.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
tail.c tail: Process bytes with -c option, and add -m option for runes 2017-07-14 07:50:54 +02:00
tar.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
tar.c libutil/recurse: Use a single path buffer, and directory fd 2020-03-05 00:45:53 -08:00
tee.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
tee.c Don't use buffered IO (fread) when not appropriate 2017-07-03 21:04:14 +02:00
test.1 Update test.1: 2016-04-20 22:57:40 +01:00
test.c Handle { NULL } argv[] properly in manual arg-reduction 2017-08-05 23:50:39 +02:00
text.h concat: Use plain read/write instead of buffered stdio 2017-07-14 07:50:47 +02:00
tftp.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
tftp.c Include sys/time.h for timeval structure 2015-11-13 11:32:11 +00:00
time.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
time.c Fix type mismatches 2015-11-26 10:35:46 +00:00
TODO Add a bugs section to TODO 2020-04-05 20:02:15 -07:00
touch.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
touch.c touch: Avoid unnecessary call to stat 2016-07-09 10:17:16 +01:00
tr.1 tr.1: Make note of some changes in the utility 2016-10-05 21:42:24 +02:00
tr.c tr: Fix infinite loop 2017-10-21 12:44:09 -07:00
true.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
true.c Simplify true(1) and false(1) 2014-10-03 00:03:08 +01:00
tsort.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
tsort.c Remove unnecessary ';' after ARGEND 2019-06-29 18:39:07 -07:00
tty.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
tty.c Revert "Do not use arg.h for tools which take no flags" 2019-06-29 18:33:48 -07:00
uname.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
uname.c uname: check that no operands are specified 2018-09-24 13:04:06 -07:00
unexpand.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
unexpand.c No need for semicolon after ARGEND 2015-11-01 10:18:55 +00:00
uniq.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
uniq.c uniq: always store previous line length 2016-03-11 15:38:36 +00:00
unlink.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
unlink.c Revert "Do not use arg.h for tools which take no flags" 2019-06-29 18:33:48 -07:00
utf.h paste: Support -d '\0' 2020-04-15 16:11:12 -07:00
util.h libutil: Rename functions in reserved namespace to prevent potential conflict 2019-05-20 16:56:07 -07:00
uudecode.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
uudecode.c Revert "fix length after '\' getline string termination" 2016-03-01 15:24:32 +00:00
uuencode.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
uuencode.c uuencode: style: just use pointer *b 2016-03-01 15:24:32 +00:00
wc.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
wc.c wc: Removing output padding 2019-12-21 20:19:08 -08:00
which.1 Use ISO-date-format in manpages 2015-10-08 17:15:08 +02:00
which.c which: check AT_EACCESS 2019-07-30 07:40:35 -07:00
whoami.1 Add whoami(1) 2015-12-14 10:14:07 +00:00
whoami.c Handle { NULL } argv[] properly in manual arg-reduction 2017-08-05 23:50:39 +02:00
xargs.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
xargs.c Cleanup usage() across sbase 2015-12-21 18:07:25 +00:00
xinstall.1 Fix various lint warnings in manuals 2020-03-01 15:32:11 -08:00
xinstall.c install: Remove special handling for non-regular files 2020-03-21 12:27:00 -07:00
yes.1 yes: Simplify, only support one argument 2019-10-31 18:14:18 -07:00
yes.c yes: Simplify, only support one argument 2019-10-31 18:14:18 -07:00

sbase - suckless unix tools
===========================

sbase is a collection of unix tools that are inherently portable across
UNIX and UNIX-like systems.

The complement of sbase is ubase[1] which is Linux-specific and provides
all the non-portable tools. Together they are intended to form a base
system similar to busybox but much smaller and suckless.

Building
--------

To build sbase, simply type make. You may have to fiddle with config.mk
depending on your system.

You can also build sbase-box, which generates a single binary containing
all the required tools. You can then symlink the individual tools to
sbase-box or run: make sbase-box-install

Ideally you will want to statically link sbase. If you are on Linux we
recommend using musl-libc[2].

Portability
-----------

sbase has been compiled on a variety of different operating systems,
including Linux, *BSD, OSX, Haiku, Solaris, SCO OpenServer and others.

Various combinations of operating systems and architectures have also
been built.

You can build sbase with gcc, clang, tcc, nwcc and pcc.

Status
------

The following tools are implemented:

'#'  -> UTF-8 support, '=' -> Implicit UTF-8 support, '*' -> Finished,
'|'  -> Audited,       'o' -> POSIX 2013 compliant,   'x' -> Non-POSIX,
'0'  -> NUL handling,  '()' -> Petty flag

      UTILITY         MISSING
      -------         -------
0=*|o basename        .
0=*|o cal             .
0=*|o cat             .
0=*|o chgrp           .
0=*|o chmod           .
0=*|o chown           .
0=*|x chroot          .
0=*|o cksum           .
0=*|o cmp             .
0#*|x cols            .
0=*|o comm            .
0=*|o cp              (-i)
0=*|x cron            .
0#*|o cut             .
0=*|o date            .
0=*|o dirname         .
0=*|o du              .
0=*|o echo            .
    o ed              .
0=*|o env             .
0#*|o expand          .
0#*|o expr            .
0=*|o false           .
0=    find            .
0=* x flock           .
0#*|o fold            .
0=*|o getconf         (-v)
 =*|o grep            .
0=*|o head            .
0=*|x hostname        .
0=*|x install         .
0=* o join            .
0=*|o kill            .
0=*|o link            .
0=*|o ln              .
0=*|o logger          .
0=*|o logname         .
0#* o ls              (-C, -k, -m, -p, -s, -x)
0=*|x md5sum          .
0=*|o mkdir           .
0=*|o mkfifo          .
0=*|x mknod           .
0=*|x mktemp          .
0=*|o mv              (-i)
0=*|o nice            .
0#*|o nl              .
0=*|o nohup           .
0=*|o od              .
0#* o pathchk         .
 #*|o paste           .
0=*|x printenv        .
0#*|o printf          .
0=*|o pwd             .
0=*|x readlink        .
0=*|o renice          .
0#* x rev             .
0=*|o rm              (-i)
0=*|o rmdir           .
 #    sed             .
0=*|x seq             .
0=*|x setsid          .
0=*|x sha1sum         .
0=* x sha224sum       .
0=*|x sha256sum       .
0=* x sha238sum       .
0=*|x sha512sum       .
0=* x sha512-224sum   .
0=* x sha512-256sum   .
0=*|o sleep           .
0#*|o sort            .
0=*|o split           .
0=*|x sponge          .
0#*|o strings         .
0=*|x sync            .
0=*|o tail            .
0=*|x tar             .
0=*|o tee             .
0=*|o test            .
0=*|x tftp            .
0=*|o time            .
0=*|o touch           .
0#*|o tr              .
0=*|o true            .
0=* o tsort           .
0=*|o tty             .
0=*|o uname           .
0#*|o unexpand        .
0=*|o uniq            .
0=*|o unlink          .
0=*|o uudecode        .
0=*|o uuencode        .
0#*|o wc              .
0=*|x which           .
0=*|x whoami          .
0=*|o xargs           (-p)
0=*|x yes             .

[1] http://git.suckless.org/ubase/
[2] http://www.musl-libc.org/