[hackers] [sbase] [PATCH 1/2] [libutil/recurse] only opendir if recursing

From: David Phillips <david_AT_sighup.nz>
Date: Sun, 1 Oct 2017 16:35:41 +1300

Previous behaviour was to call opendir regardless of if we are actually
going to be recursing into the direectory. Additionally, some utilities
require like chmod that DIRFIRST causes the fn to execute before the
opendir is called.
---
 libutil/recurse.c | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/libutil/recurse.c b/libutil/recurse.c
index e2b8a6e..b356d2c 100644
--- a/libutil/recurse.c
+++ b/libutil/recurse.c
_AT_@ -54,18 +54,17 @@ recurse(const char *path, void *data, struct recursor *r)
 		if (h->ino == st.st_ino && h->dev == st.st_dev)
 			return;
 
-	if (!(dp = opendir(path))) {
-		if (!(r->flags & SILENT)) {
-			weprintf("opendir %s:", path);
-			recurse_status = 1;
-		}
-		return;
-	}
-
 	if (!r->depth && (r->flags & DIRFIRST))
 		(r->fn)(path, &st, data, r);
 
 	if (!r->maxdepth || r->depth + 1 < r->maxdepth) {
+		if (!r->maxdepth && !(dp = opendir(path))) {
+			if (!(r->flags & SILENT)) {
+				weprintf("opendir %s:", path);
+				recurse_status = 1;
+			}
+			return;
+		}
 		while ((d = readdir(dp))) {
 			if (r->follow == 'H') {
 				statf_name = "lstat";
-- 
2.14.1
Received on Sun Oct 01 2017 - 05:35:41 CEST

This archive was generated by hypermail 2.3.0 : Sun Oct 01 2017 - 05:36:22 CEST