summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Smith <psmith@gnu.org>2013-04-27 17:28:05 -0400
committerPaul Smith <psmith@gnu.org>2013-04-27 17:28:05 -0400
commit30843dea3a17f84b7456f68d75e5cd6bd5c5e11b (patch)
tree8cb0f60c03eb50c017b91fe83e77046dc19dd7c9
parent14d76545514ac7c1d412cf44419168a70638c042 (diff)
downloadgunmake-30843dea3a17f84b7456f68d75e5cd6bd5c5e11b.tar.gz
Fix support for .ONESHELL when dealing with non-POSIX shells.
-rw-r--r--ChangeLog3
-rw-r--r--job.c52
2 files changed, 29 insertions, 26 deletions
diff --git a/ChangeLog b/ChangeLog
index 57528a9..d0dabb1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
diff --git a/job.c b/job.c
index 61568f9..addeca2 100644
--- a/job.c
+++ b/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