summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--function.c21
2 files changed, 25 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 8f7d1c3..cc96754 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2010-08-07 Eli Zaretskii <eliz@gnu.org>
+
+ * function.c (func_shell) [WINDOWS32]: Reset just_print_flag
+ around the call to construct_command_argv, so that a temporary
+ batch file _is_ created when needed for $(shell). Fixes Savannah
+ bug #16362.
+
2010-08-07 Juan Manuel Guerrero <juan.guerrero@gmx.de>
* configh.dos.template (HAVE_STRNCASECMP): Define.
diff --git a/function.c b/function.c
index e2f6c8c..2bc61fe 100644
--- a/function.c
+++ b/function.c
@@ -1597,11 +1597,24 @@ func_shell (char *o, char **argv, const char *funcname UNUSED)
pid_t pid;
#ifndef __MSDOS__
+#ifdef WINDOWS32
+ /* Reset just_print_flag. This is needed on Windows when batch files
+ are used to run the commands, because we normally refrain from
+ creating batch files under -n. */
+ int j_p_f = just_print_flag;
+
+ just_print_flag = 0;
+#endif
/* Construct the argument list. */
command_argv = construct_command_argv (argv[0], NULL, NULL, 0,
&batch_filename);
if (command_argv == 0)
- return o;
+ {
+#ifdef WINDOWS32
+ just_print_flag = j_p_f;
+#endif
+ return o;
+ }
#endif
/* Using a target environment for `shell' loses in cases like:
@@ -1637,11 +1650,13 @@ func_shell (char *o, char **argv, const char *funcname UNUSED)
}
#elif defined(WINDOWS32)
windows32_openpipe (pipedes, &pid, command_argv, envp);
+ /* Restore the value of just_print_flag. */
+ just_print_flag = j_p_f;
+
if (pipedes[0] < 0)
{
- /* open of the pipe failed, mark as failed execution */
+ /* Open of the pipe failed, mark as failed execution. */
shell_function_completed = -1;
-
return o;
}
else