Remove gratuitous and unnecessary "BusyBox" refernece in login prompt
[oweals/busybox.git] / findutils / find.c
index 15e693ab9acd628b50688a15afd1b24283588d62..dd02206e3051886dfb8956446b21ea6fa85af7fc 100644 (file)
@@ -2,9 +2,9 @@
 /*
  * Mini find implementation for busybox
  *
+ * Copyright (C) 1999,2000 by Lineo, inc. and Erik Andersen
+ * Copyright (C) 1999,2000,2001 by Erik Andersen <andersee@debian.org>
  *
- * Copyright (C) 1999,2000,2001 by Lineo, inc.
- * Written by Erik Andersen <andersen@lineo.com>, <andersee@debian.org>
  * Reworked by David Douthitt <n9ubh@callsign.net> and
  *  Matt Kraai <kraai@alumni.carnegiemellon.edu>.
  *
 
 static char *pattern;
 
-#ifdef BB_FEATURE_FIND_TYPE
+#ifdef CONFIG_FEATURE_FIND_TYPE
 static int type_mask = 0;
 #endif
 
-#ifdef BB_FEATURE_FIND_PERM
+#ifdef CONFIG_FEATURE_FIND_PERM
 static char perm_char = 0;
 static int perm_mask = 0;
 #endif
 
-#ifdef BB_FEATURE_FIND_MTIME
+#ifdef CONFIG_FEATURE_FIND_MTIME
 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) {
@@ -63,13 +69,13 @@ static int fileAction(const char *fileName, struct stat *statbuf, void* junk)
                if (!(fnmatch(pattern, tmp, FNM_PERIOD) == 0))
                        goto no_match;
        }
-#ifdef BB_FEATURE_FIND_TYPE
+#ifdef CONFIG_FEATURE_FIND_TYPE
        if (type_mask != 0) {
                if (!((statbuf->st_mode & S_IFMT) == type_mask))
                        goto no_match;
        }
 #endif
-#ifdef BB_FEATURE_FIND_PERM
+#ifdef CONFIG_FEATURE_FIND_PERM
        if (perm_mask != 0) {
                if (!((isdigit(perm_char) && (statbuf->st_mode & 07777) == perm_mask) ||
                         (perm_char == '-' && (statbuf->st_mode & perm_mask) == perm_mask) ||
@@ -77,7 +83,7 @@ static int fileAction(const char *fileName, struct stat *statbuf, void* junk)
                        goto no_match;
        }
 #endif
-#ifdef BB_FEATURE_FIND_MTIME
+#ifdef CONFIG_FEATURE_FIND_MTIME
        if (mtime_days != 0) {
                time_t file_age = time(NULL) - statbuf->st_mtime;
                time_t mtime_secs = mtime_days * 24 * 60 * 60;
@@ -88,12 +94,28 @@ 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);
 }
 
-#ifdef BB_FEATURE_FIND_TYPE
+#ifdef CONFIG_FEATURE_FIND_TYPE
 static int find_type(char *type)
 {
        int mask = 0;
@@ -143,17 +165,20 @@ int find_main(int argc, char **argv)
        for (i = firstopt; i < argc; i++) {
                if (strcmp(argv[i], "-follow") == 0)
                        dereference = TRUE;
+               else if (strcmp(argv[i], "-print") == 0) {
+                       ;
+                       }
                else if (strcmp(argv[i], "-name") == 0) {
                        if (++i == argc)
                                error_msg_and_die("option `-name' requires an argument");
                        pattern = argv[i];
-#ifdef BB_FEATURE_FIND_TYPE
+#ifdef CONFIG_FEATURE_FIND_TYPE
                } else if (strcmp(argv[i], "-type") == 0) {
                        if (++i == argc)
                                error_msg_and_die("option `-type' requires an argument");
                        type_mask = find_type(argv[i]);
 #endif
-#ifdef BB_FEATURE_FIND_PERM
+#ifdef CONFIG_FEATURE_FIND_PERM
                } else if (strcmp(argv[i], "-perm") == 0) {
                        char *end;
                        if (++i == argc)
@@ -166,7 +191,7 @@ int find_main(int argc, char **argv)
                        if ((perm_char = argv[i][0]) == '-')
                                perm_mask = -perm_mask;
 #endif
-#ifdef BB_FEATURE_FIND_MTIME
+#ifdef CONFIG_FEATURE_FIND_MTIME
                } else if (strcmp(argv[i], "-mtime") == 0) {
                        char *end;
                        if (++i == argc)
@@ -176,19 +201,40 @@ int find_main(int argc, char **argv)
                                error_msg_and_die("invalid argument `%s' to `-mtime'", argv[i]);
                        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();
        }
 
        if (firstopt == 1) {
-               if (recursive_action(".", TRUE, dereference, FALSE, fileAction,
-                                       fileAction, NULL) == FALSE)
+               if (recursive_action(".", TRUE, dereference, FALSE, fileAction,
+                                       fileAction, NULL))
                        status = EXIT_FAILURE;
        } else {
                for (i = 1; i < firstopt; i++) {
-                       if (recursive_action(argv[i], TRUE, dereference, FALSE, fileAction,
-                                               fileAction, NULL) == FALSE)
+                       if (recursive_action(argv[i], TRUE, dereference, FALSE, fileAction,
+                                               fileAction, NULL))
                                status = EXIT_FAILURE;
                }
        }