suckless unix tools https://core.suckless.org/sbase
Go to file
FRIGN 986a9de51a Add even stricter UTF-8-support to wc(1)
using readrune() and iswspace().
musl for instance doesn't differentiate between iswspace() and
isspace(), but when it does, the code will be ready.
It goes without saying that GNU coreutils don't use iswspace()[0].

[0]: http://git.savannah.gnu.org/gitweb/?p=coreutils.git;a=blob;f=src/wc.c
2015-02-01 04:06:06 +01:00
libutf Return number of bytes read even on a partial read 2015-02-01 03:54:56 +01:00
libutil Convert estrto{l, ul} to estrtonum 2015-01-30 16:52:44 +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 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
basename.c Fix comparison >= 0 is always true in basename(1) 2014-12-08 12:14:39 +00:00
cal.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
cal.c Convert cal(1) to strtonum 2015-01-30 16:01:37 +01:00
cat.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
cat.c read stdin if arg is exactly "-" not just begins with '-' 2014-11-18 21:53:37 +00:00
chgrp.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
chgrp.c chgrp: Only check errno if getgrnam() fails 2014-12-21 12:14:26 +00:00
chmod.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
chmod.c Add mandoc-manpage for chmod(1) 2015-01-17 21:59:37 +00:00
chown.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
chown.c Use < 0 instead of == -1 2014-11-19 20:09:29 +00:00
chroot.1 Finish up chroot(1) and md5sum(1) 2015-01-31 23:54:51 +01:00
chroot.c Finish up chroot(1) and md5sum(1) 2015-01-31 23:54:51 +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 Add mandoc-manpage for cksum(1) and clean up code 2015-01-17 23:09:41 +00:00
cmp.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
cmp.c cmp(1) is POSIX compliant so mention it in the manpage 2014-11-21 12:32:07 +00:00
cols.1 Finish up cols(1) 2015-02-01 00:55:22 +01:00
cols.c Adjust some limits to more flexibility for strtonum 2015-02-01 01:24:03 +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 Add mandoc-manpage for comm(1) and clean up code 2015-01-17 23:10:07 +00:00
compat.h Add compat.h 2014-11-17 15:46:28 +00:00
config.mk Import strcasestr() from musl and remove -D_GNU_SOURCE 2014-11-20 23:46:06 +00:00
cp.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
cp.c cp: Rename -d option to -P 2014-12-08 10:02:56 +00:00
cron.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
cron.c Rename crond to cron 2014-12-16 11:04:07 +00:00
crypt.h checksum tools: implement -c 2014-03-23 18:02:39 +00:00
cut.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
cut.c Add unescape() to libutil 2015-01-29 21:52:44 +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 Adjust some limits to more flexibility for strtonum 2015-02-01 01:24:03 +01:00
dirname.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
dirname.c Fix coding style 2014-11-13 18:08:43 +00:00
du.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
du.c Adjust some limits to more flexibility for strtonum 2015-02-01 01:24:03 +01:00
echo.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
echo.c Add mandoc-manpage for echo(1) 2015-01-23 23:49:24 +01:00
env.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
env.c Add mandoc-manpage for env(1) 2015-01-24 00:22:06 +01:00
expand.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
expand.c Adjust some limits to more flexibility for strtonum 2015-02-01 01:24:03 +01:00
expr.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
expr.c Relax with caps in usage 2015-01-25 18:31:25 +00: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
fold.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
fold.c Adjust some limits to more flexibility for strtonum 2015-02-01 01:24:03 +01:00
fs.h Fix return values in rm(1) and mv(1) 2015-01-30 12:45:54 +01:00
grep.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
grep.c grep: getline returns signed (ssize_t) 2015-01-31 15:19:42 +01:00
head.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
head.c Adjust some limits to more flexibility for strtonum 2015-02-01 01:24:03 +01:00
hostname.1 Finish up hostname(1) 2015-02-01 00:03:03 +01:00
hostname.c Fix coding style 2014-11-13 18:08:43 +00:00
kill.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
kill.c Un-boolify sbase 2014-11-14 10:54:20 +00:00
LICENSE Various cal(1) improvements 2015-01-02 13:14:41 +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 Add mandoc-manpage for link(1) 2015-01-25 22:44:47 +01:00
ln.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
ln.c ln: usage, just use %s 2015-01-31 15:23:59 +01:00
logger.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
logger.c logger: Don't bother freeing buf 2014-12-16 20:14:40 +00: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 Fix coding style 2014-11-13 18:08:43 +00:00
ls.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
ls.c ls: Implement -c and update manpage 2015-01-20 16:50:37 +00:00
Makefile Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
md5.h Add crypt.[ch] and update md5sum and sha1sum 2013-07-18 09:51:17 -04:00
md5sum.1 Finish up chroot(1) and md5sum(1) 2015-01-31 23:54:51 +01:00
md5sum.c Finish up chroot(1) and md5sum(1) 2015-01-31 23:54:51 +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 Add full mode support to mkdir(1) and fix return values 2015-01-28 20:57:32 +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 Add mandoc-manpage for mkfifo(1) and add full mode support 2015-01-28 20:55:50 +01:00
mktemp.1 Finish up printenv(1) 2015-02-01 00:23:38 +01:00
mktemp.c Fix coding style 2014-11-13 18:08:43 +00:00
mv.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
mv.c Staticise mv_status 2015-01-30 11:48:33 +00:00
nice.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
nice.c Convert estrto{l, ul} to estrtonum 2015-01-30 16:52:44 +01:00
nl.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
nl.c Adjust some limits to more flexibility for strtonum 2015-02-01 01:24:03 +01:00
nohup.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
nohup.c Add mandoc-manpage for nohup(1) 2015-01-28 23:55:57 +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 Add unescape() to libutil 2015-01-29 21:52:44 +01:00
printenv.1 Finish up printenv(1) 2015-02-01 00:23:38 +01:00
printenv.c Style fix 2014-11-16 13:17:06 +00:00
printf.1 add some mandoc pages and fix some warnings 2015-01-30 21:21:50 +01:00
printf.c Import printf(1) from OpenBSD 2014-09-28 15:12:15 +01:00
pwd.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
pwd.c Use < 0 instead of == -1 2014-11-19 20:09:29 +00:00
queue.h Use queue.h in grep(1) 2014-11-16 12:39:15 +00:00
readlink.1 Edit readlink.1 and document missing flags 2015-02-01 00:43:43 +01:00
readlink.c Edit readlink.1 and document missing flags 2015-02-01 00:43:43 +01:00
README Finish up wc(1) 2015-02-01 03:01:11 +01:00
renice.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
renice.c Convert estrto{l, ul} to estrtonum 2015-01-30 16:52:44 +01:00
rm.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
rm.c Fix return values in rm(1) and mv(1) 2015-01-30 12:45:54 +01:00
rmdir.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
rmdir.c Properly report return value in rmdir(1) 2015-01-30 12:43:55 +01:00
runetypebody.h Import libutf from http://git.suckless.org/libutf 2014-11-17 15:46:01 +00:00
seq.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
seq.c Adjust some limits to more flexibility for strtonum 2015-02-01 01:24:03 +01:00
setsid.1 Finish up setsid(1) 2015-02-01 00:47:32 +01:00
setsid.c Sort includes and more cleanup and fixes in util/ 2014-11-14 10:54:10 +00:00
sha1.h Add crypt.[ch] and update md5sum and sha1sum 2013-07-18 09:51:17 -04:00
sha1sum.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
sha1sum.c Staticise globals 2014-11-17 13:39:11 +00:00
sha256.h Add sha256sum(1) 2013-07-20 13:20:16 -04:00
sha256sum.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
sha256sum.c Staticise globals 2014-11-17 13:39:11 +00:00
sha512.h Add sha512sum(1) 2013-08-04 11:00:34 -04:00
sha512sum.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
sha512sum.c Staticise globals 2014-11-17 13:39:11 +00: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 Remember to include limits.h for UINT_MAX 2015-01-30 14:02:59 +00:00
sort.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
sort.c Use size_t for number of lines in linebuf 2015-01-31 22:49:43 +00:00
split.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
split.c Adjust some limits to more flexibility for strtonum 2015-02-01 01:24:03 +01:00
sponge.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
sponge.c Fix error message 2014-11-16 13:20:36 +00:00
strings.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
strings.c Respect exit status in strings(1) and update manpage 2014-11-23 12:44:38 +00:00
sync.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
sync.c Fix coding style 2014-11-13 18:08:43 +00:00
tail.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
tail.c ARGNUMF() only works on base 10 as it uses strtonum underneath 2015-01-30 16:45:44 +00:00
tar.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
tar.c Fix build 2015-01-26 16:14:45 +00:00
tee.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
tee.c tee: -i option ignores SIGINT 2015-01-22 21:35:36 +00:00
test.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
test.c Un-boolify sbase 2014-11-14 10:54:20 +00:00
text.h Use size_t for number of lines in linebuf 2015-01-31 22:49:43 +00:00
TODO Update TODO 2014-12-21 00:01:58 +00:00
touch.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
touch.c Adjust some limits to more flexibility for strtonum 2015-02-01 01:24:03 +01:00
tr.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
tr.c Add unescape() to libutil 2015-01-29 21:52:44 +01:00
true.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
true.c Simplify true(1) and false(1) 2014-10-03 00:03:08 +01:00
tty.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
tty.c Sort includes and more cleanup and fixes in util/ 2014-11-14 10:54:10 +00:00
uname.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
uname.c Un-boolify sbase 2014-11-14 10:54:20 +00:00
unexpand.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
unexpand.c Convert estrto{l, ul} to estrtonum 2015-01-30 16:52:44 +01:00
uniq.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
uniq.c remove agetline 2014-11-18 21:05:28 +00:00
unlink.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
unlink.c Use < 0 instead of == -1 2014-11-19 20:09:29 +00:00
utf.h Rewrite tr(1) in a sane way 2015-01-10 14:26:30 +00:00
util.h Convert estrto{l, ul} to estrtonum 2015-01-30 16:52:44 +01:00
uudecode.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
uudecode.c remove agetline 2014-11-18 21:05:28 +00:00
uuencode.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
uuencode.c Fix coding style 2014-11-13 18:08:43 +00:00
wc.1 Finish up wc(1) 2015-02-01 03:01:11 +01:00
wc.c Add even stricter UTF-8-support to wc(1) 2015-02-01 04:06:06 +01:00
xargs.1 Add .Os sbase and sed replace to .Os sbase $(VERSION) in make install 2015-01-31 19:37:03 +00:00
xargs.c Use < 0 instead of == -1 2014-11-19 20:09:29 +00:00
yes.1 Finish up yes(1) by adding multiple string support 2015-02-01 02:13:47 +01:00
yes.c yes: Minor style fix 2015-02-01 01:27:05 +00: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):

   UTILITY         POSIX 2008 COMPLIANT            MISSING OPTIONS
   -------         --------------------            ---------------
=* basename        yes                             none
=* cal             yes                             none
=* cat             yes                             none
=  chgrp           no                              -h, -H, -L, -P
=* chmod           yes                             none
=  chown           no                              -h, -H, -L, -P
=* chroot          non-posix                       none
=* cksum           yes                             none
   cmp             yes                             none
#* cols            non-posix                       none
=* comm            yes                             none
=  cp              no                              -H, (-i), -L
=* cron            non-posix                       none
#* cut             yes                             none
=* date            yes                             none
=* dirname         yes                             none
=  du              no                              -H, -L, (-x)
=* echo            yes                             none
=* env             yes                             none
#* expand          yes                             none
=* expr            yes                             none
=* false           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, -R, -q, -u
=* md5sum          non-posix                       none
=* mkdir           yes                             none
=* mkfifo          yes                             none
=* mktemp          non-posix                       none
=* mv              yes                             (-i)
=* nice            yes                             none
=  nl              no                              -d, -f, -h, -l, -n, -p, -v, -w
=* nohup           yes                             none
#* paste           yes                             none
=* printenv        non-posix                       none
   printf          stolen                          stolen
=* pwd             yes                             none
=  readlink        non-posix                       -e, -m
=* renice          yes                             none
=* rm              yes                             (-i)
=* rmdir           yes                             none
=* setsid          non-posix                       none
=* sleep           yes                             none
   sort            no                              -m, -o, -d, -f, -i
   split           yes                             none
=  sponge          non-posix                       none
   strings         no                              -a, -n, -t
=  sync            non-posix                       none
=  tail            no                              -c, -f
=  tar             non-posix                       none
=* tee             yes                             none
   test            yes                             none
=  touch           no                              -r
#* tr              yes                             none
=* true            yes                             none
=  tty             yes                             none
=  uname           yes                             none
#  unexpand        yes                             none
=  uniq            no                              -f, -s
=  unlink          yes                             none
=  uudecode        no                              -o
=  uuencode        no                              -m
   seq             non-posix                       none
=  sha1sum         non-posix                       none
=  sha256sum       non-posix                       none
=  sha512sum       non-posix                       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.

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/