commit 830ca05c25984586f3578f11a7a8038304d71719
parent a5612b0d08b9abb4e65acaa3d322581af2fd7a39
Author: Michael Forney <mforney@mforney.org>
Date: Wed, 14 Dec 2016 19:40:03 -0800
du: Don't print 0 entry if stat of named file fails
Previously:
$ du doesntexist
du: lstat doesntexist: No such file or directory
0 doesntexist
Now:
$ du doesntexist
du: lstat doesntexist: No such file or directory
Also, just call nblks one time.
Diffstat:
M | du.c | | | 15 | ++++++++------- |
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/du.c b/du.c
@@ -35,16 +35,19 @@ nblks(blkcnt_t blocks)
}
static void
-du(const char *path, struct stat *st, void *total, struct recursor *r)
+du(const char *path, struct stat *st, void *data, struct recursor *r)
{
- off_t subtotal = 0;
+ off_t *total = data, subtotal;
+ subtotal = nblks(st->st_blocks);
if (S_ISDIR(st->st_mode))
recurse(path, &subtotal, r);
- *((off_t *)total) += subtotal + nblks(st->st_blocks);
+ *total += subtotal;
- if (!sflag && r->depth <= maxdepth && r->depth && (S_ISDIR(st->st_mode) || aflag))
- printpath(subtotal + nblks(st->st_blocks), path);
+ if (!r->depth)
+ printpath(*total, path);
+ else if (!sflag && r->depth <= maxdepth && (S_ISDIR(st->st_mode) || aflag))
+ printpath(subtotal, path);
}
static void
@@ -102,12 +105,10 @@ main(int argc, char *argv[])
if (!argc) {
recurse(".", &n, &r);
- printpath(n, ".");
} else {
for (; *argv; argc--, argv++) {
n = 0;
recurse(*argv, &n, &r);
- printpath(n, *argv);
}
}