summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--main.c11
2 files changed, 13 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 4620aa2..6ec8a1d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2004-11-28 Paul D. Smith <psmith@gnu.org>
+
+ * main.c (find_and_set_default_shell) [WINDOWS32]: check for
+ equality of "cmd"/"cmd.exe", not inequality. Fixes bug #11155.
+ Patch by Alessandro Vesely.
+
2004-11-12 Paul D. Smith <psmith@gnu.org>
* job.c (child_execute_job) [VMS]: Don't treat "#" as a comment on
diff --git a/main.c b/main.c
index 5cb387f..ca6318b 100644
--- a/main.c
+++ b/main.c
@@ -718,11 +718,11 @@ find_and_set_default_shell (char *token)
if (((tokend == search_token
|| (tokend > search_token
&& (tokend[-1] == '/' || tokend[-1] == '\\')))
- && strcmpi (tokend, "cmd"))
+ && !strcmpi (tokend, "cmd"))
|| ((tokend - 4 == search_token
|| (tokend - 4 > search_token
&& (tokend[-5] == '/' || tokend[-5] == '\\')))
- && strcmpi (tokend - 4, "cmd.exe"))) {
+ && !strcmpi (tokend - 4, "cmd.exe"))) {
batch_mode_shell = 1;
unixy_shell = 0;
sh_found = 0;
@@ -1071,8 +1071,11 @@ main (int argc, char **argv, char **envp)
We used to rely on target_environment's v_default code to do this.
But that does not work for the case where an environment variable
is redefined in a makefile with `override'; it should then still
- be exported, because it was originally in the environment. */
- ->export = v_export;
+ be exported, because it was originally in the environment.
+ Another wrinkle is that POSIX says the value of SHELL set in the
+ makefile should not change the value of SHELL given to
+ subprocesses, which seems silly to me but... */
+ ->export = strncmp(envp[i], "SHELL=", 6) ? v_noexport : v_export;
}
#ifdef WINDOWS32
/*