1) Remove the function prototypes. No need for them, as the functions are ordered. 2) Add fieldseplen, so the length of the field-separator is not calculated nearly each time skipcolumn() is called. 3) rename next_col to skip_to_next_col so the purpose is clear, also reorder the conditional accordingly. 4) Put parentheses around certain ternary expressions. 5) BUGFIX: Don't just exit() in check(), but make it return something, so we can cleanly fshut() everything. 6) OFF-POSIX: Posix for no apparent reason does not allow more than one file when the -c or -C flags are given. This can be problematic when you want to check multiple files. With the change 5), rewriting check() to return a value, I went off-posix after discussing this with Dimitris to just allow arbitrary numbers of files. Obviously, this does not break scripts and is convenient for everybody who wants to quickly check a big amount of files. As soon as 1 file is "unsorted", the return value is 1, as expected. For convenience reasons, check()'s warning now includes the filename. 7) BUGFIX: Set ret to 2 instead of 1 when the fshut(fp, *argv) fails. 8) BUGFIX: Don't forget to fshut stderr at the end. This would improperly return 1 in the following case: $ sort -c unsorted_file 2> /dev/full 9) Other style changes, line length, empty line before return.
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 ------- ------------- =*|o basename . =*|o cal . =*|o cat . =*|o chgrp . =*|o chmod . =*|o chown . =*|x chroot . =*|o cksum . =*|o cmp . #*|x cols . =*|o comm . =*|o cp (-i) =*|x cron . #*|o cut . =*|o date . =*|o dirname . =*|o du . =*|o echo . =*|o env . #*|o expand . #*|o expr . =*|o false . = find . #*|o fold . =* o grep . =*|o head . =*|x hostname . =* o join . =*|o kill . =*|o link . =*|o ln . =*|o logger . =*|o logname . #* o ls (-C, -k, -m, -p, -s, -x) =*|x md5sum . =*|o mkdir . =*|o mkfifo . =*|x mktemp . =*|o mv (-i) =*|o nice . #*|o nl . =*|o nohup . #*|o paste . =*|x printenv . #*|o printf . =*|o pwd . =*|x readlink . =*|o renice . =*|o rm (-i) =*|o rmdir . # sed . =*|x seq . =*|x setsid . =*|x sha1sum . =*|x sha256sum . =*|x sha512sum . =*|o sleep . #*|o sort (-d, -f, -i) =*|o split . =*|x sponge . #*|o strings . =*|x sync . =*|o tail . =*|x tar . =*|o tee . =*|o test . =*|o time . =*|o touch . #*|o tr . =*|o true . =*|o tty . =*|o uname . #*|o unexpand . =*|o uniq . =*|o unlink . =*|o uudecode . =*|o uuencode . #*|o wc . =*|x which . =*|o 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/
Description
Languages
C
79.5%
Roff
16%
Shell
1.9%
Awk
1.3%
Makefile
1.3%