summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--winsup/cygwin/ChangeLog7
-rw-r--r--winsup/cygwin/fhandler_disk_file.cc12
-rw-r--r--winsup/cygwin/path.cc11
3 files changed, 19 insertions, 11 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 4e813d43d..02dc26644 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -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.
diff --git a/winsup/cygwin/fhandler_disk_file.cc b/winsup/cygwin/fhandler_disk_file.cc
index aa945f588..e3c9aaf93 100644
--- a/winsup/cygwin/fhandler_disk_file.cc
+++ b/winsup/cygwin/fhandler_disk_file.cc
@@ -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;
diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc
index 9b85a93d9..442e7bb90 100644
--- a/winsup/cygwin/path.cc
+++ b/winsup/cygwin/path.cc
@@ -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