suckless unix tools https://core.suckless.org/sbase
Go to file
FRIGN 02ec321419 Add missing is*rune() functions and tolowerrune() and toupperrune()
This basically means that we now have an autogenerating typecheck
and case-conversion tool.
Don't freak out when you see the added LOC. Given we now have
an additional mapping to the uppercase-characters, some ranges got
"lost" and have to be written literally by the generating awk-script.

The runetypebody.h was generated by myself using my modified version
of mkrunetype.awk and I'll push the changed version as soon as this
has been discussed on the ml.
If you worry about speed, consider, that bsearch is just the right
tool for this job and can even handle a long array like this.
2015-02-11 13:12:27 +01:00
libutf Add explicit boundary to loop in readrune() 2015-02-01 04:20:02 +01:00
libutil add estrndup 2015-02-11 01:17:21 +00: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 basename: make usage line the same as the man page 2015-02-01 19:26:49 +01:00
cal.1 man pages: improve consistency 2015-02-01 20:52:28 +01:00
cal.c Convert cal(1) to strtonum 2015-01-30 16:01:37 +01:00
cat.1 man pages: improve consistency 2015-02-01 20:52:28 +01:00
cat.c read stdin if arg is exactly "-" not just begins with '-' 2014-11-18 21:53:37 +00:00
chgrp.1 fix some mandoc warnings 2015-02-10 17:37:57 +01:00
chgrp.c chgrp: Only check errno if getgrnam() fails 2014-12-21 12:14:26 +00:00
chmod.1 man pages: improve consistency 2015-02-01 20:52:28 +01:00
chmod.c Add mandoc-manpage for chmod(1) 2015-01-17 21:59:37 +00:00
chown.1 chown.1: add symlink dereferencing flags to manpage 2015-02-09 22:54:52 +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 Refactor cmp(1) code and manpage 2015-02-07 21:05:33 +01:00
cmp.c No need to check for stdin on fclose() 2015-02-07 21:42:41 +01:00
cols.1 man pages: improve consistency 2015-02-01 20:52:28 +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 cp.1: symlink dereferencing flags 2015-02-09 22:54:52 +00:00
cp.c cp: add symlink deref flags -H and -L for cp and mv 2015-02-09 22:54:52 +00:00
cron.1 cron.1: path macro for /etc/crontab 2015-02-06 15:43:23 +01: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 man pages: fix some typos 2015-02-01 21:28:17 +01: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 Do not rely on the underlying type of time_t in date(1) and touch(1) 2015-02-08 23:45:03 +00: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 man pages: improve consistency 2015-02-01 20:52:28 +01:00
du.1 du.1: add symlink dereferencing flags to manpage 2015-02-09 22:54:53 +00:00
du.c du.c: add symlink dereferencing flags -H and -L 2015-02-09 22:54:53 +00: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 periods in expr.1 2015-02-10 00:34:47 +01:00
expr.c make use of en*alloc functions 2015-02-11 01:17:21 +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 cp: add symlink deref flags -H and -L for cp and mv 2015-02-09 22:54:52 +00:00
grep.1 man pages: improve consistency 2015-02-01 20:52:28 +01:00
grep.c make use of en*alloc functions 2015-02-11 01:17:21 +00:00
head.1 Make wording more consistent in head.1 and tail.1 2015-02-09 20:04:54 +01:00
head.c Adjust some limits to more flexibility for strtonum 2015-02-01 01:24:03 +01:00
hostname.1 man pages: improve consistency 2015-02-01 20:52:28 +01:00
hostname.c Fix coding style 2014-11-13 18:08:43 +00:00
kill.1 man pages: improve consistency 2015-02-01 20:52:28 +01:00
kill.c Un-boolify sbase 2014-11-14 10:54:20 +00:00
LICENSE Add Ralph to LICENSE 2015-02-11 10:56:59 +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 initial implementation of sed(1) 2015-02-10 10:35:22 +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 cp: add symlink deref flags -H and -L for cp and mv 2015-02-09 22:54:52 +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 man pages: improve consistency 2015-02-01 20:52:28 +01: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 paste: No need to make an exception for stdin, just close it at the end 2015-02-10 12:08:06 +00: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 readlink: Use eprintf() to report errors 2015-02-11 11:58:13 +00:00
README Update readlink in README 2015-02-11 11:54:58 +00: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 Add missing is*rune() functions and tolowerrune() and toupperrune() 2015-02-11 13:12:27 +01:00
sed.c Add initial implementation of sed(1) 2015-02-10 10:35:22 +00:00
seq.1 man pages: improve consistency 2015-02-01 20:52:28 +01: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 man pages: improve consistency 2015-02-01 20:52:28 +01: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 man pages: improve consistency 2015-02-01 20:52:28 +01: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 man pages: improve consistency 2015-02-01 20:52:28 +01: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 sort: minor manual page adjustments 2015-02-01 21:46:58 +01:00
sort.c make use of en*alloc functions 2015-02-11 01:17:21 +00:00
split.1 man pages: improve consistency 2015-02-01 20:52:28 +01:00
split.c split: fixes 2015-02-01 16:30:12 +01:00
sponge.1 Refactor sponge(1) code and manpage 2015-02-08 22:17:21 +01:00
sponge.c Refactor sponge(1) code and manpage 2015-02-08 22:17:21 +01:00
strings.1 man pages: fix some typos 2015-02-01 21:28:17 +01:00
strings.c Respect exit status in strings(1) and update manpage 2014-11-23 12:44:38 +00: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 Make wording more consistent in head.1 and tail.1 2015-02-09 20:04:54 +01:00
tail.c Small code cleanup in tail(1) 2015-02-09 18:46:47 +01:00
tar.1 tar.1: add symbolic link dereferencing to manpage 2015-02-09 22:54:53 +00:00
tar.c No need to specify "rb" and "wb" in fopen, use "r" and "w" 2015-02-01 15:55:30 +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 fix some mandoc warnings 2015-02-10 17:37:57 +01:00
test.c Use strtonum and libutf in test(1), refactor code and manpage 2015-02-09 22:21:23 +01:00
text.h Use size_t for number of lines in linebuf 2015-01-31 22:49:43 +00:00
TODO Add initial implementation of sed(1) 2015-02-10 10:35:22 +00:00
touch.1 2014 -> 2015 in touch.1 2015-02-09 12:38:31 +01:00
touch.c Do not rely on the underlying type of time_t in date(1) and touch(1) 2015-02-08 23:45:03 +00: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 tr : Revert 97c5986146 2015-02-07 18:09:04 +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 Refactor tty(1) code and manpage 2015-02-07 22:00:28 +01:00
uname.1 Refactor uname(1) code and manpage 2015-02-07 22:15:56 +01:00
uname.c Refactor uname(1) code and manpage 2015-02-07 22:15:56 +01:00
unexpand.1 Refactor unexpand(1) code and manpage, adding tablist support 2015-02-08 21:24:22 +01:00
unexpand.c Remove wchar.h from unexpand(1) 2015-02-09 00:20:02 +01:00
uniq.1 man pages: improve consistency 2015-02-01 20:52:28 +01:00
uniq.c uniq: Style fix 2015-02-11 12:02:33 +00:00
unlink.1 Refactor unlink(1) code and manpage 2015-02-08 21:59:59 +01:00
unlink.c Add arg.h-handling to sync(1) and unlink(1) 2015-02-08 22:13:50 +01:00
utf.h Add missing is*rune() functions and tolowerrune() and toupperrune() 2015-02-11 13:12:27 +01:00
util.h add estrndup 2015-02-11 01:17:21 +00:00
uudecode.1 man pages: improve consistency 2015-02-01 20:52:28 +01:00
uudecode.c remove agetline 2014-11-18 21:05:28 +00:00
uuencode.1 man pages: improve consistency 2015-02-01 20:52:28 +01: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 wc: Make output POSIX compliant 2015-02-06 19:46:45 +00:00
xargs.1 xargs.1: dont justify text, remove " " 2015-02-06 15:43:46 +01: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
=* chmod           yes                          none
=  chown           no                           -h
=* chroot          non-posix                    none
=* cksum           yes                          none
=* cmp             yes                          none
#* cols            non-posix                    none
=* comm            yes                          none
=  cp              yes                          none (-i)
=* cron            non-posix                    none
#* cut             yes                          none
=* date            yes                          none
=* dirname         yes                          none
=  du              yes                          none (-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                          none (-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                    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         no                           -a, -n, -t
=* sync            non-posix                    none
=* tail            yes                          none
=* tar             non-posix                    none
=* tee             yes                          none
#* test            yes                          none
=* touch           yes                          none
#* tr              yes                          none
=* true            yes                          none
=* tty             yes                          none
=* uname           yes                          none
#* unexpand        yes                          none
=  uniq            no                           none
=* unlink          yes                          none
=  uudecode        no                           -o
=  uuencode        no                           -m
#* 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/