OSDN Git Service

find: fix spurious -exec error messages
authorDenis Vlasenko <vda.linux@googlemail.com>
Sat, 23 Dec 2006 00:49:10 +0000 (00:49 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Sat, 23 Dec 2006 00:49:10 +0000 (00:49 -0000)
(bug reported by Bernhard Fischer <rep.nop@aon.at>)

findutils/find.c
libbb/xfuncs.c

index bf6b71a..38bbfbe 100644 (file)
@@ -197,9 +197,8 @@ ACTF(exec)
        for (i = 0; i < ap->exec_argc; i++)
                argv[i] = subst(ap->exec_argv[i], ap->subst_count[i], fileName);
        argv[i] = NULL; /* terminate the list */
-       errno = 0;
        rc = wait4pid(spawn(argv));
-       if (errno)
+       if (rc)
                bb_perror_msg("%s", argv[0]);
        for (i = 0; i < ap->exec_argc; i++)
                free(argv[i]);
index 9efccc5..136dd1c 100644 (file)
@@ -181,6 +181,7 @@ void xfflush_stdout(void)
 // -1 for failure.  Runs argv[0], searching path if that has no / in it.
 pid_t spawn(char **argv)
 {
+       /* Why static? */
        static int failed;
        pid_t pid;
        void *app = ENABLE_FEATURE_SH_STANDALONE_SHELL ? find_applet_by_name(argv[0]) : 0;
@@ -196,10 +197,14 @@ pid_t spawn(char **argv)
                // and then exit to unblock parent (but don't run atexit() stuff, which
                // would screw up parent.)
 
-               failed = -1;
+               failed = errno;
                _exit(0);
        }
-       return failed ? failed : pid;
+       if (failed) {
+               errno = failed;
+               return -1;
+       }
+       return pid;
 }
 
 // Die with an error message if we can't spawn a child process.