diff options
author | Robert Griebl <griebl@gmx.de> | 2002-07-24 00:34:48 +0000 |
---|---|---|
committer | Robert Griebl <griebl@gmx.de> | 2002-07-24 00:34:48 +0000 |
commit | 41369af3f2bd415c58266618aa3fd1fe6badacfa (patch) | |
tree | 7f63622ca8a24ec94fae746979a1dfc9be339db3 | |
parent | 80cd3cfdbc924b1a032b0634be8930af3daf791f (diff) | |
download | busybox-41369af3f2bd415c58266618aa3fd1fe6badacfa.tar.gz |
Patch for bug #1183: Added a -xdev option to find (configurable)
-rw-r--r-- | findutils/config.in | 1 | ||||
-rw-r--r-- | findutils/find.c | 43 |
2 files changed, 44 insertions, 0 deletions
diff --git a/findutils/config.in b/findutils/config.in index 770d75245..d5a3714d2 100644 --- a/findutils/config.in +++ b/findutils/config.in @@ -11,6 +11,7 @@ if [ "$CONFIG_FIND" = "y" ] ; then bool ' Enable modified time matching (-mtime) option' CONFIG_FEATURE_FIND_MTIME bool ' Enable permissions matching (-perm) option' CONFIG_FEATURE_FIND_PERM bool ' Enable filetype matching (-type) option' CONFIG_FEATURE_FIND_TYPE + bool ' Enable stay in filesystem (-xdev) option' CONFIG_FEATURE_FIND_XDEV fi bool 'grep' CONFIG_GREP if [ "$CONFIG_GREP" = "y" ] ; then diff --git a/findutils/find.c b/findutils/find.c index 0ff0893a6..dd02206e3 100644 --- a/findutils/find.c +++ b/findutils/find.c @@ -51,6 +51,12 @@ static char mtime_char; static int mtime_days; #endif +#ifdef CONFIG_FEATURE_FIND_XDEV +static dev_t *xdev_dev; +static int xdev_count = 0; +#endif + + static int fileAction(const char *fileName, struct stat *statbuf, void* junk) { if (pattern != NULL) { @@ -88,6 +94,22 @@ static int fileAction(const char *fileName, struct stat *statbuf, void* junk) goto no_match; } #endif +#ifdef CONFIG_FEATURE_FIND_XDEV + if (xdev_count) { + int i; + for (i=0; i<xdev_count; i++) { + if (xdev_dev[i] == statbuf-> st_dev) + break; + } + if (i == xdev_count) { + if(S_ISDIR(statbuf->st_mode)) + return SKIP; + else + goto no_match; + } + } +#endif + puts(fileName); no_match: return (TRUE); @@ -180,6 +202,27 @@ int find_main(int argc, char **argv) if ((mtime_char = argv[i][0]) == '-') mtime_days = -mtime_days; #endif +#ifdef CONFIG_FEATURE_FIND_XDEV + } else if (strcmp(argv[i], "-xdev") == 0) { + struct stat stbuf; + + xdev_count = ( firstopt - 1 ) ? ( firstopt - 1 ) : 1; + xdev_dev = xmalloc ( xdev_count * sizeof( dev_t )); + + if ( firstopt == 1 ) { + if ( stat ( ".", &stbuf ) < 0 ) + error_msg_and_die("could not stat '.'" ); + xdev_dev [0] = stbuf. st_dev; + } + else { + + for (i = 1; i < firstopt; i++) { + if ( stat ( argv [i], &stbuf ) < 0 ) + error_msg_and_die("could not stat '%s'", argv [i] ); + xdev_dev [i-1] = stbuf. st_dev; + } + } +#endif } else show_usage(); } |