summaryrefslogtreecommitdiff
path: root/shell/hush.c
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2007-05-25 11:12:32 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2007-05-25 11:12:32 +0000
commit0a83fc398495799b4c96f3cd07304d38181cfc6f (patch)
treed05666335cf16079b7f52c5d75d3bf395fef2b86 /shell/hush.c
parent201c72a8d672c1e2985bd340f6fa527251d695ba (diff)
downloadbusybox-w32-0a83fc398495799b4c96f3cd07304d38181cfc6f.tar.gz
busybox-w32-0a83fc398495799b4c96f3cd07304d38181cfc6f.tar.bz2
busybox-w32-0a83fc398495799b4c96f3cd07304d38181cfc6f.zip
hush: avoid duplicating HUSH_VERSION
Diffstat (limited to 'shell/hush.c')
-rw-r--r--shell/hush.c31
1 files changed, 16 insertions, 15 deletions
diff --git a/shell/hush.c b/shell/hush.c
index 1c7cddd36..a7b55415f 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -329,16 +329,6 @@ enum {
329 329
330#define HUSH_VER_STR "0.02" 330#define HUSH_VER_STR "0.02"
331 331
332static const char version_str[] = "HUSH_VERSION="HUSH_VER_STR;
333
334static const struct variable const_shell_ver = {
335 .next = NULL,
336 .varstr = (char*)version_str,
337 .max_len = 1, /* 0 can provoke free(name) */
338 .flg_export = 1,
339 .flg_read_only = 1,
340};
341
342/* "Globals" within this file */ 332/* "Globals" within this file */
343 333
344/* Sorted roughly by size (smaller offsets == smaller code) */ 334/* Sorted roughly by size (smaller offsets == smaller code) */
@@ -371,8 +361,8 @@ struct globals {
371 struct close_me *close_me_head; 361 struct close_me *close_me_head;
372 const char *cwd; 362 const char *cwd;
373 unsigned last_bg_pid; 363 unsigned last_bg_pid;
374 struct variable *top_var; /* = &shell_ver (both are set in main()) */ 364 struct variable *top_var; /* = &shell_ver (set in main()) */
375 struct variable shell_ver; /* = const_shell_ver */ 365 struct variable shell_ver;
376#if ENABLE_FEATURE_SH_STANDALONE 366#if ENABLE_FEATURE_SH_STANDALONE
377 struct nofork_save_area nofork_save; 367 struct nofork_save_area nofork_save;
378#endif 368#endif
@@ -3661,6 +3651,15 @@ static void setup_job_control(void)
3661int hush_main(int argc, char **argv); 3651int hush_main(int argc, char **argv);
3662int hush_main(int argc, char **argv) 3652int hush_main(int argc, char **argv)
3663{ 3653{
3654 static const char version_str[] = "HUSH_VERSION="HUSH_VER_STR;
3655 static const struct variable const_shell_ver = {
3656 .next = NULL,
3657 .varstr = (char*)version_str,
3658 .max_len = 1, /* 0 can provoke free(name) */
3659 .flg_export = 1,
3660 .flg_read_only = 1,
3661 };
3662
3664 int opt; 3663 int opt;
3665 FILE *input; 3664 FILE *input;
3666 char **e; 3665 char **e;
@@ -3668,12 +3667,14 @@ int hush_main(int argc, char **argv)
3668 3667
3669 PTR_TO_GLOBALS = xzalloc(sizeof(G)); 3668 PTR_TO_GLOBALS = xzalloc(sizeof(G));
3670 3669
3670 /* Deal with HUSH_VERSION */
3671 shell_ver = const_shell_ver; /* copying struct here */ 3671 shell_ver = const_shell_ver; /* copying struct here */
3672 top_var = &shell_ver; 3672 top_var = &shell_ver;
3673 /* initialize our shell local variables with the values 3673 unsetenv("HUSH_VERSION"); /* in case it exists in initial env */
3674 /* Initialize our shell local variables with the values
3674 * currently living in the environment */ 3675 * currently living in the environment */
3675 e = environ;
3676 cur_var = top_var; 3676 cur_var = top_var;
3677 e = environ;
3677 if (e) while (*e) { 3678 if (e) while (*e) {
3678 char *value = strchr(*e, '='); 3679 char *value = strchr(*e, '=');
3679 if (value) { /* paranoia */ 3680 if (value) { /* paranoia */
@@ -3685,7 +3686,7 @@ int hush_main(int argc, char **argv)
3685 } 3686 }
3686 e++; 3687 e++;
3687 } 3688 }
3688 putenv(shell_ver.varstr); 3689 putenv((char *)version_str); /* reinstate HUSH_VERSION */
3689 3690
3690#if ENABLE_FEATURE_EDITING 3691#if ENABLE_FEATURE_EDITING
3691 line_input_state = new_line_input_t(FOR_SHELL); 3692 line_input_state = new_line_input_t(FOR_SHELL);