summaryrefslogtreecommitdiff
path: root/builds
diff options
context:
space:
mode:
authorSteve Lhomme <robux4@ycbcr.xyz>2022-03-23 22:46:15 -0400
committerAlexei Podtelezhnikov <apodtele@gmail.com>2022-03-23 22:46:15 -0400
commit0574692c6db873c7782cfee68cef504300e608e1 (patch)
treec65e48ee4224b7abf0570f4a7d5fc2bc9f34c98f /builds
parentfc15ebe0a629acf769ed8976e3d5b84ee4e01236 (diff)
downloadfreetype2-0574692c6db873c7782cfee68cef504300e608e1.tar.gz
[build/windows] Improve UWP support.
* builds/windows/ftsystem.c [UWP]: Wrap CreateFile2 into CreateFileA.
Diffstat (limited to 'builds')
-rw-r--r--builds/windows/ftsystem.c50
1 files changed, 44 insertions, 6 deletions
diff --git a/builds/windows/ftsystem.c b/builds/windows/ftsystem.c
index d4fc95675..34d7c2cbf 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,