* 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:
Corinna Vinschen 2011-01-19 14:59:10 +00:00
parent 1393f63206
commit 9b68968b21
2 changed files with 19 additions and 19 deletions

View File

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

View File

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