diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2006-01-27 21:50:42 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2006-01-27 21:50:42 +0000 |
commit | 9e5f45ed6fe599c1e7e0f640c8e63936ebaa6d55 (patch) | |
tree | cdb795d81f92b97438b53288ee17fbf35c3131cb /winsup/cygwin/wincap.cc | |
parent | e7a9c71d623f88b6d41a769b0ec8e223a958175d (diff) | |
download | cygnal-9e5f45ed6fe599c1e7e0f640c8e63936ebaa6d55.tar.gz cygnal-9e5f45ed6fe599c1e7e0f640c8e63936ebaa6d55.tar.bz2 cygnal-9e5f45ed6fe599c1e7e0f640c8e63936ebaa6d55.zip |
* autoload.cc (NtQueryDirectoryFile): Define.
* dir.cc (__opendir_with_d_ino): Just call opendir.
(opendir): Remove CYGWIN_VERSION_CHECK_FOR_NEEDS_D_INO handling.
(readdir_worker): Only try generating d_ino if it's 0.
Utilize namehash of directories fhandler. Call readdir_get_ino to
generate d_ino for "..".
(seekdir64): Keep dirent_set_d_ino flag.
* fhandler.h (enum dirent_states): Add dirent_get_d_ino.
(class fhandler_disk_file): Declare new private methods readdir_helper
and readdir_9x.
* fhandler_disk_file.cc (path_conv::hasgood_inode): New method to
evaluate if a filesystem has reliable inode numbers.
(fhandler_base::fstat_by_handle): Accomodate structure member name
change from IndexNumber to FileId.
(fhandler_base::fstat_helper): Call hasgood_inode here.
(fhandler_disk_file::opendir): Call fhaccess only for real files.
Don't append '*' to __d_dirname here, move to readdir_9x. On NT,
open directory handle here. Set dirent_get_d_ino and dirent_set_d_ino
flags according to wincap and filesystem.
(fhandler_disk_file::readdir_helper): New method to implement readdir
postprocessing only once.
(readdir_get_ino_by_handle): New static function.
(readdir_get_ino): New function to centralize inode number evaluation
in case inode number hasn't been returned by NtQueryDirectoryFile.
(fhandler_disk_file::readdir): Move old functionality to readdir_9x.
Call readdir_9x when on 9x/Me. Implement NT specific readdir here.
(fhandler_disk_file::readdir_9x): Move 9x specific readdir here.
(fhandler_disk_file::seekdir): Accomodate new NT readdir method.
(fhandler_disk_file::closedir): Ditto.
(fhandler_cygdrive::fstat): Set d_ino to namehash. Add comment.
(fhandler_cygdrive::opendir): Call get_namehash to prepare later
correct evaluation of d_ino.
(fhandler_cygdrive::readdir): Replace recursion with loop. Evaluate
drive's d_ino by calling readdir_get_ino.
* fhandler_proc.cc (fhandler_proc::readdir): Set dirent_saw_dot and
dirent_saw_dot_dot to avoid seeing . and .. entries twice.
* fhandler_process.cc (fhandler_process::readdir): Ditto.
* fhandler_registry.cc (fhandler_registry::readdir): Ditto.
* ntdll.h (STATUS_INVALID_PARAMETER): New define.
(STATUS_INVALID_LEVEL): New define.
(struct _FILE_INTERNAL_INFORMATION): Rename member IndexNumber to
FileId (as in Nebbitt).
* path.h (path_conv::hasgood_inode): Now implemented in
fhandler_disk_file.cc.
* wincap.h (wincaps::has_fileid_dirinfo): New element.
* wincap.cc: Implement above element throughout.
* winsup.h (readdir_get_ino): Add declaration.
* include/sys/dirent.h (struct dirent): Slightly rename structure
members to accomodate changes.
Remove __USE_EXPENSIVE_CYGWIN_D_INO handling and declaration of
__opendir_with_d_ino.
Diffstat (limited to 'winsup/cygwin/wincap.cc')
-rw-r--r-- | winsup/cygwin/wincap.cc | 39 |
1 files changed, 26 insertions, 13 deletions
diff --git a/winsup/cygwin/wincap.cc b/winsup/cygwin/wincap.cc index bd9fd780d..9ff3c92f1 100644 --- a/winsup/cygwin/wincap.cc +++ b/winsup/cygwin/wincap.cc @@ -63,7 +63,8 @@ static NO_COPY wincaps wincap_unknown = { has_null_console_handler_routine:false, has_disk_ex_ioctls:false, has_working_virtual_lock:false, - has_disabled_user_tos_setting:false + has_disabled_user_tos_setting:false, + has_fileid_dirinfo:false }; static NO_COPY wincaps wincap_95 = { @@ -118,7 +119,8 @@ static NO_COPY wincaps wincap_95 = { has_null_console_handler_routine:false, has_disk_ex_ioctls:false, has_working_virtual_lock:false, - has_disabled_user_tos_setting:false + has_disabled_user_tos_setting:false, + has_fileid_dirinfo:false }; static NO_COPY wincaps wincap_95osr2 = { @@ -173,7 +175,8 @@ static NO_COPY wincaps wincap_95osr2 = { has_null_console_handler_routine:false, has_disk_ex_ioctls:false, has_working_virtual_lock:false, - has_disabled_user_tos_setting:false + has_disabled_user_tos_setting:false, + has_fileid_dirinfo:false }; static NO_COPY wincaps wincap_98 = { @@ -228,7 +231,8 @@ static NO_COPY wincaps wincap_98 = { has_null_console_handler_routine:false, has_disk_ex_ioctls:false, has_working_virtual_lock:false, - has_disabled_user_tos_setting:false + has_disabled_user_tos_setting:false, + has_fileid_dirinfo:false }; static NO_COPY wincaps wincap_98se = { @@ -283,7 +287,8 @@ static NO_COPY wincaps wincap_98se = { has_null_console_handler_routine:false, has_disk_ex_ioctls:false, has_working_virtual_lock:false, - has_disabled_user_tos_setting:false + has_disabled_user_tos_setting:false, + has_fileid_dirinfo:false }; static NO_COPY wincaps wincap_me = { @@ -338,7 +343,8 @@ static NO_COPY wincaps wincap_me = { has_null_console_handler_routine:false, has_disk_ex_ioctls:false, has_working_virtual_lock:false, - has_disabled_user_tos_setting:false + has_disabled_user_tos_setting:false, + has_fileid_dirinfo:false }; static NO_COPY wincaps wincap_nt3 = { @@ -393,7 +399,8 @@ static NO_COPY wincaps wincap_nt3 = { has_null_console_handler_routine:true, has_disk_ex_ioctls:false, has_working_virtual_lock:true, - has_disabled_user_tos_setting:false + has_disabled_user_tos_setting:false, + has_fileid_dirinfo:false }; static NO_COPY wincaps wincap_nt4 = { @@ -448,7 +455,8 @@ static NO_COPY wincaps wincap_nt4 = { has_null_console_handler_routine:true, has_disk_ex_ioctls:false, has_working_virtual_lock:true, - has_disabled_user_tos_setting:false + has_disabled_user_tos_setting:false, + has_fileid_dirinfo:false }; static NO_COPY wincaps wincap_nt4sp4 = { @@ -503,7 +511,8 @@ static NO_COPY wincaps wincap_nt4sp4 = { has_null_console_handler_routine:true, has_disk_ex_ioctls:false, has_working_virtual_lock:true, - has_disabled_user_tos_setting:false + has_disabled_user_tos_setting:false, + has_fileid_dirinfo:false }; static NO_COPY wincaps wincap_2000 = { @@ -558,7 +567,8 @@ static NO_COPY wincaps wincap_2000 = { has_null_console_handler_routine:true, has_disk_ex_ioctls:false, has_working_virtual_lock:true, - has_disabled_user_tos_setting:true + has_disabled_user_tos_setting:true, + has_fileid_dirinfo:true }; static NO_COPY wincaps wincap_xp = { @@ -613,7 +623,8 @@ static NO_COPY wincaps wincap_xp = { has_null_console_handler_routine:true, has_disk_ex_ioctls:true, has_working_virtual_lock:true, - has_disabled_user_tos_setting:true + has_disabled_user_tos_setting:true, + has_fileid_dirinfo:true }; static NO_COPY wincaps wincap_2003 = { @@ -668,7 +679,8 @@ static NO_COPY wincaps wincap_2003 = { has_null_console_handler_routine:true, has_disk_ex_ioctls:true, has_working_virtual_lock:true, - has_disabled_user_tos_setting:true + has_disabled_user_tos_setting:true, + has_fileid_dirinfo:true }; static NO_COPY wincaps wincap_vista = { @@ -723,7 +735,8 @@ static NO_COPY wincaps wincap_vista = { has_null_console_handler_routine:true, has_disk_ex_ioctls:true, has_working_virtual_lock:true, - has_disabled_user_tos_setting:true + has_disabled_user_tos_setting:true, + has_fileid_dirinfo:true }; wincapc wincap __attribute__((section (".cygwin_dll_common"), shared)); |