sbase/libutil
FRIGN 01de5df8e6 Audit du(1) and refactor recurse()
While auditing du(1) I realized that there's no way the over 100 lines
of procedures in du() would pass the audit.
Instead, I decided to rewrite this section using recurse() from libutil.
However, the issue was that you'd need some kind of payload to count
the number of bytes in the subdirectories and use them in the higher
hierarchies.
The solution is to add a "void *data" data pointer to each recurse-
function-prototype, which we might also be able to use in other
recurse-applications.
recurse() itself had to be augmented with a recurse_samedev-flag, which
basically prevents recurse from leaving the current device.

Now, let's take a closer look at the audit:
1) Removing the now unnecessary util-functions push, pop, xrealpath,
   rename print() to printpath(), localize some global variables.
2) Only pass the block count to nblks instead of the entire stat-
   pointer.
3) Fix estrtonum to use the minimum of LLONG_MAX and SIZE_MAX.
4) Use idiomatic argv+argc-loop
5) Report proper exit-status.
2015-03-11 23:21:52 +01:00
..
agetcwd.c Fix off-by-one in apathmax() as the path is relative to "/" 2015-03-06 23:50:39 +00:00
apathmax.c Fix off-by-one in apathmax() as the path is relative to "/" 2015-03-06 23:50:39 +00:00
concat.c Switch concat() to use fread() and fwrite() 2015-02-09 15:24:03 +00:00
cp.c Fix off-by-one in apathmax() as the path is relative to "/" 2015-03-06 23:50:39 +00:00
crypt.c Make already audited tools argv-centric instead of argc-centric 2015-03-02 14:19:26 +01:00
ealloc.c add estrndup 2015-02-11 01:17:21 +00:00
enmasse.c Fix off-by-one in apathmax() as the path is relative to "/" 2015-03-06 23:50:39 +00:00
eprintf.c Rename util/ to libutil/ 2014-11-17 16:48:34 +00:00
eregcomp.c Rename util/ to libutil/ 2014-11-17 16:48:34 +00:00
estrtod.c Rename util/ to libutil/ 2014-11-17 16:48:34 +00:00
fnck.c Refactor enmasse() and recurse() to reflect depth 2015-03-02 22:50:38 +01:00
getlines.c Make getlines() less verbose 2015-02-12 14:34:07 +00:00
human.c Rename util/ to libutil/ 2014-11-17 16:48:34 +00:00
md5.c Rename util/ to libutil/ 2014-11-17 16:48:34 +00:00
mode.c Rename util/ to libutil/ 2014-11-17 16:48:34 +00:00
putword.c Rename util/ to libutil/ 2014-11-17 16:48:34 +00:00
reallocarray.c Implement mallocarray() 2015-03-10 22:19:19 +01:00
recurse.c Audit du(1) and refactor recurse() 2015-03-11 23:21:52 +01:00
rm.c Audit du(1) and refactor recurse() 2015-03-11 23:21:52 +01:00
sha1.c Rename util/ to libutil/ 2014-11-17 16:48:34 +00:00
sha256.c Rename util/ to libutil/ 2014-11-17 16:48:34 +00:00
sha512.c Rename util/ to libutil/ 2014-11-17 16:48:34 +00:00
strcasestr.c Argh - include strings.h 2014-11-21 00:03:30 +00:00
strlcat.c Rename util/ to libutil/ 2014-11-17 16:48:34 +00:00
strlcpy.c Rename util/ to libutil/ 2014-11-17 16:48:34 +00:00
strsep.c Import strsep() from musl libc 2015-01-25 17:48:11 +00:00
strtonum.c Use strtonum and libutf in test(1), refactor code and manpage 2015-02-09 22:21:23 +01:00
unescape.c Add \e, \", \' and hex-escapes (\xH[H]) to unescape() 2015-02-14 22:55:37 +01:00