]> git.saurik.com Git - apple/shell_cmds.git/blobdiff - find/find.c
shell_cmds-198.tar.gz
[apple/shell_cmds.git] / find / find.c
index 35f800664aded9b3a074be559cc8bbad7154ad82..c59a75ab3789bdfb96492b6aacc493c34b15e960 100644 (file)
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
  * 4. Neither the name of the University nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
@@ -42,7 +38,7 @@ static char sccsid[] = "@(#)find.c    8.5 (Berkeley) 8/5/94";
 #endif /* not lint */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/usr.bin/find/find.c,v 1.18 2006/05/14 20:23:00 krion Exp $");
+__FBSDID("$FreeBSD: src/usr.bin/find/find.c,v 1.23 2010/12/11 08:32:16 joel Exp $");
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -64,7 +60,11 @@ __FBSDID("$FreeBSD: src/usr.bin/find/find.c,v 1.18 2006/05/14 20:23:00 krion Exp
 
 #include "find.h"
 
+#ifdef __APPLE__
+static int find_compare(const FTSENT **s1, const FTSENT **s2);
+#else /* !__APPLE__ */
 static int find_compare(const FTSENT * const *s1, const FTSENT * const *s2);
+#endif /* __APPLE__ */
 
 /*
  * find_compare --
@@ -73,7 +73,11 @@ static int find_compare(const FTSENT * const *s1, const FTSENT * const *s2);
  *     order within each directory.
  */
 static int
+#ifdef __APPLE__
+find_compare(const FTSENT **s1, const FTSENT **s2)
+#else /* !__APPLE__ */
 find_compare(const FTSENT * const *s1, const FTSENT * const *s2)
+#endif /* __APPLE__ */
 {
 
        return (strcoll((*s1)->fts_name, (*s2)->fts_name));
@@ -239,7 +243,7 @@ find_execute(PLAN *plan, char *paths[])
                if (COMPAT_MODE("bin/find", "unix2003") && getuid() 
                  && stat_ret == 0 
                  && ((statInfo.st_mode & S_IFMT) == S_IFDIR)) {
-                       if ((statInfo.st_mode & (S_IXUSR + S_IXGRP + S_IXOTH)) != 0) {
+                       if (access(paths[pathIndex], X_OK) == 0) {
                                myPaths = addPath(myPaths, paths[pathIndex]);
                        } else {
                                if (stat_errno != ENAMETOOLONG) {       /* if name is too long, just let existing logic handle it */
@@ -309,6 +313,9 @@ find_execute(PLAN *plan, char *paths[])
        }
        free (myPaths);
        finish_execplus();
+       if (execplus_error) {
+               exit(execplus_error);
+       }
        if (errno)
                err(1, "fts_read");
        fts_close(tree);