OSDN Git Service

* fhandler_disk_file.cc (fhandler_base::fstat_helper): Check
authorcorinna <corinna>
Thu, 9 Oct 2008 14:23:09 +0000 (14:23 +0000)
committercorinna <corinna>
Thu, 9 Oct 2008 14:23:09 +0000 (14:23 +0000)
for executable suffixes here in case we're on a file system
not supporting permission.
* path.cc (path_conv::check): Drop check for executable suffixes.

winsup/cygwin/ChangeLog
winsup/cygwin/fhandler_disk_file.cc
winsup/cygwin/path.cc

index 4e813d4..02dc266 100644 (file)
@@ -1,5 +1,12 @@
 2008-10-09  Corinna Vinschen  <corinna@vinschen.de>
 
+       * fhandler_disk_file.cc (fhandler_base::fstat_helper): Check
+       for executable suffixes here in case we're on a file system
+       not supporting permission.
+       * path.cc (path_conv::check): Drop check for executable suffixes.
+
+2008-10-09  Corinna Vinschen  <corinna@vinschen.de>
+
        * fhandler_floppy.cc (fhandler_dev_floppy::raw_read): Keep track of
        current position in non-buffered case, too.
 
index aa945f5..e3c9aaf 100644 (file)
@@ -609,6 +609,18 @@ fhandler_base::fstat_helper (struct __stat64 *buf,
       else
        {
          buf->st_mode |= S_IFREG;
+         /* Check suffix for executable file. */
+         if (pc.exec_state () == dont_know_if_executable)
+           {
+             PUNICODE_STRING path = pc.get_nt_native_path ();
+
+             if (RtlEqualUnicodePathSuffix (path, L".exe", TRUE)
+                 || RtlEqualUnicodePathSuffix (path, L".bat", TRUE)
+                 || RtlEqualUnicodePathSuffix (path, L".com", TRUE))
+               pc.set_exec ();
+           }
+         /* No known sufix, check file header.  This catches binaries and
+            shebang scripts. */
          if (pc.exec_state () == dont_know_if_executable)
            {
              UNICODE_STRING same;
index 9b85a93..442e7bb 100644 (file)
@@ -1248,17 +1248,6 @@ out:
   if (saw_symlinks)
     set_has_symlinks ();
 
-  if (!error && !isdir () && !(path_flags & PATH_ALL_EXEC)
-      && !fs.has_acls () && !fs.is_nfs ())
-    {
-      const char *p = strchr (path, '\0') - 4;
-      if (p >= path &&
-         (ascii_strcasematch (".exe", p) ||
-          ascii_strcasematch (".bat", p) ||
-          ascii_strcasematch (".com", p)))
-       path_flags |= PATH_EXEC;
-    }
-
   if (!(opt & PC_POSIX))
     normalized_path_size = 0;
   else