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.
This commit is contained in:
Michael Forney 2016-12-14 19:40:03 -08:00 committed by Anselm R Garbe
parent a5612b0d08
commit 830ca05c25

15
du.c
View File

@ -35,16 +35,19 @@ nblks(blkcnt_t blocks)
} }
static void 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)) if (S_ISDIR(st->st_mode))
recurse(path, &subtotal, r); 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)) if (!r->depth)
printpath(subtotal + nblks(st->st_blocks), path); printpath(*total, path);
else if (!sflag && r->depth <= maxdepth && (S_ISDIR(st->st_mode) || aflag))
printpath(subtotal, path);
} }
static void static void
@ -102,12 +105,10 @@ main(int argc, char *argv[])
if (!argc) { if (!argc) {
recurse(".", &n, &r); recurse(".", &n, &r);
printpath(n, ".");
} else { } else {
for (; *argv; argc--, argv++) { for (; *argv; argc--, argv++) {
n = 0; n = 0;
recurse(*argv, &n, &r); recurse(*argv, &n, &r);
printpath(n, *argv);
} }
} }