From 079db16bf7ae41fa9a09640296bb2f3031971d08 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Thu, 9 Oct 2008 14:23:09 +0000 Subject: [PATCH] * 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. --- winsup/cygwin/ChangeLog | 7 +++++++ winsup/cygwin/fhandler_disk_file.cc | 12 ++++++++++++ winsup/cygwin/path.cc | 11 ----------- 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,3 +1,10 @@ +2008-10-09 Corinna Vinschen + + * 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 * fhandler_floppy.cc (fhandler_dev_floppy::raw_read): Keep track of 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