suckless unix tools
Go to file
FRIGN 99ded174b2 Audit test(1)
Only add empty lines before returns, everything else is ok.
Also add the STANDARDS-section to the manpage, which was only
present as a heading until now.
2015-03-17 23:35:11 +01:00
libutf
libutil Add estrlcat() and estrlcpy() 2015-03-17 11:24:49 +01:00
LICENSE
Makefile Remove mallocarray(...) and use reallocarray(NULL, ...) 2015-03-11 10:50:18 +01:00
README Audit test(1) 2015-03-17 23:35:11 +01:00
TODO
arg.h
basename.1
basename.c
cal.1 Audit cal(1) 2015-03-08 21:28:32 +01:00
cal.c style: document intentional fallthrough 2015-03-09 00:33:13 +01:00
cat.1
cat.c Small style-fix in cat.c 2015-03-16 10:36:36 +01:00
chgrp.1 Audit chgrp(1) 2015-03-08 23:31:59 +01:00
chgrp.c Add history and config-struct to recurse 2015-03-13 00:29:48 +01:00
chmod.1
chmod.c Fix argument parsing in test(1) and chmod(1) 2015-03-13 23:50:09 +01:00
chown.1 Audit chown(1) 2015-03-09 00:42:23 +01:00
chown.c Fix argument parsing in test(1) and chmod(1) 2015-03-13 23:50:09 +01:00
chroot.1
chroot.c Don't return but _exit after failed exec*() and fork() 2015-03-09 01:12:59 +01:00
cksum.1
cksum.c cksum: Report exit status properly 2015-03-11 12:35:29 +00:00
cmp.1
cmp.c Print usage() when -l and -s are both given in cmp(1) 2015-03-11 13:31:08 +01:00
col.1 col.1: convert to mandoc 2015-03-07 13:56:13 +01:00
col.c Remove mallocarray(...) and use reallocarray(NULL, ...) 2015-03-11 10:50:18 +01:00
cols.1 Audit cols(1) 2015-03-08 19:49:59 +01:00
cols.c Audit cols(1) 2015-03-08 19:49:59 +01:00
comm.1
comm.c Audit comm(1) 2015-03-11 13:47:08 +01:00
compat.h
config.mk
cp.1
cp.c
cron.1
cron.c Use switch with fork() 2015-03-09 15:01:29 +01:00
crypt.h
cut.1
cut.c Audit cut(1) 2015-03-11 17:29:18 +01:00
date.1
date.c
dirname.1
dirname.c
du.1
du.c Add history and config-struct to recurse 2015-03-13 00:29:48 +01:00
echo.1
echo.c
env.1
env.c Don't return but _exit after failed exec*() and fork() 2015-03-09 01:12:59 +01:00
expand.1 Audit expand(1) 2015-03-13 00:38:29 +01:00
expand.c Audit expand(1) 2015-03-13 00:38:29 +01:00
expr.1
expr.c untypedef expr, find, test, as is existing style in sbase 2015-03-17 20:04:26 +00:00
false.1
false.c
find.1
find.c untypedef expr, find, test, as is existing style in sbase 2015-03-17 20:04:26 +00:00
fold.1 Audit fold(1) 2015-03-13 23:50:09 +01:00
fold.c Rewrite foldline() in fold(1) 2015-03-16 19:26:42 +01:00
fs.h Add history and config-struct to recurse 2015-03-13 00:29:48 +01:00
grep.1
grep.c grep, kill, renice, sort: style: put main at bottom 2015-03-08 12:51:33 +01:00
head.1 Remove judging word from head.1 and tail.1 as well 2015-03-13 23:54:13 +01:00
head.c
hostname.1
hostname.c
kill.1 Audit kill(1) 2015-03-16 12:37:46 +01:00
kill.c Audit kill(1) 2015-03-16 12:37:46 +01:00
link.1
link.c
ln.1
ln.c
logger.1
logger.c Add estrlcat() and estrlcpy() 2015-03-17 11:24:49 +01:00
logname.1
logname.c Audit logname(1) 2015-03-17 00:44:18 +01:00
ls.1
ls.c Remove mallocarray(...) and use reallocarray(NULL, ...) 2015-03-11 10:50:18 +01:00
md5.h
md5sum.1
md5sum.c
mkdir.1
mkdir.c Three bugfixes in mkdir(1) 2015-03-13 12:23:22 +01:00
mkfifo.1
mkfifo.c
mktemp.1
mktemp.c Add estrlcat() and estrlcpy() 2015-03-17 11:24:49 +01:00
mv.1
mv.c Add history and config-struct to recurse 2015-03-13 00:29:48 +01:00
nice.1
nice.c Don't return but _exit after failed exec*() and fork() 2015-03-09 01:12:59 +01:00
nl.1 nl: add -l option 2015-03-10 12:55:06 +00:00
nl.c nl: add -l option 2015-03-10 12:55:06 +00:00
nohup.1
nohup.c Don't return but _exit after failed exec*() and fork() 2015-03-09 01:12:59 +01:00
paste.1
paste.c Audit paste(1) 2015-03-17 21:34:38 +01:00
printenv.1
printenv.c
printf.1
printf.c Audit printf(1) 2015-03-17 21:43:01 +01:00
pwd.1
pwd.c
queue.h
readlink.1
readlink.c Add estrlcat() and estrlcpy() 2015-03-17 11:24:49 +01:00
renice.1 Audit renice(1) 2015-03-17 22:15:09 +01:00
renice.c Audit renice(1) 2015-03-17 22:15:09 +01:00
rm.1
rm.c Add history and config-struct to recurse 2015-03-13 00:29:48 +01:00
rmdir.1
rmdir.c
sed.1
sed.c Add estrlcat() and estrlcpy() 2015-03-17 11:24:49 +01:00
seq.1
seq.c
setsid.1
setsid.c fork: no need to _exit() on the error case 2015-03-10 20:05:18 +01:00
sha1.h
sha1sum.1
sha1sum.c
sha256.h
sha256sum.1
sha256sum.c
sha512.h
sha512sum.1
sha512sum.c
sleep.1
sleep.c
sort.1
sort.c grep, kill, renice, sort: style: put main at bottom 2015-03-08 12:51:33 +01:00
split.1 Audit split(1) 2015-03-17 22:59:48 +01:00
split.c Audit split(1) 2015-03-17 22:59:48 +01:00
sponge.1
sponge.c
strings.1
strings.c Audit strings(1) 2015-03-17 23:05:50 +01:00
sync.1
sync.c
tail.1 Audit tail(1) 2015-03-17 23:24:43 +01:00
tail.c Audit tail(1) 2015-03-17 23:24:43 +01:00
tar.1
tar.c Add history and config-struct to recurse 2015-03-13 00:29:48 +01:00
tee.1
tee.c
test.1 Audit test(1) 2015-03-17 23:35:11 +01:00
test.c Audit test(1) 2015-03-17 23:35:11 +01:00
text.h
time.1
time.c fork: no need to _exit() on the error case 2015-03-10 20:05:18 +01:00
touch.1 Add proper d- and t-flag support to touch(1) 2015-02-19 18:54:56 +01:00
touch.c
tr.1
tr.c Remove mallocarray(...) and use reallocarray(NULL, ...) 2015-03-11 10:50:18 +01:00
true.1
true.c
tty.1
tty.c
uname.1
uname.c
unexpand.1
unexpand.c Implement reallocarray() 2015-03-10 21:23:36 +01:00
uniq.1
uniq.c uniq: optimization: reuse the prevline buffer 2015-03-08 14:50:46 +01:00
unlink.1
unlink.c
utf.h
util.h Add estrlcat() and estrlcpy() 2015-03-17 11:24:49 +01:00
uudecode.1
uudecode.c
uuencode.1
uuencode.c
wc.1
wc.c
xargs.1
xargs.c fork: no need to _exit() on the error case 2015-03-10 20:05:18 +01:00
yes.1
yes.c

README

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

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

The following tools are implemented ('*' == finished, '#' == UTF-8 support,
'=' == implicit UTF-8 support, '|' == audited):

    UTILITY         POSIX 2008 COMPLIANT         MISSING OPTIONS
    -------         --------------------         ---------------
=*| basename        yes                          none
=*| cal             yes                          none
=*| cat             yes                          none
=*| chgrp           yes                          none
=*| chmod           yes                          none
=*| chown           yes                          none
=*| chroot          non-posix                    none
=*| cksum           yes                          none
=*| cmp             yes                          none
#*| cols            non-posix                    none
    col             yes                          none
=*| comm            yes                          none
=*| cp              yes                          none (-i)
=*| cron            non-posix                    none
#*| cut             yes                          none
=*| date            yes                          none
=*| dirname         yes                          none
=*| du              yes                          none
=*| echo            yes                          none
=*| env             yes                          none
#*| expand          yes                          none
#*  expr            yes                          none
=*| false           yes                          none
=   find            yes                          none
#*| fold            yes                          none
=*  grep            yes                          none
=*| head            yes                          none
=*| hostname        non-posix                    none
=*| kill            yes                          none
=*| link            yes                          none
=*| ln              yes                          none
=*| logger          yes                          none
=*| logname         yes                          none
=   ls              no                           (-C), -S, -f, -m, -s, -x
=*| md5sum          non-posix                    none
=*| mkdir           yes                          none
=*| mkfifo          yes                          none
=*| mktemp          non-posix                    none
=*| mv              yes                          none (-i)
=*| nice            yes                          none
=   nl              no                           -d, -f, -h, -p
=*| nohup           yes                          none
#*| paste           yes                          none
=*| printenv        non-posix                    none
#*| printf          yes                          none
=*| pwd             yes                          none
=   readlink        non-posix                    none
=*| renice          yes                          none
=*| rm              yes                          none (-i)
=*| rmdir           yes                          none
#   sed
    seq             non-posix                    none
=*| setsid          non-posix                    none
=*| sha1sum         non-posix                    none
=*| sha256sum       non-posix                    none
=*| sha512sum       non-posix                    none
=*| sleep           yes                          none
    sort            no                           -m, -o, -d, -f, -i
=*| split           yes                          none
=*| sponge          non-posix                    none
#*| strings         yes                          none
=*| sync            non-posix                    none
=*| tail            yes                          none
=*  tar             non-posix                    none
=*| tee             yes                          none
=*| test            yes                          none
=*| time            yes                          none
=*  touch           yes                          none
#*  tr              yes                          none
=*| true            yes                          none
=*| tty             yes                          none
=*| uname           yes                          none
#*  unexpand        yes                          none
=*  uniq            yes                          none
=*| unlink          yes                          none
=*  uudecode        yes                          none
=*  uuencode        yes                          none
#*  wc              yes                          none
=   xargs           no                           -I, -L, -p, -s, -t, -x
=*| yes             non-posix                    none

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.

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