Mirror of Suckless' sbase (git://git.suckless.org/sbase)
Go to file
FRIGN 3ccfa1877d Don't print section-control-lines as empty lines in nl(1)
GNU coreutils may behave this way, but one can think of these lines
as consumed control lines.
Fuck GNU!
2015-03-22 17:38:22 +01:00
libutf Add mkrunetype.awk 2015-02-23 20:36:47 +01:00
libutil Audit tar(1), add DIRFIRST-flag to recurse() 2015-03-21 01:30:47 +01:00
arg.h ARGNUMF() only works on base 10 as it uses strtonum underneath 2015-01-30 16:45:44 +00:00
basename.1 Refactor basename.1 2015-02-28 15:09:47 +01:00
basename.c Fix broken sbase-box due to multiple definitions of usage 2015-02-28 18:33:33 +00:00
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 Audit cat(1) 2015-03-02 00:39:26 +01:00
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 Refactor recurse() again 2015-03-19 01:08:19 +01:00
chmod.1 Audit chmod(1) 2015-03-05 19:08:28 +01:00
chmod.c Refactor recurse() again 2015-03-19 01:08:19 +01:00
chown.1 Audit chown(1) 2015-03-09 00:42:23 +01:00
chown.c Refactor recurse() again 2015-03-19 01:08:19 +01:00
chroot.1 Finish up chroot(1) and md5sum(1) 2015-01-31 23:54:51 +01:00
chroot.c Don't return but _exit after failed exec*() and fork() 2015-03-09 01:12:59 +01:00
cksum.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
cksum.c cksum: Report exit status properly 2015-03-11 12:35:29 +00:00
cmp.1 Refactor cmp(1) code and manpage 2015-02-07 21:05:33 +01:00
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 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
comm.c Audit comm(1) 2015-03-11 13:47:08 +01:00
compat.h Add compat.h 2014-11-17 15:46:28 +00:00
config.mk Add info about NetBSD to config.mk 2015-02-20 16:24:17 +00:00
cp.1 Audit cp(1) 2015-03-02 19:15:19 +01:00
cp.c Audit cp() in libutil 2015-03-19 17:57:12 +01:00
cron.1 cron.1: path macro for /etc/crontab 2015-02-06 15:43:23 +01:00
cron.c Use switch with fork() 2015-03-09 15:01:29 +01:00
crypt.h Refactor cryptcheck() to allow multiple list-files and stdin 2015-03-01 22:51:52 +01:00
cut.1 man pages: fix some typos 2015-02-01 21:28:17 +01:00
cut.c Audit cut(1) 2015-03-11 17:29:18 +01:00
date.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
date.c Audit date(1) 2015-03-02 15:12:19 +01:00
dirname.1 Audit dirname(1) 2015-02-28 19:51:07 +01:00
dirname.c Audit dirname(1) 2015-02-28 19:51:07 +01:00
du.1 Update manpage for du(1) 2015-02-18 20:42:23 +00:00
du.c Refactor recurse() again 2015-03-19 01:08:19 +01:00
echo.1 Audit echo(1) 2015-02-28 20:16:10 +01:00
echo.c Make already audited tools argv-centric instead of argc-centric 2015-03-02 14:19:26 +01:00
env.1 Audit env(1) 2015-03-02 14:53:24 +01:00
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 Add periods in expr.1 2015-02-10 00:34:47 +01:00
expr.c Audit expr(1) 2015-03-22 14:35:15 +01:00
false.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
false.c Simplify true(1) and false(1) 2014-10-03 00:03:08 +01:00
find.1 add find.1, sed.1, time.1 stubs 2015-02-28 13:46:20 +01:00
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 Audit tar(1), add DIRFIRST-flag to recurse() 2015-03-21 01:30:47 +01:00
grep.1 man pages: improve consistency 2015-02-01 20:52:28 +01:00
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 Small fix in head.c 2015-03-06 00:32:22 +01:00
hostname.1 Audit hostname(1) 2015-02-28 21:22:55 +01:00
hostname.c Audit hostname(1) 2015-02-28 21:22:55 +01:00
kill.1 Audit kill(1) 2015-03-16 12:37:46 +01:00
kill.c kill: No need for const int 2015-03-19 10:45:58 +00:00
LICENSE nl: add -d -p -f -h options 2015-03-19 10:10:55 +00:00
link.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
link.c Audit unlink(1) 2015-02-28 20:05:22 +01:00
ln.1 Audit ln(1) 2015-03-05 21:14:43 +01:00
ln.c Audit ln(1) 2015-03-05 21:14:43 +01:00
logger.1 Audit logger(1) 2015-03-07 00:10:22 +01:00
logger.c Add estrlcat() and estrlcpy() 2015-03-17 11:24:49 +01:00
logname.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
logname.c Audit logname(1) 2015-03-17 00:44:18 +01:00
ls.1 ls: add -f and -S options 2015-03-19 10:12:12 +00:00
ls.c ls: add -f and -S options 2015-03-19 10:12:12 +00:00
Makefile Remove apathmax() and implicitly agetcwd() 2015-03-18 15:20:35 +01:00
md5.h Add crypt.[ch] and update md5sum and sha1sum 2013-07-18 09:51:17 -04:00
md5sum.1 Update *sum(1)-manpages and mark them as finished and audited 2015-03-01 22:59:20 +01:00
md5sum.c Refactor cryptcheck() to allow multiple list-files and stdin 2015-03-01 22:51:52 +01:00
mkdir.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
mkdir.c Three bugfixes in mkdir(1) 2015-03-13 12:23:22 +01:00
mkfifo.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
mkfifo.c Audit mkfifo(1) 2015-03-02 17:25:29 +01:00
mktemp.1 Finish up printenv(1) 2015-02-01 00:23:38 +01:00
mktemp.c Add estrlcat() and estrlcpy() 2015-03-17 11:24:49 +01:00
mv.1 Audit mv(1) 2015-03-04 23:22:43 +01:00
mv.c Audit cp() in libutil 2015-03-19 17:57:12 +01:00
nice.1 Audit nice(1) 2015-03-02 16:53:13 +01:00
nice.c Don't return but _exit after failed exec*() and fork() 2015-03-09 01:12:59 +01:00
nl.1 Fix small typo in nl.1 2015-03-22 17:25:11 +01:00
nl.c Don't print section-control-lines as empty lines in nl(1) 2015-03-22 17:38:22 +01:00
nohup.1 Add EXIT STATUS to nohup.1 2015-03-05 00:27:36 +01:00
nohup.c Don't return but _exit after failed exec*() and fork() 2015-03-09 01:12:59 +01:00
paste.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
paste.c Audit paste(1) 2015-03-17 21:34:38 +01:00
printenv.1 Finish up printenv(1) 2015-02-01 00:23:38 +01:00
printenv.c Make already audited tools argv-centric instead of argc-centric 2015-03-02 14:19:26 +01:00
printf.1 Add printf(1) 2015-02-15 14:46:58 +01:00
printf.c Audit printf(1) 2015-03-17 21:43:01 +01:00
pwd.1 Audit pwd(1) 2015-03-03 17:24:14 +01:00
pwd.c Remove apathmax() and implicitly agetcwd() 2015-03-18 15:20:35 +01:00
queue.h Use queue.h in grep(1) 2014-11-16 12:39:15 +00:00
readlink.1 Audit readlink(1) 2015-03-20 22:14:31 +01:00
readlink.c Audit readlink(1) 2015-03-20 22:14:31 +01:00
README Audit nl(1) 2015-03-22 16:46:01 +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 Audit rm(1) 2015-02-28 21:31:23 +01:00
rm.c Refactor recurse() again 2015-03-19 01:08:19 +01:00
rmdir.1 Update rmdir.1 as well 2015-03-02 17:14:29 +01:00
rmdir.c Add argv0 to usage() in rmdir.c 2015-03-02 16:24:08 +01:00
sed.1 add find.1, sed.1, time.1 stubs 2015-02-28 13:46:20 +01:00
sed.c Add estrlcat() and estrlcpy() 2015-03-17 11:24:49 +01:00
seq.1 Audit seq(1) 2015-03-20 16:05:31 +01:00
seq.c Reorder variables in seq(1) 2015-03-20 16:37:29 +01:00
setsid.1 Finish up setsid(1) 2015-02-01 00:47:32 +01:00
setsid.c fork: no need to _exit() on the error case 2015-03-10 20:05:18 +01:00
sha1.h Add crypt.[ch] and update md5sum and sha1sum 2013-07-18 09:51:17 -04:00
sha1sum.1 Update *sum(1)-manpages and mark them as finished and audited 2015-03-01 22:59:20 +01:00
sha1sum.c Refactor cryptcheck() to allow multiple list-files and stdin 2015-03-01 22:51:52 +01:00
sha256.h Add sha256sum(1) 2013-07-20 13:20:16 -04:00
sha256sum.1 Update *sum(1)-manpages and mark them as finished and audited 2015-03-01 22:59:20 +01:00
sha256sum.c Refactor cryptcheck() to allow multiple list-files and stdin 2015-03-01 22:51:52 +01:00
sha512.h Add sha512sum(1) 2013-08-04 11:00:34 -04:00
sha512sum.1 Update *sum(1)-manpages and mark them as finished and audited 2015-03-01 22:59:20 +01:00
sha512sum.c Refactor cryptcheck() to allow multiple list-files and stdin 2015-03-01 22:51:52 +01:00
sleep.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
sleep.c Audit sleep(1) 2015-02-28 20:10:25 +01:00
sort.1 sort: minor manual page adjustments 2015-02-01 21:46:58 +01:00
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 Refactor sponge(1) code and manpage 2015-02-08 22:17:21 +01:00
sponge.c Audit sponge(1) 2015-03-01 23:42:16 +01:00
strings.1 chown.1, strings.1: fix date 2015-02-28 13:43:29 +01:00
strings.c Audit strings(1) 2015-03-17 23:05:50 +01:00
sync.1 Refactor sync(1) code and manpage 2015-02-08 22:08:14 +01:00
sync.c Add arg.h-handling to sync(1) and unlink(1) 2015-02-08 22:13:50 +01:00
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 Audit tar(1), add DIRFIRST-flag to recurse() 2015-03-21 01:30:47 +01:00
tar.c Show usage() when filtermode is given for tar-creation 2015-03-21 14:04:49 +01:00
tee.1 Audit tee(1) 2015-03-04 23:05:11 +01:00
tee.c Audit tee(1) 2015-03-04 23:05:11 +01:00
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 Use size_t for number of lines in linebuf 2015-01-31 22:49:43 +00:00
time.1 Add time(1) manpage 2015-03-05 00:22:36 +01:00
time.c fork: no need to _exit() on the error case 2015-03-10 20:05:18 +01:00
TODO Remove file(1) from TODO 2015-03-06 11:26:28 +00:00
touch.1 Audit touch(1) 2015-03-17 23:38:09 +01:00
touch.c Audit touch(1) 2015-03-17 23:38:09 +01:00
tr.1 Update escape-sequence information in tr.1 2015-02-15 14:56:49 +01:00
tr.c Audit tr(1) 2015-03-17 23:41:22 +01:00
true.1 man pages: improve consistency 2015-02-01 20:52:28 +01:00
true.c Simplify true(1) and false(1) 2014-10-03 00:03:08 +01:00
tty.1 Refactor tty(1) code and manpage 2015-02-07 22:00:28 +01:00
tty.c Audit tty(1) 2015-02-28 19:59:34 +01:00
uname.1 Refactor uname(1) code and manpage 2015-02-07 22:15:56 +01:00
uname.c Clean up #includes 2015-02-14 21:12:23 +01:00
unexpand.1 Refactor unexpand(1) code and manpage, adding tablist support 2015-02-08 21:24:22 +01:00
unexpand.c Audit unexpand(1) 2015-03-17 23:45:03 +01:00
uniq.1 Audit uniq(1) 2015-03-17 23:59:09 +01:00
uniq.c Audit uniq(1) 2015-03-17 23:59:09 +01:00
unlink.1 Refactor unlink(1) code and manpage 2015-02-08 21:59:59 +01:00
unlink.c Audit unlink(1) 2015-02-28 20:05:22 +01:00
utf.h Scrap chartorunearr(), introducing utftorunestr() 2015-02-11 21:32:09 +01:00
util.h Remove apathmax() and implicitly agetcwd() 2015-03-18 15:20:35 +01:00
uudecode.1 Audit uudecode(1) 2015-03-18 00:10:36 +01:00
uudecode.c Audit uudecode(1) 2015-03-18 00:10:36 +01:00
uuencode.1 Remove comma from uuencode.1 2015-03-18 00:18:28 +01:00
uuencode.c Audit uuencode(1) 2015-03-18 00:14:56 +01:00
wc.1 Audit wc(1) 2015-03-18 00:20:19 +01:00
wc.c Audit wc(1) 2015-03-18 00:20:19 +01:00
xargs.1 xargs.1: dont justify text, remove " " 2015-02-06 15:43:46 +01:00
xargs.c fork: no need to _exit() on the error case 2015-03-10 20:05:18 +01:00
yes.1 Finish up yes(1) by adding multiple string support 2015-02-01 02:13:47 +01:00
yes.c Make already audited tools argv-centric instead of argc-centric 2015-03-02 14:19:26 +01:00

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, () == petty flag):

    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                           none (-C, -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              yes                          none
=*| 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             yes                          none
=*| 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/