From 0b429b609c4a5fec8568dc9716e920533e13ab74 Mon Sep 17 00:00:00 2001 From: Alexei Podtelezhnikov Date: Fri, 17 Sep 2021 08:31:27 -0400 Subject: [PATCH] [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. --- builds/windows/ftsystem.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/builds/windows/ftsystem.c b/builds/windows/ftsystem.c index 9a6f0c4b0..69ef494f1 100644 --- 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 || \