Rename two config options:
FEATURE_SH_STANDALONE_SHELL => FEATURE_SH_STANDALONE FEATURE_EXEC_PREFER_APPLETS => FEATURE_PREFER_APPLETS Make SH_STANDALONE depend on PREFER_APPLETS. getopt.c: more randomconfig-induced fixes
This commit is contained in:
@ -13,7 +13,6 @@
|
||||
* that too seems silly.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "libbb.h"
|
||||
|
||||
int xfunc_error_retval = EXIT_FAILURE;
|
||||
|
@ -10,14 +10,14 @@
|
||||
#include "libbb.h"
|
||||
|
||||
int die_sleep;
|
||||
#if ENABLE_FEATURE_EXEC_PREFER_APPLETS
|
||||
#if ENABLE_FEATURE_PREFER_APPLETS
|
||||
jmp_buf die_jmp;
|
||||
#endif
|
||||
|
||||
void xfunc_die(void)
|
||||
{
|
||||
if (die_sleep) {
|
||||
if (ENABLE_FEATURE_EXEC_PREFER_APPLETS && die_sleep < 0) {
|
||||
if (ENABLE_FEATURE_PREFER_APPLETS && die_sleep < 0) {
|
||||
/* Special case. We arrive here if NOFORK applet
|
||||
* calls xfunc, which then decides to die.
|
||||
* We don't die, but jump instead back to caller.
|
||||
|
@ -60,7 +60,7 @@ int exists_execable(const char *filename)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if ENABLE_FEATURE_EXEC_PREFER_APPLETS
|
||||
#if ENABLE_FEATURE_PREFER_APPLETS
|
||||
/* just like the real execvp, but try to launch an applet named 'file' first
|
||||
*/
|
||||
int bb_execvp(const char *file, char *const argv[])
|
||||
|
@ -18,7 +18,7 @@ void fflush_stdout_and_exit(int retval)
|
||||
if (fflush(stdout))
|
||||
xfunc_die();
|
||||
|
||||
if (ENABLE_FEATURE_EXEC_PREFER_APPLETS && die_sleep < 0) {
|
||||
if (ENABLE_FEATURE_PREFER_APPLETS && die_sleep < 0) {
|
||||
/* We are in NOFORK applet. Do not exit() directly,
|
||||
* but use xfunc_die() */
|
||||
xfunc_error_retval = retval;
|
||||
|
@ -102,7 +102,7 @@ int wait_pid(int *wstat, int pid)
|
||||
|
||||
int spawn_and_wait(char **argv)
|
||||
{
|
||||
#if ENABLE_FEATURE_EXEC_PREFER_APPLETS
|
||||
#if ENABLE_FEATURE_PREFER_APPLETS
|
||||
int rc;
|
||||
const struct bb_applet *a = find_applet_by_name(argv[0]);
|
||||
|
||||
@ -121,8 +121,13 @@ int spawn_and_wait(char **argv)
|
||||
{
|
||||
int old_sleep = die_sleep;
|
||||
int old_x = xfunc_error_retval;
|
||||
die_sleep = -1; /* special flag */
|
||||
/* xfunc_die() checks for it */
|
||||
uint32_t old_m = option_mask32;
|
||||
|
||||
xfunc_error_retval = EXIT_FAILURE;
|
||||
/* special flag for xfunc_die(). If xfunc will "die"
|
||||
* in NOFORK applet, xfunc_die() sees negative
|
||||
* die_sleep and longjmp here instead. */
|
||||
die_sleep = -1;
|
||||
|
||||
rc = setjmp(die_jmp);
|
||||
if (!rc) {
|
||||
@ -144,6 +149,7 @@ int spawn_and_wait(char **argv)
|
||||
|
||||
die_sleep = old_sleep;
|
||||
xfunc_error_retval = old_x;
|
||||
option_mask32 = old_m;
|
||||
return rc;
|
||||
}
|
||||
#ifndef BB_NOMMU /* MMU only */
|
||||
@ -159,7 +165,7 @@ int spawn_and_wait(char **argv)
|
||||
rc = spawn(argv);
|
||||
w:
|
||||
return wait4pid(rc);
|
||||
#else /* !FEATURE_EXEC_PREFER_APPLETS */
|
||||
#else /* !FEATURE_PREFER_APPLETS */
|
||||
return wait4pid(spawn(argv));
|
||||
#endif
|
||||
}
|
||||
|
Reference in New Issue
Block a user