sigset.c -> sigsetops.c, add sigsetops man page
[unix-history] / usr / src / usr.bin / find / find.c
index ef87ca8..69d7b2c 100644 (file)
@@ -15,7 +15,7 @@ char copyright[] =
 #endif /* not lint */
 
 #ifndef lint
 #endif /* not lint */
 
 #ifndef lint
-static char sccsid[] = "@(#)find.c     4.28 (Berkeley) %G%";
+static char sccsid[] = "@(#)find.c     4.31 (Berkeley) %G%";
 #endif /* not lint */
 
 #include <sys/types.h>
 #endif /* not lint */
 
 #include <sys/types.h>
@@ -28,12 +28,10 @@ static char sccsid[] = "@(#)find.c  4.28 (Berkeley) %G%";
 
 FTS *tree;                     /* pointer to top of FTS hierarchy */
 time_t now;                    /* time find was run */
 
 FTS *tree;                     /* pointer to top of FTS hierarchy */
 time_t now;                    /* time find was run */
-dev_t curdev = (dev_t)-1;      /* device number of current tree */
 int ftsoptions;                        /* options passed to ftsopen() */
 int deprecated;                        /* old or new syntax */
 int depth;                     /* set by -depth option */
 int output_specified;          /* one of -print, -ok or -exec was specified */
 int ftsoptions;                        /* options passed to ftsopen() */
 int deprecated;                        /* old or new syntax */
 int depth;                     /* set by -depth option */
 int output_specified;          /* one of -print, -ok or -exec was specified */
-int xdev;                      /* set by -xdev option */
 
 main(argc, argv)
        int argc;
 
 main(argc, argv)
        int argc;
@@ -50,19 +48,25 @@ main(argc, argv)
                usage();
 
        paths = argv;
                usage();
 
        paths = argv;
-       ftsoptions = FTS_MULTIPLE|FTS_NOSTAT|FTS_PHYSICAL;
+       ftsoptions = FTS_NOSTAT|FTS_PHYSICAL;
 
        /*
 
        /*
-        * if arguments start with an option, it's new syntax; otherwise,
-        * if has a "-option" anywhere it must be old syntax.
+        * if arguments start with an option, treat it like new syntax;
+        * otherwise, if has a "-option" anywhere (which isn't an argument
+        * to another command) treat it as old syntax.
         */
        if (argv[1][0] != '-')
         */
        if (argv[1][0] != '-')
-               for (p = argv + 1; *p; ++p)
+               for (p = argv + 1; *p; ++p) {
+                       if (!strcmp(*p, "exec") || !strcmp(*p, "ok")) {
+                               while (p[1] && strcmp(*++p, ";"));
+                               continue;
+                       }
                        if (**p == '-') {
                                deprecated = 1;
                                oldsyntax(&argv);
                                break;
                        }
                        if (**p == '-') {
                                deprecated = 1;
                                oldsyntax(&argv);
                                break;
                        }
+               }
        if (!deprecated)
                newsyntax(argc, &argv);
     
        if (!deprecated)
                newsyntax(argc, &argv);
     
@@ -205,22 +209,12 @@ find_execute(plan, paths)
                        break;
                }
 
                        break;
                }
 
-               /* always keep curdev up to date, -fstype uses it. */
-               if (xdev && curdev != entry->fts_statb.st_dev &&
-                   curdev != -1 && ftsset(tree, entry, FTS_SKIP)) {
-                       (void)fprintf(stderr, "find: %s: %s.\n",
-                           entry->fts_path, strerror(errno));
-                       exit(1);
-               }
-
                /*
                 * call all the functions in the execution plan until one is
                 * false or all have been executed.  This is where we do all
                 * the work specified by the user on the command line.
                 */
                for (p = plan; p && (p->eval)(p, entry); p = p->next);
                /*
                 * call all the functions in the execution plan until one is
                 * false or all have been executed.  This is where we do all
                 * the work specified by the user on the command line.
                 */
                for (p = plan; p && (p->eval)(p, entry); p = p->next);
-
-               curdev = entry->fts_statb.st_dev;
        }
        (void)ftsclose(tree);
 }
        }
        (void)ftsclose(tree);
 }