[git commit] find: make -mindepth N -xdev correctly stop on mountpoints

Denys Vlasenko vda.linux at googlemail.com
Thu Sep 6 13:24:11 UTC 2012


commit: http://git.busybox.net/busybox/commit/?id=2dc1a9727288dd732af47e2618a791be9214dfe4
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
fileAction                                           153     193     +40

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 findutils/find.c |   35 +++++++++++++++++++++--------------
 1 files changed, 21 insertions(+), 14 deletions(-)

diff --git a/findutils/find.c b/findutils/find.c
index 0ec5bdf..b521e5b 100644
--- a/findutils/find.c
+++ b/findutils/find.c
@@ -728,10 +728,27 @@ static int FAST_FUNC fileAction(const char *fileName,
 		int depth IF_NOT_FEATURE_FIND_MAXDEPTH(UNUSED_PARAM))
 {
 	int r;
+	int same_fs = 1;
+
+#if ENABLE_FEATURE_FIND_XDEV
+	if (S_ISDIR(statbuf->st_mode) && G.xdev_count) {
+		int i;
+		for (i = 0; i < G.xdev_count; i++) {
+			if (G.xdev_dev[i] == statbuf->st_dev)
+				goto found;
+		}
+		//bb_error_msg("'%s': not same fs", fileName);
+		same_fs = 0;
+ found: ;
+	}
+#endif
 
 #if ENABLE_FEATURE_FIND_MAXDEPTH
-	if (depth < G.minmaxdepth[0])
-		return TRUE; /* skip this, continue recursing */
+	if (depth < G.minmaxdepth[0]) {
+		if (same_fs)
+			return TRUE; /* skip this, continue recursing */
+		return SKIP; /* stop recursing */
+	}
 	if (depth > G.minmaxdepth[1])
 		return SKIP; /* stop recursing */
 #endif
@@ -747,21 +764,11 @@ static int FAST_FUNC fileAction(const char *fileName,
 			return SKIP;
 	}
 #endif
-#if ENABLE_FEATURE_FIND_XDEV
 	/* -xdev stops on mountpoints, but AFTER mountpoit itself
 	 * is processed as usual */
-	if (S_ISDIR(statbuf->st_mode)) {
-		if (G.xdev_count) {
-			int i;
-			for (i = 0; i < G.xdev_count; i++) {
-				if (G.xdev_dev[i] == statbuf->st_dev)
-					goto found;
-			}
-			return SKIP;
- found: ;
-		}
+	if (!same_fs) {
+		return SKIP;
 	}
-#endif
 
 	/* Cannot return 0: our caller, recursive_action(),
 	 * will perror() and skip dirs (if called on dir) */


More information about the busybox-cvs mailing list