summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--lash.c17
-rw-r--r--sh.c17
-rw-r--r--shell/lash.c17
3 files changed, 45 insertions, 6 deletions
diff --git a/lash.c b/lash.c
index 3d54b439e..c756a2749 100644
--- a/lash.c
+++ b/lash.c
@@ -73,7 +73,7 @@ static const unsigned int IF_TRUE_CONTEXT=0x2;
static const unsigned int IF_FALSE_CONTEXT=0x4;
static const unsigned int THEN_EXP_CONTEXT=0x8;
static const unsigned int ELSE_EXP_CONTEXT=0x10;
-unsigned int shell_context = 0;
+unsigned int shell_context;
@@ -185,7 +185,7 @@ static struct built_in_command bltins_forking[] = {
};
static char *cwd;
-static char *local_pending_command = NULL;
+static char *local_pending_command;
static struct jobset job_list = { NULL, NULL };
static int argc;
static char **argv;
@@ -1629,6 +1629,19 @@ int shell_main(int argc_l, char **argv_l)
argc = argc_l;
argv = argv_l;
+ shell_context = 0;
+ cwd=NULL;
+#ifdef BB_FEATURE_STANDALONE_SHELL
+ /* These variables need re-initializing when recursing */
+ local_pending_command = NULL;
+ job_list.head = NULL;
+ job_list.fg = NULL;
+#ifdef BB_FEATURE_SH_ENVIRONMENT
+ last_bg_pid=-1;
+ last_return_code=-1;
+ show_x_trace=FALSE;
+#endif
+#endif
if (argv[0] && argv[0][0] == '-') {
FILE *input;
diff --git a/sh.c b/sh.c
index 3d54b439e..c756a2749 100644
--- a/sh.c
+++ b/sh.c
@@ -73,7 +73,7 @@ static const unsigned int IF_TRUE_CONTEXT=0x2;
static const unsigned int IF_FALSE_CONTEXT=0x4;
static const unsigned int THEN_EXP_CONTEXT=0x8;
static const unsigned int ELSE_EXP_CONTEXT=0x10;
-unsigned int shell_context = 0;
+unsigned int shell_context;
@@ -185,7 +185,7 @@ static struct built_in_command bltins_forking[] = {
};
static char *cwd;
-static char *local_pending_command = NULL;
+static char *local_pending_command;
static struct jobset job_list = { NULL, NULL };
static int argc;
static char **argv;
@@ -1629,6 +1629,19 @@ int shell_main(int argc_l, char **argv_l)
argc = argc_l;
argv = argv_l;
+ shell_context = 0;
+ cwd=NULL;
+#ifdef BB_FEATURE_STANDALONE_SHELL
+ /* These variables need re-initializing when recursing */
+ local_pending_command = NULL;
+ job_list.head = NULL;
+ job_list.fg = NULL;
+#ifdef BB_FEATURE_SH_ENVIRONMENT
+ last_bg_pid=-1;
+ last_return_code=-1;
+ show_x_trace=FALSE;
+#endif
+#endif
if (argv[0] && argv[0][0] == '-') {
FILE *input;
diff --git a/shell/lash.c b/shell/lash.c
index 3d54b439e..c756a2749 100644
--- a/shell/lash.c
+++ b/shell/lash.c
@@ -73,7 +73,7 @@ static const unsigned int IF_TRUE_CONTEXT=0x2;
static const unsigned int IF_FALSE_CONTEXT=0x4;
static const unsigned int THEN_EXP_CONTEXT=0x8;
static const unsigned int ELSE_EXP_CONTEXT=0x10;
-unsigned int shell_context = 0;
+unsigned int shell_context;
@@ -185,7 +185,7 @@ static struct built_in_command bltins_forking[] = {
};
static char *cwd;
-static char *local_pending_command = NULL;
+static char *local_pending_command;
static struct jobset job_list = { NULL, NULL };
static int argc;
static char **argv;
@@ -1629,6 +1629,19 @@ int shell_main(int argc_l, char **argv_l)
argc = argc_l;
argv = argv_l;
+ shell_context = 0;
+ cwd=NULL;
+#ifdef BB_FEATURE_STANDALONE_SHELL
+ /* These variables need re-initializing when recursing */
+ local_pending_command = NULL;
+ job_list.head = NULL;
+ job_list.fg = NULL;
+#ifdef BB_FEATURE_SH_ENVIRONMENT
+ last_bg_pid=-1;
+ last_return_code=-1;
+ show_x_trace=FALSE;
+#endif
+#endif
if (argv[0] && argv[0][0] == '-') {
FILE *input;