mirror of
https://github.com/microsoft/vcpkg.git
synced 2024-12-05 15:59:02 +08:00
59 lines
1.7 KiB
Diff
59 lines
1.7 KiB
Diff
|
diff --git a/src/file_io.c b/src/file_io.c
|
||
|
index 7cf8f0c..47351bc 100644
|
||
|
--- a/src/file_io.c
|
||
|
+++ b/src/file_io.c
|
||
|
@@ -787,6 +787,19 @@ psf_open_handle (PSF_FILE * pfile)
|
||
|
return NULL ;
|
||
|
} ;
|
||
|
|
||
|
+#if defined (WINAPI_FAMILY_PARTITION) && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
|
||
|
+ if (!pfile->use_wchar)
|
||
|
+ return NULL;
|
||
|
+
|
||
|
+ CREATEFILE2_EXTENDED_PARAMETERS cfParams = {0};
|
||
|
+ cfParams.dwSize = sizeof(CREATEFILE2_EXTENDED_PARAMETERS);
|
||
|
+ cfParams.dwFileAttributes = FILE_ATTRIBUTE_NORMAL;
|
||
|
+
|
||
|
+ handle = CreateFile2(pfile->path.wc, dwDesiredAccess, dwShareMode, dwCreationDistribution, &cfParams);
|
||
|
+
|
||
|
+ if (handle == INVALID_HANDLE_VALUE)
|
||
|
+ return NULL;
|
||
|
+#else
|
||
|
if (pfile->use_wchar)
|
||
|
handle = CreateFileW (
|
||
|
pfile->path.wc, /* pointer to name of the file */
|
||
|
@@ -812,6 +825,7 @@ psf_open_handle (PSF_FILE * pfile)
|
||
|
return NULL ;
|
||
|
|
||
|
return handle ;
|
||
|
+#endif
|
||
|
} /* psf_open_handle */
|
||
|
|
||
|
/* USE_WINDOWS_API */ static void
|
||
|
@@ -1104,7 +1118,16 @@ psf_is_pipe (SF_PRIVATE *psf)
|
||
|
|
||
|
/* USE_WINDOWS_API */ sf_count_t
|
||
|
psf_get_filelen_handle (HANDLE handle)
|
||
|
-{ sf_count_t filelen ;
|
||
|
+{
|
||
|
+#if defined (WINAPI_FAMILY_PARTITION) && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
|
||
|
+ LARGE_INTEGER size;
|
||
|
+
|
||
|
+ if (!GetFileSizeEx(handle, &size) && GetLastError() != NO_ERROR)
|
||
|
+ return (sf_count_t) -1 ;
|
||
|
+
|
||
|
+ return size.QuadPart;
|
||
|
+#else
|
||
|
+ sf_count_t filelen ;
|
||
|
DWORD dwFileSizeLow, dwFileSizeHigh, dwError = NO_ERROR ;
|
||
|
|
||
|
dwFileSizeLow = GetFileSize (handle, &dwFileSizeHigh) ;
|
||
|
@@ -1118,6 +1141,7 @@ psf_get_filelen_handle (HANDLE handle)
|
||
|
filelen = dwFileSizeLow + ((__int64) dwFileSizeHigh << 32) ;
|
||
|
|
||
|
return filelen ;
|
||
|
+#endif
|
||
|
} /* psf_get_filelen_handle */
|
||
|
|
||
|
/* USE_WINDOWS_API */ void
|