summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Andersen2001-01-05 19:34:52 +0000
committerEric Andersen2001-01-05 19:34:52 +0000
commitb0970d4fede16b6c1186b677c6d7d9e4652e459a (patch)
tree7415bf3a17f71b1ef86677b7ac0a06886b7905c5
parenteb60d8bcd1ea8f35af23b078e677350b86c1ee8d (diff)
downloadbusybox-b0970d4fede16b6c1186b677c6d7d9e4652e459a.zip
busybox-b0970d4fede16b6c1186b677c6d7d9e4652e459a.tar.gz
Patch from Larry Doolittle to set values to static variables that live in the
bss at runtime, since sh.c can call sh.c, which causes these variables to not be set to their defaults as god intended. -Erik
-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 3d54b43..c756a27 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 3d54b43..c756a27 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 3d54b43..c756a27 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;