mirror of
https://github.com/mirror/make.git
synced 2024-12-27 13:20:34 +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>
|
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
|
* load.c (load_object): Extract all POSIX-isms into a separate
|
||||||
function for portability.
|
function for portability.
|
||||||
(load_file): Check the .LOADED variable first and don't invoke
|
(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';
|
*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
|
#ifdef WINDOWS32
|
||||||
else /* non-Posix shell */
|
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[0] = xstrdup (*batch_filename);
|
||||||
new_argv[1] = NULL;
|
new_argv[1] = NULL;
|
||||||
}
|
}
|
||||||
#endif /* WINDOWS32 */
|
#else /* WINDOWS32 */
|
||||||
return new_argv;
|
/* 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
|
new_line = xmalloc ((shell_len*2) + 1 + sflags_len + 1
|
||||||
|
Loading…
Reference in New Issue
Block a user