diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2009-01-29 23:32:08 +0300 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2009-01-29 23:32:08 +0300 |
commit | 43616e5526861e4e6afeafb2f9cf4d4626a237b6 (patch) | |
tree | 4578bfc345ff5b9720e1b40d675bee292e6b18f1 /winsup/cygwin/mount.cc | |
parent | bacd5877baf38e412c61b47f9ea24a24e01814e8 (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.cc | 16 |
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; |