diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2006-02-09 14:42:48 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2006-02-09 14:42:48 +0000 |
commit | 30f1c8a675f8fe65ecc0ea06dd7ce1eb50b4b3b7 (patch) | |
tree | 59c38307edf529851ba58a04aafca7aa835f538a /winsup/cygwin/fhandler_disk_file.cc | |
parent | 9d1c0a60533d82292c1b3595c16b87aa571623d2 (diff) | |
download | cygnal-30f1c8a675f8fe65ecc0ea06dd7ce1eb50b4b3b7.tar.gz cygnal-30f1c8a675f8fe65ecc0ea06dd7ce1eb50b4b3b7.tar.bz2 cygnal-30f1c8a675f8fe65ecc0ea06dd7ce1eb50b4b3b7.zip |
* fhandler_disk_file.cc (fhandler_disk_file::opendir): Only set
the dirent_get_d_ino flag on filesystems having useful File IDs.
Add comment explaining why.
Diffstat (limited to 'winsup/cygwin/fhandler_disk_file.cc')
-rw-r--r-- | winsup/cygwin/fhandler_disk_file.cc | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/winsup/cygwin/fhandler_disk_file.cc b/winsup/cygwin/fhandler_disk_file.cc index 6edd010b6..3d286ebe9 100644 --- a/winsup/cygwin/fhandler_disk_file.cc +++ b/winsup/cygwin/fhandler_disk_file.cc @@ -1450,10 +1450,20 @@ fhandler_disk_file::opendir () __seterrno (); goto free_dirent; } - if (wincap.has_fileid_dirinfo ()) - dir->__flags |= dirent_get_d_ino; + /* FileIdBothDirectoryInformation is apparently unsupported on XP + when accessing directories on UDF. When trying to use it so, + NtQueryDirectoryFile returns with STATUS_ACCESS_VIOLATION. It's + not clear if the call isn't also unsupported on other OS/FS + combinations (say, Win2K/CDFS or so). Instead of testing in + readdir for yet another error code, let's use + FileIdBothDirectoryInformation only on filesystems supporting + persistent ACLs, FileBothDirectoryInformation otherwise. */ if (pc.hasgood_inode ()) - dir->__flags |= dirent_set_d_ino; + { + dir->__flags |= dirent_set_d_ino; + if (wincap.has_fileid_dirinfo ()) + dir->__flags |= dirent_get_d_ino; + } } res = dir; } |