suckless unix tools
Go to file
Hiltjo Posthuma 244539e473 sed: style improvements
- declare variables at the top of a function.
- free(NULL) is valid.
- avoid VLA.
2015-03-27 16:01:55 +01:00
libutf
libutil Check getline()-return-values properly 2015-03-27 14:49:48 +01:00
LICENSE nl: add -d -p -f -h options 2015-03-19 10:10:55 +00:00
Makefile Remove apathmax() and implicitly agetcwd() 2015-03-18 15:20:35 +01:00
README Prepare POSIX 2013 audit 2015-03-23 16:22:00 +01:00
TODO
arg.h
basename.1
basename.c
cal.1
cal.c
cat.1
cat.c Small style-fix in cat.c 2015-03-16 10:36:36 +01:00
chgrp.1
chgrp.c Refactor recurse() again 2015-03-19 01:08:19 +01:00
chmod.1
chmod.c Refactor recurse() again 2015-03-19 01:08:19 +01:00
chown.1
chown.c Refactor recurse() again 2015-03-19 01:08:19 +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 Audit col(1), add UTF-8-support 2015-03-22 21:45:32 +01:00
col.c Audit col(1), add UTF-8-support 2015-03-22 21:45:32 +01:00
cols.1
cols.c
comm.1
comm.c comm: minor optimization 2015-03-27 15:53:46 +01:00
compat.h
config.mk
cp.1
cp.c Audit cp() in libutil 2015-03-19 17:57:12 +01:00
cron.1
cron.c Check getline()-return-values properly 2015-03-27 14:49:48 +01:00
crypt.h
cut.1
cut.c Check getline()-return-values properly 2015-03-27 14:49:48 +01:00
date.1
date.c
dirname.1
dirname.c
du.1
du.c Refactor recurse() again 2015-03-19 01:08:19 +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 Drop maxdigits in expr(1) 2015-03-23 22:56:26 +01: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 Check getline()-return-values properly 2015-03-27 14:49:48 +01:00
fs.h Audit tar(1), add DIRFIRST-flag to recurse() 2015-03-21 01:30:47 +01:00
grep.1
grep.c grep: use len returned from getline and check fmemopen() 2015-03-27 15:54:41 +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 Check getline()-return-values properly 2015-03-27 14:49:48 +01:00
hostname.1
hostname.c
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
link.1
link.c
ln.1
ln.c
logger.1
logger.c Check getline()-return-values properly 2015-03-27 14:49:48 +01:00
logname.1
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
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 Audit cp() in libutil 2015-03-19 17:57:12 +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.1: fix mandoc warning 2015-03-27 12:21:28 +01:00
nl.c Check getline()-return-values properly 2015-03-27 14:49:48 +01: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 printf: no need to nul-terminate after strndup 2015-03-27 12:21:13 +01:00
pwd.1
pwd.c Remove apathmax() and implicitly agetcwd() 2015-03-18 15:20:35 +01:00
queue.h
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
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 Refactor recurse() again 2015-03-19 01:08:19 +01:00
rmdir.1
rmdir.c
sed.1
sed.c sed: style improvements 2015-03-27 16:01:55 +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
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 Add -m and -o flags to sort(1) 2015-03-22 23:39:48 +01:00
sort.c Check getline()-return-values properly 2015-03-27 14:49:48 +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 Check getline()-return-values properly 2015-03-27 14:49:48 +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
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 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
tr.c Audit tr(1) 2015-03-17 23:41:22 +01:00
true.1
true.c
tty.1
tty.c
uname.1
uname.c
unexpand.1
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 Check getline()-return-values properly 2015-03-27 14:49:48 +01:00
unlink.1
unlink.c
utf.h
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 Check getline()-return-values properly 2015-03-27 14:49:48 +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 Add s-, t-, x-flags to and audit xargs(1) 2015-03-22 22:57:58 +01:00
xargs.c Add s-, t-, x-flags to and audit xargs(1) 2015-03-22 22:57:58 +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:

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

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

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/