OSDN Git Service

* fhandler_disk_file.cc (fhandler_disk_file::fstat_helper): Always consider
authorcgf <cgf>
Tue, 22 Oct 2002 20:41:30 +0000 (20:41 +0000)
committercgf <cgf>
Tue, 22 Oct 2002 20:41:30 +0000 (20:41 +0000)
.exe files and '#!' shell scripts to be executable.

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

index dd05d4a..b043528 100644 (file)
@@ -1,5 +1,10 @@
 2002-10-22  Christopher Faylor  <cgf@redhat.com>
 
+       * fhandler_disk_file.cc (fhandler_disk_file::fstat_helper): Always
+       consider .exe files and '#!' shell scripts to be executable.
+
+2002-10-22  Christopher Faylor  <cgf@redhat.com>
+
        * cygthread.cc (cygthread::exiting): New variable.
        (cygthread::initialized): Delete.
        (cygthread::stub): Use exiting variable to determine when to exit.
index f8a7afc..85b8b34 100644 (file)
@@ -300,35 +300,38 @@ fhandler_disk_file::fstat_helper (struct __stat64 *buf, path_conv *pc,
       else
        {
          buf->st_mode |= S_IFREG;
-         if (pc->exec_state () == dont_know_if_executable)
-           {
-             DWORD cur, done;
-             char magic[3];
-
-             /* First retrieve current position, set to beginning
-                of file if not already there. */
-             cur = SetFilePointer (get_handle (), 0, NULL, FILE_CURRENT);
-             if (cur != INVALID_SET_FILE_POINTER &&
-                 (!cur ||
-                  SetFilePointer (get_handle (), 0, NULL, FILE_BEGIN)
-                  != INVALID_SET_FILE_POINTER))
-               {
-                 /* FIXME should we use /etc/magic ? */
-                 magic[0] = magic[1] = magic[2] = '\0';
-                 if (ReadFile (get_handle (), magic, 3, &done, NULL) &&
-                     has_exec_chars (magic, done))
-                   {
-                     set_execable_p ();
-                     pc->set_exec ();
-                   }
-                 SetFilePointer (get_handle (), cur, NULL, FILE_BEGIN);
-               }
-           }
-         if (pc->exec_state () == is_executable)
-           buf->st_mode |= STD_XBITS;
        }
     }
 
+    if (buf->st_mode & STD_XBITS)
+      /* already derived */;
+    else if (pc->exec_state () == is_executable)
+      buf->st_mode |= STD_XBITS;
+    else if (pc->exec_state () == dont_know_if_executable)
+      {
+       DWORD cur, done;
+       char magic[3];
+
+       /* First retrieve current position, set to beginning
+          of file if not already there. */
+       cur = SetFilePointer (get_handle (), 0, NULL, FILE_CURRENT);
+       if (cur != INVALID_SET_FILE_POINTER
+           && (!cur || SetFilePointer (get_handle (), 0, NULL, FILE_BEGIN)
+               != INVALID_SET_FILE_POINTER))
+         {
+           /* FIXME should we use /etc/magic ? */
+           magic[0] = magic[1] = magic[2] = '\0';
+           if (ReadFile (get_handle (), magic, 3, &done, NULL) &&
+               has_exec_chars (magic, done))
+             {
+               set_execable_p ();
+               pc->set_exec ();
+               buf->st_mode |= STD_XBITS;
+             }
+           SetFilePointer (get_handle (), cur, NULL, FILE_BEGIN);
+         }
+      }
+
   buf->st_uid = uid;
   buf->st_gid = gid;