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.
This commit is contained in:
Eli Zaretskii 2010-08-07 08:46:06 +00:00
parent 8f029808af
commit b6b6875986
2 changed files with 25 additions and 3 deletions

View File

@ -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> 2010-08-07 Juan Manuel Guerrero <juan.guerrero@gmx.de>
* configh.dos.template (HAVE_STRNCASECMP): Define. * configh.dos.template (HAVE_STRNCASECMP): Define.

View File

@ -1597,11 +1597,24 @@ func_shell (char *o, char **argv, const char *funcname UNUSED)
pid_t pid; pid_t pid;
#ifndef __MSDOS__ #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. */ /* Construct the argument list. */
command_argv = construct_command_argv (argv[0], NULL, NULL, 0, command_argv = construct_command_argv (argv[0], NULL, NULL, 0,
&batch_filename); &batch_filename);
if (command_argv == 0) if (command_argv == 0)
{
#ifdef WINDOWS32
just_print_flag = j_p_f;
#endif
return o; return o;
}
#endif #endif
/* Using a target environment for `shell' loses in cases like: /* 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) #elif defined(WINDOWS32)
windows32_openpipe (pipedes, &pid, command_argv, envp); windows32_openpipe (pipedes, &pid, command_argv, envp);
/* Restore the value of just_print_flag. */
just_print_flag = j_p_f;
if (pipedes[0] < 0) 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; shell_function_completed = -1;
return o; return o;
} }
else else