Mirror of Suckless' sbase (git://git.suckless.org/sbase)
Go to file
FRIGN e7c33c4af3 Audit basename(1)
1) be stricter which number of arguments is accepted (1 or 2)
2) basename already returns a pointer to "." is argv[0] is ""
3) No need to check for *p != '/', because basename() only returns
   a string beginning with '/' which has length 1, so if strlen(p)
   == 1, the only way for suffix to be "evaluated" is for off to
   be > 0, being equal to suffix being "", but "" != "/".
4) don't calculate strlen twice for each string. Store it in a
   ssize_t and check if it's > 0.
2015-02-28 14:48:44 +01:00
libutf Add mkrunetype.awk 2015-02-23 20:36:47 +01:00
libutil
arg.h
basename.1
basename.c
cal.1
cal.c
cat.1
cat.c Clean up #includes 2015-02-14 21:12:23 +01:00
chgrp.1
chgrp.c chgrp: Update program usage and manpage 2015-02-16 16:33:39 +00:00
chmod.1
chmod.c
chown.1
chown.c chown: Update program usage and manpage 2015-02-17 16:41:58 +00:00
chroot.1
chroot.c Finish up chroot(1) and md5sum(1) 2015-01-31 23:54:51 +01:00
cksum.1
cksum.c Clean up #includes 2015-02-14 21:12:23 +01:00
cmp.1 Refactor cmp(1) code and manpage 2015-02-07 21:05:33 +01:00
cmp.c Clean up #includes 2015-02-14 21:12:23 +01:00
cols.1
cols.c Add COLUMNS support to cols(1) 2015-02-19 11:25:51 +00:00
comm.1
comm.c
compat.h
config.mk
cp.1
cp.c
cron.1
cron.c Remove redundant definition of argv0 2015-02-16 16:12:36 +00:00
crypt.h
cut.1
cut.c
date.1
date.c
dirname.1
dirname.c
du.1
du.c
echo.1
echo.c
env.1
env.c code-style: minor cleanup and nitpicking 2015-02-20 13:29:38 +01:00
expand.1
expand.c expand, unexpand: Minor style fix as per the suckless guide 2015-02-17 12:14:44 +00:00
expr.1
expr.c
false.1
false.c
find.1
find.c a bunch of cleanup 2015-02-25 10:11:55 +00:00
fold.1
fold.c
fs.h
grep.1
grep.c Include strings.h for strcasecmp() 2015-02-20 16:00:58 +00:00
head.1
head.c
hostname.1
hostname.c Clean up #includes 2015-02-14 21:12:23 +01:00
kill.1
kill.c Include strings.h for strcasecmp() 2015-02-20 16:00:58 +00:00
LICENSE
link.1
link.c
ln.1
ln.c
logger.1
logger.c Include strings.h for strcasecmp() 2015-02-20 16:00:58 +00:00
logname.1
logname.c
ls.1
ls.c
Makefile
md5.h
md5sum.1
md5sum.c
mkdir.1
mkdir.c Clean up #includes 2015-02-14 21:12:23 +01:00
mkfifo.1
mkfifo.c Clean up #includes 2015-02-14 21:12:23 +01:00
mktemp.1
mktemp.c Clean up #includes 2015-02-14 21:12:23 +01:00
mv.1
mv.c
nice.1
nice.c Clean up #includes 2015-02-14 21:12:23 +01:00
nl.1
nl.c
nohup.1
nohup.c Clean up #includes 2015-02-14 21:12:23 +01:00
paste.1
paste.c
printenv.1
printenv.c Style fix 2014-11-16 13:17:06 +00:00
printf.1
printf.c Fix \c behaviour 2015-02-16 10:31:13 +01:00
pwd.1
pwd.c Clean up #includes 2015-02-14 21:12:23 +01:00
queue.h
readlink.1
readlink.c
README Audit basename(1) 2015-02-28 14:48:44 +01:00
renice.1
renice.c Clean up #includes 2015-02-14 21:12:23 +01:00
rm.1
rm.c
rmdir.1
rmdir.c
sed.1
sed.c code-style: minor cleanup and nitpicking 2015-02-20 13:29:38 +01:00
seq.1
seq.c code-style: minor cleanup and nitpicking 2015-02-20 13:29:38 +01:00
setsid.1
setsid.c
sha1.h
sha1sum.1
sha1sum.c Simplify sha*sum.c 2015-02-17 10:08:28 +01:00
sha256.h
sha256sum.1
sha256sum.c Simplify sha*sum.c 2015-02-17 10:08:28 +01:00
sha512.h
sha512sum.1
sha512sum.c
sleep.1
sleep.c Clean up #includes 2015-02-14 21:12:23 +01:00
sort.1
sort.c
split.1
split.c Clean up #includes 2015-02-14 21:12:23 +01:00
sponge.1
sponge.c Refactor sponge(1) code and manpage 2015-02-08 22:17:21 +01:00
strings.1
strings.c Refactor strings(1) loop again 2015-02-17 18:18:54 +01:00
sync.1
sync.c
tail.1
tail.c
tar.1
tar.c
tee.1
tee.c
test.1
test.c re-typedef Test, use NOTREACHED comment instead of comma operator, both as per style guide 2015-02-25 21:08:35 +00:00
text.h
time.1
time.c
TODO
touch.1
touch.c
tr.1
tr.c
true.1
true.c
tty.1
tty.c
uname.1
uname.c Clean up #includes 2015-02-14 21:12:23 +01:00
unexpand.1
unexpand.c unexpand: spaces to tabs 2015-02-20 13:29:38 +01:00
uniq.1
uniq.c uniq: corrected arg syntax in usage() 2015-02-19 14:57:09 +00:00
unlink.1
unlink.c Add arg.h-handling to sync(1) and unlink(1) 2015-02-08 22:13:50 +01:00
utf.h
util.h
uudecode.1
uudecode.c uudecode: fix no newline before EOF 2015-02-20 14:36:50 +01:00
uuencode.1
uuencode.c code-style: minor cleanup and nitpicking 2015-02-20 13:29:38 +01:00
wc.1
wc.c
xargs.1
xargs.c
yes.1
yes.c

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
=*  comm            yes                          none
=   cp              yes                          none (-i)
=*  cron            non-posix                    none
#*  cut             yes                          none
=*  date            yes                          -u
=*  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, -l, -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            no                           none (incorrect exit status)
=*  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.

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/