mirror of
https://github.com/sheumann/hush.git
synced 2024-11-19 08:31:11 +00:00
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>
This commit is contained in:
parent
9e71e3cea5
commit
2dc1a97272
@ -728,10 +728,27 @@ static int FAST_FUNC fileAction(const char *fileName,
|
|||||||
int depth IF_NOT_FEATURE_FIND_MAXDEPTH(UNUSED_PARAM))
|
int depth IF_NOT_FEATURE_FIND_MAXDEPTH(UNUSED_PARAM))
|
||||||
{
|
{
|
||||||
int r;
|
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 ENABLE_FEATURE_FIND_MAXDEPTH
|
||||||
if (depth < G.minmaxdepth[0])
|
if (depth < G.minmaxdepth[0]) {
|
||||||
return TRUE; /* skip this, continue recursing */
|
if (same_fs)
|
||||||
|
return TRUE; /* skip this, continue recursing */
|
||||||
|
return SKIP; /* stop recursing */
|
||||||
|
}
|
||||||
if (depth > G.minmaxdepth[1])
|
if (depth > G.minmaxdepth[1])
|
||||||
return SKIP; /* stop recursing */
|
return SKIP; /* stop recursing */
|
||||||
#endif
|
#endif
|
||||||
@ -747,21 +764,11 @@ static int FAST_FUNC fileAction(const char *fileName,
|
|||||||
return SKIP;
|
return SKIP;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if ENABLE_FEATURE_FIND_XDEV
|
|
||||||
/* -xdev stops on mountpoints, but AFTER mountpoit itself
|
/* -xdev stops on mountpoints, but AFTER mountpoit itself
|
||||||
* is processed as usual */
|
* is processed as usual */
|
||||||
if (S_ISDIR(statbuf->st_mode)) {
|
if (!same_fs) {
|
||||||
if (G.xdev_count) {
|
return SKIP;
|
||||||
int i;
|
|
||||||
for (i = 0; i < G.xdev_count; i++) {
|
|
||||||
if (G.xdev_dev[i] == statbuf->st_dev)
|
|
||||||
goto found;
|
|
||||||
}
|
|
||||||
return SKIP;
|
|
||||||
found: ;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Cannot return 0: our caller, recursive_action(),
|
/* Cannot return 0: our caller, recursive_action(),
|
||||||
* will perror() and skip dirs (if called on dir) */
|
* will perror() and skip dirs (if called on dir) */
|
||||||
|
Loading…
Reference in New Issue
Block a user