path_conv already knows the IndexNumber, so just use it. This commit also fixes the potential handle leak. --- winsup/cygwin/fhandler_disk_file.cc | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-)
diff --git a/winsup/cygwin/fhandler_disk_file.cc b/winsup/cygwin/fhandler_disk_file.cc index fe04f832b..39f914a59 100644 --- a/winsup/cygwin/fhandler_disk_file.cc +++ b/winsup/cygwin/fhandler_disk_file.cc @@ -2029,9 +2029,6 @@ readdir_get_ino (const char *path, bool dot_dot) { char *fname; struct stat st; - HANDLE hdl; - OBJECT_ATTRIBUTES attr; - IO_STATUS_BLOCK io; ino_t ino = 0; if (dot_dot) @@ -2044,26 +2041,17 @@ readdir_get_ino (const char *path, bool dot_dot) path = fname; } path_conv pc (path, PC_SYM_NOFOLLOW | PC_POSIX | PC_KEEP_HANDLE); - if (pc.isspecial ()) + if (pc.isgood_inode (pc.fai ()->InternalInformation.IndexNumber.QuadPart)) + ino = pc.fai ()->InternalInformation.IndexNumber.QuadPart; + else if (pc.isspecial ()) { if (!stat_worker (pc, &st)) ino = st.st_ino; } - else if (!pc.hasgood_inode ()) + + if (!ino) ino = hash_path_name (0, pc.get_nt_native_path ()); - else if ((hdl = pc.handle ()) != NULL - || NT_SUCCESS (NtOpenFile (&hdl, READ_CONTROL, - pc.get_object_attr (attr, sec_none_nih), - &io, FILE_SHARE_VALID_FLAGS, - FILE_OPEN_FOR_BACKUP_INTENT - | (pc.is_known_reparse_point () - ? FILE_OPEN_REPARSE_POINT : 0))) - ) - { - ino = pc.get_ino_by_handle (hdl); - if (!ino) - ino = hash_path_name (0, pc.get_nt_native_path ()); - } + return ino; } -- 2.30.0