Fix support for .ONESHELL when dealing with non-POSIX shells.

This commit is contained in:
Paul Smith 2013-04-27 17:28:05 -04:00
parent 14d7654551
commit 30843dea3a
2 changed files with 29 additions and 26 deletions

View File

@ -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
View File

@ -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