OSDN Git Service

* spawn.cc (av::fixup): Reenable #! handling for all exec functions.
authorcorinna <corinna>
Wed, 19 Jan 2011 14:59:10 +0000 (14:59 +0000)
committercorinna <corinna>
Wed, 19 Jan 2011 14:59:10 +0000 (14:59 +0000)
Return ENOEXEC in !p_type_exec case only for unrecognized files.
Fix comment formatting.

winsup/cygwin/ChangeLog
winsup/cygwin/spawn.cc

index 16f1e95..ca31e51 100644 (file)
@@ -1,5 +1,11 @@
 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>
+
        * exec.cc (execlp): Add missing _P_PATH_TYPE_EXEC flag in call to
        spawnve.
 
index 4575d7b..5f97f41 100644 (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. */
          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.");
              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 ());
 
       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++)
                if (!arg1 && (*ptr == ' ' || *ptr == '\t'))
                  {
-                   /* Null terminate the initial command and step over any additional white
-                      space.  If we've hit the end of the line, exit the loop.  Otherwise,
-                      we've found the first argument. Position the current pointer on the
-                      last known white space. */
+                   /* Null terminate the initial command and step over any
+                      additional white space.  If we've hit the end of the
+                      line, exit the loop.  Otherwise, we've found the first
+                      argument. Position the current pointer on the last known
+                      white space. */
                    *ptr = '\0';
                    char *newptr = ptr + 1;
                    newptr += strspn (newptr, " \t");
@@ -1146,6 +1132,14 @@ av::fixup (const char *prog_arg, path_conv& real_path, const char *ext,
 just_shell:
       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"))
            break;
          pgm = (char *) "/bin/sh";