--- job.c.orig Fri Oct 29 17:19:01 2004
+++ job.c Fri Oct 29 17:23:35 2004
@@ -1011,8 +1011,16 @@
#else
(argv[0] && !strcmp (argv[0], "/bin/sh"))
#endif
+#if defined(__APPLE__) || defined(NeXT) || defined(NeXT_PDO)
+
+ && ((argv[1]
+ && argv[1][0] == '-' && argv[1][1] == 'c' && argv[1][2] == '\0') ||
+ (argv[1]
+ && argv[1][0] == '-' && argv[1][1] == 'e' && argv[1][2] == 'c' && argv[1][3] == '\0'))
+#else
&& (argv[1]
&& argv[1][0] == '-' && argv[1][1] == 'c' && argv[1][2] == '\0')
+#endif __APPLE__ || NeXT || NeXT_PDO
&& (argv[2] && argv[2][0] == ':' && argv[2][1] == '\0')
&& argv[3] == NULL)
{
@@ -1464,6 +1472,19 @@
file);
}
+#if defined(__APPLE__) || defined(NeXT) || defined(NeXT_PDO)
+ if (next_flag & NEXT_VPATH_FLAG) {
+ for (i = 0; i < cmds->ncommand_lines; ++i) {
+ char *line;
+ if (lines[i] != 0) {
+ line = allocated_vpath_expand_for_file (lines[i], file);
+ free (lines[i]);
+ lines[i] = line;
+ }
+ }
+ }
+#endif
+
@@ -2848,22 +2869,39 @@
argument list. */
unsigned int shell_len = strlen (shell);
+ unsigned int line_len = strlen (line);
+ char *new_line;
+ char *command_ptr = NULL;
+
+#if defined(__APPLE__) || defined(NeXT) || defined(NeXT_PDO)
+ char *minus_c;
+ int minus_c_len;
+
+ if (next_flag & NEXT_ERREXIT_FLAG) {
+ minus_c = " -ec ";
+ minus_c_len = 5;
+ } else {
+ minus_c = " -c ";
+ minus_c_len = 4;
+ }
+#else
#ifndef VMS
static char minus_c[] = " -c ";
+ int minus_c_len = 4;
#else
static char minus_c[] = "";
+ int minus_c_len = 0;
#endif
- unsigned int line_len = strlen (line);
+#endif
- char *new_line = (char *) alloca (shell_len + (sizeof (minus_c) - 1)
- + (line_len * 2) + 1);
- char *command_ptr = NULL;
+ new_line = (char *) alloca (shell_len + minus_c_len
+ + (line_len * 2) + 1);
ap = new_line;
bcopy (shell, ap, shell_len);
ap += shell_len;
- bcopy (minus_c, ap, sizeof (minus_c) - 1);
- ap += sizeof (minus_c) - 1;
+ bcopy (minus_c, ap, minus_c_len);
+ ap += minus_c_len;
command_ptr = ap;
for (p = line; *p != '\0'; ++p)
{
@@ -2911,7 +2949,7 @@
#endif
*ap++ = *p;
}
- if (ap == new_line + shell_len + sizeof (minus_c) - 1)
+ if (ap == new_line + shell_len + minus_c_len)
return 0;
*ap = '\0';
@@ -2979,10 +3017,10 @@
instead of recursively calling ourselves, because we
cannot backslash-escape the special characters (see above). */
new_argv = (char **) xmalloc (sizeof (char *));
- line_len = strlen (new_line) - shell_len - sizeof (minus_c) + 1;
+ line_len = strlen (new_line) - shell_len - minus_c_len;
new_argv[0] = xmalloc (line_len + 1);
strncpy (new_argv[0],
- new_line + shell_len + sizeof (minus_c) - 1, line_len);
+ new_line + shell_len + minus_c_len, line_len);
new_argv[0][line_len] = '\0';
}
#else