[hackers] [sbase] [PATCH 2/5] du: Don't print 0 entry if stat of named file fails

From: Michael Forney <mforney_AT_mforney.org>
Date: Wed, 14 Dec 2016 19:40:03 -0800

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.
---
 du.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/du.c b/du.c
index fb2c90b..4ceac66 100644
--- a/du.c
+++ b/du.c
_AT_@ -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
_AT_@ -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);
 		}
 	}
 
-- 
2.11.0
Received on Thu Dec 15 2016 - 04:40:03 CET

This archive was generated by hypermail 2.3.0 : Thu Dec 15 2016 - 04:48:22 CET