Zebediah Figura : kernel32: Reimplement is_same_file() using FileIdInformation.
Alexandre Julliard
julliard at winehq.org
Thu Apr 9 16:04:45 CDT 2020
Module: wine
Branch: master
Commit: 4b2f8c80fb50ed13c300a9268d8b1908d6171622
URL: https://source.winehq.org/git/wine.git/?a=commit;h=4b2f8c80fb50ed13c300a9268d8b1908d6171622
Author: Zebediah Figura <z.figura12 at gmail.com>
Date: Wed Apr 8 16:06:06 2020 -0500
kernel32: Reimplement is_same_file() using FileIdInformation.
Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/kernel32/path.c | 21 ++++++---------------
1 file changed, 6 insertions(+), 15 deletions(-)
diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c
index 31652d3164..334fc25e87 100644
--- a/dlls/kernel32/path.c
+++ b/dlls/kernel32/path.c
@@ -257,21 +257,12 @@ DWORD WINAPI GetShortPathNameA( LPCSTR longpath, LPSTR shortpath, DWORD shortlen
static BOOL is_same_file(HANDLE h1, HANDLE h2)
{
- int fd1;
- BOOL ret = FALSE;
- if (wine_server_handle_to_fd(h1, 0, &fd1, NULL) == STATUS_SUCCESS)
- {
- int fd2;
- if (wine_server_handle_to_fd(h2, 0, &fd2, NULL) == STATUS_SUCCESS)
- {
- struct stat stat1, stat2;
- if (fstat(fd1, &stat1) == 0 && fstat(fd2, &stat2) == 0)
- ret = (stat1.st_dev == stat2.st_dev && stat1.st_ino == stat2.st_ino);
- wine_server_release_fd(h2, fd2);
- }
- wine_server_release_fd(h1, fd1);
- }
- return ret;
+ FILE_ID_INFORMATION id1, id2;
+ IO_STATUS_BLOCK io;
+
+ return !NtQueryInformationFile( h1, &io, &id1, sizeof(id1), FileIdInformation )
+ && !NtQueryInformationFile( h2, &io, &id2, sizeof(id2), FileIdInformation )
+ && !memcmp( &id1, &id2, sizeof(FILE_ID_INFORMATION) );
}
/**************************************************************************
More information about the wine-cvs
mailing list