[build/windows] Improve UWP support. * builds/windows/ftsystem.c [UWP]: Wrap CreateFile2 into CreateFileA.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
diff --git a/builds/windows/ftsystem.c b/builds/windows/ftsystem.c
index d4fc956..34d7c2c 100644
--- 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,