diff options
author | Paul Smith <psmith@gnu.org> | 2013-04-27 17:28:05 -0400 |
---|---|---|
committer | Paul Smith <psmith@gnu.org> | 2013-04-27 17:28:05 -0400 |
commit | 30843dea3a17f84b7456f68d75e5cd6bd5c5e11b (patch) | |
tree | 8cb0f60c03eb50c017b91fe83e77046dc19dd7c9 | |
parent | 14d76545514ac7c1d412cf44419168a70638c042 (diff) | |
download | gunmake-30843dea3a17f84b7456f68d75e5cd6bd5c5e11b.tar.gz |
Fix support for .ONESHELL when dealing with non-POSIX shells.
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | job.c | 52 |
2 files changed, 29 insertions, 26 deletions
@@ -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 @@ -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 |