summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Smith <psmith@gnu.org>2004-12-05 18:09:31 +0000
committerPaul Smith <psmith@gnu.org>2004-12-05 18:09:31 +0000
commit6c2179059550ac8e9db87c119bc01b8b2959d2ff (patch)
treee5a68db6fa6625753a80e28ce3dbe5f0b9f4eec8
parent6c9e53d64804a856580876f2019ce4ea1e42b4e0 (diff)
downloadgunmake-6c2179059550ac8e9db87c119bc01b8b2959d2ff.tar.gz
Fix bug with SHELL handling: make sure the variable struct is initialized.
-rw-r--r--ChangeLog5
-rw-r--r--main.c5
-rw-r--r--make.h2
-rw-r--r--variable.c16
4 files changed, 15 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog
index a30f989..fe318e7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2004-12-01 Paul D. Smith <psmith@gnu.org>
+
+ * main.c (main): Change char* env_shell to struct variable shell_var.
+ * variable.c (target_environment): Use new shell_var.
+
2004-11-30 Paul D. Smith <psmith@gnu.org>
* configure.in: The old way we avoided creating build.sh from
diff --git a/main.c b/main.c
index 763fd54..1086908 100644
--- a/main.c
+++ b/main.c
@@ -266,7 +266,7 @@ int rebuilding_makefiles = 0;
/* Remember the original value of the SHELL variable, from the environment. */
-const char *env_shell = 0;
+struct variable shell_var;
/* The usage output. We write it this way to make life easier for the
@@ -1084,7 +1084,8 @@ main (int argc, char **argv, char **envp)
if (strncmp (envp[i], "SHELL=", 6) == 0)
{
v->export = v_noexport;
- env_shell = xstrdup (ep + 1);
+ shell_var.name = "SHELL";
+ shell_var.value = xstrdup (ep + 1);
}
}
}
diff --git a/make.h b/make.h
index 55dcc21..ad46e1f 100644
--- a/make.h
+++ b/make.h
@@ -496,8 +496,6 @@ extern int print_version_flag, print_directory_flag;
extern int warn_undefined_variables_flag, posix_pedantic, not_parallel;
extern int clock_skew_detected, rebuilding_makefiles;
-extern const char *env_shell;
-
/* can we run commands via 'sh -c xxx' or must we use batch files? */
extern int batch_mode_shell;
diff --git a/variable.c b/variable.c
index 8398d18..495aef4 100644
--- a/variable.c
+++ b/variable.c
@@ -807,11 +807,6 @@ target_environment (struct file *file)
struct variable makelevel_key;
char **result_0;
char **result;
- struct variable ev;
-
- /* Set up a fake variable struct for the original SHELL value. */
- ev.name = "SHELL";
- ev.value = env_shell;
if (file == 0)
set_list = current_variable_set_list;
@@ -868,12 +863,15 @@ target_environment (struct file *file)
break;
case v_noexport:
- if (!streq (v->name, "SHELL"))
- continue;
/* If this is the SHELL variable and it's not exported, then
add the value from our original environment. */
- v = &ev;
- break;
+ if (streq (v->name, "SHELL"))
+ {
+ extern struct variable shell_var;
+ v = &shell_var;
+ break;
+ }
+ continue;
case v_ifset:
if (v->origin == o_default)