Commit a15976c07 for imagemagick.org
commit a15976c0755dd2eac76b1e3275b8eb9c37898782
Author: Cristy <urban-warrior@imagemagick.org>
Date: Sun Jul 5 20:01:06 2026 -0400
map Windows file identity into st_dev/st_ino.
diff --git a/MagickCore/nt-base.c b/MagickCore/nt-base.c
index 67ca97992..01a548175 100644
--- a/MagickCore/nt-base.c
+++ b/MagickCore/nt-base.c
@@ -2650,6 +2650,28 @@ MagickExport int NTStatWide(const char *path,struct stat *attributes)
if (path_wide == (WCHAR *) NULL)
return(-1);
status=wstat(path_wide,attributes);
+ if (status == 0)
+ {
+ HANDLE handle = CreateFileW(path_wide,GENERIC_READ,FILE_SHARE_READ |
+ FILE_SHARE_WRITE | FILE_SHARE_DELETE,NULL,OPEN_EXISTING,
+ FILE_FLAG_BACKUP_SEMANTICS,NULL);
+ if (handle != INVALID_HANDLE_VALUE)
+ {
+ BY_HANDLE_FILE_INFORMATION
+ file_info;
+
+ if (GetFileInformationByHandle(handle,&file_info) != 0)
+ {
+ /*
+ Map Windows file identity into st_dev/st_ino.
+ */
+ attributes->st_dev=(dev_t) file_info.dwVolumeSerialNumber;
+ attributes->st_ino=(((uint64_t) file_info.nFileIndexHigh) << 32) |
+ (uint64_t) file_info.nFileIndexLow;
+ }
+ CloseHandle(handle);
+ }
+ }
path_wide=(WCHAR *) RelinquishMagickMemory(path_wide);
return(status);
}
diff --git a/MagickCore/utility-private.h b/MagickCore/utility-private.h
index dacf64c1a..d644c2c14 100644
--- a/MagickCore/utility-private.h
+++ b/MagickCore/utility-private.h
@@ -47,49 +47,6 @@ extern MagickPrivate void
ChopPathComponents(char *,const size_t),
ExpandFilename(char *);
-static inline MagickBooleanType GetPathSignature(int file,char signature[33])
-{
- char
- *p = signature;
-
- ssize_t
- i;
-
- static const char
- hex[] = "0123456789abcdef";
-
- uint64_t
- file_identity[2];
-
-#if defined(MAGICKCORE_WINDOWS_SUPPORT)
- BY_HANDLE_FILE_INFORMATION file_info;
- HANDLE handle = (HANDLE) _get_osfhandle(file);
- if (handle == INVALID_HANDLE_VALUE)
- return(MagickFalse);
- if (GetFileInformationByHandle(handle,&file_info) == 0)
- return(MagickFalse);
- file_identity[0]=(uint64_t) file_info.dwVolumeSerialNumber;
- file_identity[1]=((uint64_t) file_info.nFileIndexHigh << 32) |
- (uint64_t) file_info.nFileIndexLow;
-#else
- struct stat file_attributes;
- if (fstat(file, &file_attributes) != 0)
- return(MagickFalse);
- file_identity[0]=(uint64_t) file_attributes.st_dev;
- file_identity[1]=(uint64_t) file_attributes.st_ino;
-#endif
- for (i=0; i < 2; i++)
- {
- ssize_t
- shift;
-
- for (shift=60; shift >= 0; shift-=4)
- *p++=hex[(file_identity[i] >> shift) & 0xF];
- }
- *p='\0';
- return(MagickTrue);
-}
-
static inline int MagickReadDirectory(DIR *directory,struct dirent *entry,
struct dirent **result)
{