Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2009-01-29 23:32:08 +0300
committerCorinna Vinschen <corinna@vinschen.de>2009-01-29 23:32:08 +0300
commit43616e5526861e4e6afeafb2f9cf4d4626a237b6 (patch)
tree4578bfc345ff5b9720e1b40d675bee292e6b18f1 /winsup/cygwin/mount.cc
parentbacd5877baf38e412c61b47f9ea24a24e01814e8 (diff)
* fhandler_disk_file.cc (fhandler_disk_file::readdir): Fix inode number
evaluation for faked "." entry. * mount.cc (fs_info::update): Move setting of is_cdrom after checking for caseinsensitivity. Recognize UDF in is_cdrom case and set caseinsensitive flag according to UDF brokenness determined by OS. Add comment to explain why. * mount.h (class fs_info): Add is_udf status flag. * path.cc (symlink_info::check): Add workaround for UDF bug in terms of casesensitivity on certain OSes. * wincap.h (wincaps::has_broken_udf): New element. (wincaps::has_broken_udf): New element
Diffstat (limited to 'winsup/cygwin/mount.cc')
-rw-r--r--winsup/cygwin/mount.cc16
1 files changed, 15 insertions, 1 deletions
diff --git a/winsup/cygwin/mount.cc b/winsup/cygwin/mount.cc
index 0797d1bb3..a7cc07efb 100644
--- a/winsup/cygwin/mount.cc
+++ b/winsup/cygwin/mount.cc
@@ -262,7 +262,6 @@ fs_info::update (PUNICODE_STRING upath, HANDLE in_vol)
}
is_ntfs (RtlEqualUnicodeString (&fsname, &testname, FALSE)
&& !is_samba () && !is_netapp ());
- is_cdrom (ffdi.DeviceType == FILE_DEVICE_CD_ROM);
has_acls (flags () & FS_PERSISTENT_ACLS);
hasgood_inode (((flags () & FILE_PERSISTENT_ACLS) && !is_netapp ())
@@ -274,6 +273,21 @@ fs_info::update (PUNICODE_STRING upath, HANDLE in_vol)
caseinsensitive ((!(flags () & FILE_CASE_SENSITIVE_SEARCH) || is_samba ())
&& !is_nfs ());
+ is_cdrom (ffdi.DeviceType == FILE_DEVICE_CD_ROM);
+ if (is_cdrom ())
+ {
+ RtlInitUnicodeString (&testname, L"UDF");
+ is_udf (RtlEqualUnicodeString (&fsname, &testname, FALSE));
+ /* UDF on NT 5.x is broken (at least) in terms of case sensitivity. The
+ UDF driver reports the FILE_CASE_SENSITIVE_SEARCH capability but:
+ - Opening the root directory for query seems to work at first, but the
+ filenames in the directory listing are mutilated.
+ - When trying to open a file or directory case sensitive, the file
+ appears to be non-existant. */
+ if (is_udf () && wincap.has_broken_udf ())
+ caseinsensitive (true);
+ }
+
if (!in_vol)
NtClose (vol);
return true;