aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2012-09-06 15:24:11 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2012-09-06 15:24:11 +0200
commit2dc1a9727288dd732af47e2618a791be9214dfe4 (patch)
tree48d36577a1893bf2da7c9f410860a6cadd4d1e2d
parent9e71e3cea59c06d40234d8f3363c3f05112e8d5a (diff)
downloadbusybox-w32-2dc1a9727288dd732af47e2618a791be9214dfe4.tar.gz
busybox-w32-2dc1a9727288dd732af47e2618a791be9214dfe4.tar.bz2
busybox-w32-2dc1a9727288dd732af47e2618a791be9214dfe4.zip
find: make -mindepth N -xdev correctly stop on mountpoints
function old new delta fileAction 153 193 +40 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--findutils/find.c35
1 files changed, 21 insertions, 14 deletions
diff --git a/findutils/find.c b/findutils/find.c
index 0ec5bdfea..b521e5b08 100644
--- a/findutils/find.c
+++ b/findutils/find.c
@@ -728,10 +728,27 @@ static int FAST_FUNC fileAction(const char *fileName,
728 int depth IF_NOT_FEATURE_FIND_MAXDEPTH(UNUSED_PARAM)) 728 int depth IF_NOT_FEATURE_FIND_MAXDEPTH(UNUSED_PARAM))
729{ 729{
730 int r; 730 int r;
731 int same_fs = 1;
732
733#if ENABLE_FEATURE_FIND_XDEV
734 if (S_ISDIR(statbuf->st_mode) && G.xdev_count) {
735 int i;
736 for (i = 0; i < G.xdev_count; i++) {
737 if (G.xdev_dev[i] == statbuf->st_dev)
738 goto found;
739 }
740 //bb_error_msg("'%s': not same fs", fileName);
741 same_fs = 0;
742 found: ;
743 }
744#endif
731 745
732#if ENABLE_FEATURE_FIND_MAXDEPTH 746#if ENABLE_FEATURE_FIND_MAXDEPTH
733 if (depth < G.minmaxdepth[0]) 747 if (depth < G.minmaxdepth[0]) {
734 return TRUE; /* skip this, continue recursing */ 748 if (same_fs)
749 return TRUE; /* skip this, continue recursing */
750 return SKIP; /* stop recursing */
751 }
735 if (depth > G.minmaxdepth[1]) 752 if (depth > G.minmaxdepth[1])
736 return SKIP; /* stop recursing */ 753 return SKIP; /* stop recursing */
737#endif 754#endif
@@ -747,21 +764,11 @@ static int FAST_FUNC fileAction(const char *fileName,
747 return SKIP; 764 return SKIP;
748 } 765 }
749#endif 766#endif
750#if ENABLE_FEATURE_FIND_XDEV
751 /* -xdev stops on mountpoints, but AFTER mountpoit itself 767 /* -xdev stops on mountpoints, but AFTER mountpoit itself
752 * is processed as usual */ 768 * is processed as usual */
753 if (S_ISDIR(statbuf->st_mode)) { 769 if (!same_fs) {
754 if (G.xdev_count) { 770 return SKIP;
755 int i;
756 for (i = 0; i < G.xdev_count; i++) {
757 if (G.xdev_dev[i] == statbuf->st_dev)
758 goto found;
759 }
760 return SKIP;
761 found: ;
762 }
763 } 771 }
764#endif
765 772
766 /* Cannot return 0: our caller, recursive_action(), 773 /* Cannot return 0: our caller, recursive_action(),
767 * will perror() and skip dirs (if called on dir) */ 774 * will perror() and skip dirs (if called on dir) */