mirror of
https://github.com/mirror/make.git
synced 2024-12-26 21:00:30 +08:00
Fix support for .ONESHELL when dealing with non-POSIX shells.
This commit is contained in:
parent
14d7654551
commit
30843dea3a
@ -1,5 +1,8 @@
|
||||
2013-04-27 Paul Smith <psmith@gnu.org>
|
||||
|
||||
* job.c (construct_command_argv_internal): Fix oneshell support
|
||||
for non-POSIX-sh shells.
|
||||
|
||||
* load.c (load_object): Extract all POSIX-isms into a separate
|
||||
function for portability.
|
||||
(load_file): Check the .LOADED variable first and don't invoke
|
||||
|
52
job.c
52
job.c
@ -3272,30 +3272,6 @@ construct_command_argv_internal (char *line, char **restp, char *shell,
|
||||
}
|
||||
}
|
||||
*t = '\0';
|
||||
|
||||
/* Create an argv list for the shell command line. */
|
||||
{
|
||||
int n = 0;
|
||||
|
||||
new_argv = xmalloc ((4 + sflags_len/2) * sizeof (char *));
|
||||
new_argv[n++] = xstrdup (shell);
|
||||
|
||||
/* Chop up the shellflags (if any) and assign them. */
|
||||
if (! shellflags)
|
||||
new_argv[n++] = xstrdup ("");
|
||||
else
|
||||
{
|
||||
const char *s = shellflags;
|
||||
char *t;
|
||||
unsigned int len;
|
||||
while ((t = find_next_token (&s, &len)) != 0)
|
||||
new_argv[n++] = xstrndup (t, len);
|
||||
}
|
||||
|
||||
/* Set the command to invoke. */
|
||||
new_argv[n++] = line;
|
||||
new_argv[n++] = NULL;
|
||||
}
|
||||
}
|
||||
#ifdef WINDOWS32
|
||||
else /* non-Posix shell */
|
||||
@ -3368,8 +3344,32 @@ construct_command_argv_internal (char *line, char **restp, char *shell,
|
||||
new_argv[0] = xstrdup (*batch_filename);
|
||||
new_argv[1] = NULL;
|
||||
}
|
||||
#endif /* WINDOWS32 */
|
||||
return new_argv;
|
||||
#else /* WINDOWS32 */
|
||||
/* Create an argv list for the shell command line. */
|
||||
{
|
||||
int n = 0;
|
||||
|
||||
new_argv = xmalloc ((4 + sflags_len/2) * sizeof (char *));
|
||||
new_argv[n++] = xstrdup (shell);
|
||||
|
||||
/* Chop up the shellflags (if any) and assign them. */
|
||||
if (! shellflags)
|
||||
new_argv[n++] = xstrdup ("");
|
||||
else
|
||||
{
|
||||
const char *s = shellflags;
|
||||
char *t;
|
||||
unsigned int len;
|
||||
while ((t = find_next_token (&s, &len)) != 0)
|
||||
new_argv[n++] = xstrndup (t, len);
|
||||
}
|
||||
|
||||
/* Set the command to invoke. */
|
||||
new_argv[n++] = line;
|
||||
new_argv[n++] = NULL;
|
||||
}
|
||||
#endif /* WINDOWS32 */
|
||||
return new_argv;
|
||||
}
|
||||
|
||||
new_line = xmalloc ((shell_len*2) + 1 + sflags_len + 1
|
||||
|
Loading…
Reference in New Issue
Block a user