* spawn.cc (av::fixup): Reenable #! handling for all exec functions.
Return ENOEXEC in !p_type_exec case only for unrecognized files. Fix comment formatting.
This commit is contained in:
parent
1393f63206
commit
9b68968b21
|
@ -1,3 +1,9 @@
|
||||||
|
2011-01-19 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
* spawn.cc (av::fixup): Reenable #! handling for all exec functions.
|
||||||
|
Return ENOEXEC in !p_type_exec case only for unrecognized files.
|
||||||
|
Fix comment formatting.
|
||||||
|
|
||||||
2011-01-19 Corinna Vinschen <corinna@vinschen.de>
|
2011-01-19 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* exec.cc (execlp): Add missing _P_PATH_TYPE_EXEC flag in call to
|
* exec.cc (execlp): Add missing _P_PATH_TYPE_EXEC flag in call to
|
||||||
|
|
|
@ -1066,13 +1066,6 @@ av::fixup (const char *prog_arg, path_conv& real_path, const char *ext,
|
||||||
/* ERROR_FILE_INVALID indicates very likely an empty file. */
|
/* ERROR_FILE_INVALID indicates very likely an empty file. */
|
||||||
if (GetLastError () == ERROR_FILE_INVALID)
|
if (GetLastError () == ERROR_FILE_INVALID)
|
||||||
{
|
{
|
||||||
if (!p_type_exec)
|
|
||||||
{
|
|
||||||
/* Not called from exec[lv]p. Just leave. */
|
|
||||||
debug_printf ("zero length file.");
|
|
||||||
set_errno (ENOEXEC);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
debug_printf ("zero length file, treat as script.");
|
debug_printf ("zero length file, treat as script.");
|
||||||
goto just_shell;
|
goto just_shell;
|
||||||
}
|
}
|
||||||
|
@ -1105,14 +1098,6 @@ av::fixup (const char *prog_arg, path_conv& real_path, const char *ext,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!p_type_exec)
|
|
||||||
{
|
|
||||||
/* Not called from exec[lv]p. Don't try to treat as script. */
|
|
||||||
debug_printf ("%s is not a valid executable", real_path.get_win32 ());
|
|
||||||
set_errno (ENOEXEC);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
debug_printf ("%s is possibly a script", real_path.get_win32 ());
|
debug_printf ("%s is possibly a script", real_path.get_win32 ());
|
||||||
|
|
||||||
ptr = buf;
|
ptr = buf;
|
||||||
|
@ -1128,10 +1113,11 @@ av::fixup (const char *prog_arg, path_conv& real_path, const char *ext,
|
||||||
for (ptr = pgm = namebuf; *ptr; ptr++)
|
for (ptr = pgm = namebuf; *ptr; ptr++)
|
||||||
if (!arg1 && (*ptr == ' ' || *ptr == '\t'))
|
if (!arg1 && (*ptr == ' ' || *ptr == '\t'))
|
||||||
{
|
{
|
||||||
/* Null terminate the initial command and step over any additional white
|
/* Null terminate the initial command and step over any
|
||||||
space. If we've hit the end of the line, exit the loop. Otherwise,
|
additional white space. If we've hit the end of the
|
||||||
we've found the first argument. Position the current pointer on the
|
line, exit the loop. Otherwise, we've found the first
|
||||||
last known white space. */
|
argument. Position the current pointer on the last known
|
||||||
|
white space. */
|
||||||
*ptr = '\0';
|
*ptr = '\0';
|
||||||
char *newptr = ptr + 1;
|
char *newptr = ptr + 1;
|
||||||
newptr += strspn (newptr, " \t");
|
newptr += strspn (newptr, " \t");
|
||||||
|
@ -1146,6 +1132,14 @@ av::fixup (const char *prog_arg, path_conv& real_path, const char *ext,
|
||||||
just_shell:
|
just_shell:
|
||||||
if (!pgm)
|
if (!pgm)
|
||||||
{
|
{
|
||||||
|
if (!p_type_exec)
|
||||||
|
{
|
||||||
|
/* Not called from exec[lv]p. Don't try to treat as script. */
|
||||||
|
debug_printf ("%s is not a valid executable",
|
||||||
|
real_path.get_win32 ());
|
||||||
|
set_errno (ENOEXEC);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
if (ascii_strcasematch (ext, ".com"))
|
if (ascii_strcasematch (ext, ".com"))
|
||||||
break;
|
break;
|
||||||
pgm = (char *) "/bin/sh";
|
pgm = (char *) "/bin/sh";
|
||||||
|
|
Loading…
Reference in New Issue