ref: 0b429b609c4a5fec8568dc9716e920533e13ab74
parent: 6e1ef98a04e5f8528ffc8f17c6674e5dee9c43ad
author: Alexei Podtelezhnikov <[email protected]>
date: Fri Sep 17 04:31:27 EDT 2021
[builds/windows] Try both wide and narrow `CreateFile` Windows handles wchar_t* UTF-16 and char* ANSI (presently UTF-8) filenames using alternative -A and -W API. We'll try them both when opening a file. This means that you should not worry about about conversions. Fixes #1098 and !76. * builds/windows/ftsystem.c (FT_Stream_Open): Call alternative `CreateFile` in the case of failure.
--- a/builds/windows/ftsystem.c
+++ b/builds/windows/ftsystem.c
@@ -215,9 +215,21 @@
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 );
if ( file == INVALID_HANDLE_VALUE )
{
- FT_ERROR(( "FT_Stream_Open:" ));
- FT_ERROR(( " could not open `%s'\n", filepathname ));
- return FT_THROW( Cannot_Open_Resource );
+ /* fall back on the alernative interface */
+#ifdef UNICODE
+ file = CreateFileA( (LPCSTR)filepathname, GENERIC_READ, FILE_SHARE_READ,
+ NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 );
+#else
+ file = CreateFileW( (LPCWSTR)filepathname, GENERIC_READ, FILE_SHARE_READ,
+ NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 );
+#endif
+
+ if ( file == INVALID_HANDLE_VALUE )
+ {
+ FT_ERROR(( "FT_Stream_Open:" ));
+ FT_ERROR(( " could not open `%s'\n", filepathname ));
+ return FT_THROW( Cannot_Open_Resource );
+ }
}
#if defined _WIN32_WCE || defined _WIN32_WINDOWS || \