diff options
-rw-r--r-- | findutils/find.c | 3 | ||||
-rw-r--r-- | libbb/xfuncs.c | 9 |
2 files changed, 8 insertions, 4 deletions
diff --git a/findutils/find.c b/findutils/find.c index bf6b71a..38bbfbe 100644 --- a/findutils/find.c +++ b/findutils/find.c @@ -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]); diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c index 9efccc5..136dd1c 100644 --- a/libbb/xfuncs.c +++ b/libbb/xfuncs.c @@ -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. |