From b6b687598667e9376f100b805391d435af6f5a0d Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sat, 7 Aug 2010 08:46:06 +0000 Subject: 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. --- ChangeLog | 7 +++++++ function.c | 21 ++++++++++++++++++--- 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 + + * 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 * 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 -- cgit v1.2.3