ref: 0574692c6db873c7782cfee68cef504300e608e1
parent: fc15ebe0a629acf769ed8976e3d5b84ee4e01236
author: Steve Lhomme <robux4@ycbcr.xyz>
date: Wed Mar 23 18:46:15 EDT 2022
[build/windows] Improve UWP support. * builds/windows/ftsystem.c [UWP]: Wrap CreateFile2 into CreateFileA.
--- a/builds/windows/ftsystem.c
+++ b/builds/windows/ftsystem.c
@@ -196,25 +196,63 @@
}
-#if defined( NTDDI_VERSION ) && NTDDI_VERSION < 0x0A000007 && \
- defined( WINAPI_FAMILY_PARTITION ) && \
+ /* non-desktop Universal Windows Platform */
+#if defined( WINAPI_FAMILY_PARTITION ) && \
!WINAPI_FAMILY_PARTITION( WINAPI_PARTITION_DESKTOP )
#define PACK_DWORD64( hi, lo ) ( ( (DWORD64)(hi) << 32 ) | (DWORD)(lo) )
-#define CreateFileW( a, b, c, d, e, f, g ) \
- CreateFileFromAppW( a, b, c, d, e, f, g )
#define CreateFileMapping( a, b, c, d, e, f ) \
CreateFileMappingFromApp( a, b, c, PACK_DWORD64( d, e ), f )
#define MapViewOfFile( a, b, c, d, e ) \
MapViewOfFileFromApp( a, b, PACK_DWORD64( c, d ), e )
-#define UWP_LEGACY
+ FT_LOCAL_DEF( HANDLE )
+ CreateFileA( LPCSTR lpFileName,
+ DWORD dwDesiredAccess,
+ DWORD dwShareMode,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+ DWORD dwCreationDisposition,
+ DWORD dwFlagsAndAttributes,
+ HANDLE hTemplateFile )
+ {
+ int len;
+ LPWSTR lpFileNameW;
+ CREATEFILE2_EXTENDED_PARAMETERS createExParams = {
+ sizeof ( CREATEFILE2_EXTENDED_PARAMETERS ),
+ dwFlagsAndAttributes & 0x0000FFFF,
+ dwFlagsAndAttributes & 0xFFF00000,
+ dwFlagsAndAttributes & 0x000F0000,
+ lpSecurityAttributes,
+ hTemplateFile };
+
+
+ /* allocate memory space for converted path name */
+ len = MultiByteToWideChar( CP_ACP, MB_ERR_INVALID_CHARS,
+ lpFileName, -1, NULL, 0 );
+
+ lpFileNameW = (LPWSTR)_alloca( len * sizeof ( WCHAR ) );
+
+ if ( !len || !lpFileNameW )
+ {
+ FT_ERROR(( "FT_Stream_Open: cannot convert file name to LPWSTR\n" ));
+ return INVALID_HANDLE_VALUE;
+ }
+
+ /* now it is safe to do the translation */
+ MultiByteToWideChar( CP_ACP, MB_ERR_INVALID_CHARS,
+ lpFileName, -1, lpFileNameW, len );
+
+ /* open the file */
+ return CreateFile2( lpFileNameW, dwDesiredAccess, dwShareMode,
+ dwCreationDisposition, &createExParams );
+ }
+
#endif
-#if defined( _WIN32_WCE ) || defined( UWP_LEGACY )
+#if defined( _WIN32_WCE )
FT_LOCAL_DEF( HANDLE )
CreateFileA( LPCSTR lpFileName,