summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko2010-09-16 16:12:00 +0200
committerDenys Vlasenko2010-09-16 16:12:00 +0200
commit52e460b7440ed5b85e4125a4eccf1e665d92c0ff (patch)
treecc006dc71e4a8e7d4e579e26da9158036a7eca5d
parent0fdf2e1026bed831e3254843e27b0577c9908030 (diff)
downloadbusybox-52e460b7440ed5b85e4125a4eccf1e665d92c0ff.zip
busybox-52e460b7440ed5b85e4125a4eccf1e665d92c0ff.tar.gz
hush: move shell_ver from globals to main's stack.
function old new delta hush_main 995 1011 +16 pseudo_exec_argv 253 251 -2 execvp_or_die 50 48 -2 maybe_set_to_sigexit 50 47 -3 hush_exit 78 75 -3 builtin_wait 274 271 -3 check_and_run_traps 205 200 -5 init_sigmasks 214 190 -24 builtin_trap 465 441 -24 reset_traps_to_defaults 238 211 -27 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/9 up/down: 16/-93) Total: -77 bytes Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
-rw-r--r--shell/hush.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/shell/hush.c b/shell/hush.c
index a888332..6e36078 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -707,8 +707,7 @@ struct globals {
#endif
const char *ifs;
const char *cwd;
- struct variable *top_var; /* = &G.shell_ver (set in main()) */
- struct variable shell_ver;
+ struct variable *top_var;
char **expanded_assignments;
#if ENABLE_HUSH_FUNCTIONS
struct function *top_func;
@@ -7337,6 +7336,7 @@ int hush_main(int argc, char **argv)
unsigned builtin_argc;
char **e;
struct variable *cur_var;
+ struct variable shell_ver;
INIT_G();
if (EXIT_SUCCESS) /* if EXIT_SUCCESS == 0, it is already done */
@@ -7345,12 +7345,13 @@ int hush_main(int argc, char **argv)
G.argv0_for_re_execing = argv[0];
#endif
/* Deal with HUSH_VERSION */
- G.shell_ver.flg_export = 1;
- G.shell_ver.flg_read_only = 1;
+ memset(&shell_ver, 0, sizeof(shell_ver));
+ shell_ver.flg_export = 1;
+ shell_ver.flg_read_only = 1;
/* Code which handles ${var<op>...} needs writable values for all variables,
* therefore we xstrdup: */
- G.shell_ver.varstr = xstrdup(hush_version_str),
- G.top_var = &G.shell_ver;
+ shell_ver.varstr = xstrdup(hush_version_str),
+ G.top_var = &shell_ver;
/* Create shell local variables from the values
* currently living in the environment */
debug_printf_env("unsetenv '%s'\n", "HUSH_VERSION");
@@ -7369,8 +7370,8 @@ int hush_main(int argc, char **argv)
e++;
}
/* (Re)insert HUSH_VERSION into env (AFTER we scanned the env!) */
- debug_printf_env("putenv '%s'\n", G.shell_ver.varstr);
- putenv(G.shell_ver.varstr);
+ debug_printf_env("putenv '%s'\n", shell_ver.varstr);
+ putenv(shell_ver.varstr);
/* Export PWD */
set_pwd_var(/*exp:*/ 1);