freetype-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freetype2] master 0b429b6: [builds/windows] Try both wide and narrow `C


From: Werner Lemberg
Subject: [freetype2] master 0b429b6: [builds/windows] Try both wide and narrow `CreateFile`
Date: Fri, 17 Sep 2021 08:34:08 -0400 (EDT)

branch: master
commit 0b429b609c4a5fec8568dc9716e920533e13ab74
Author: Alexei Podtelezhnikov <apodtele@gmail.com>
Commit: Alexei Podtelezhnikov <apodtele@gmail.com>

    [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 9a6f0c4..69ef494 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 || \



reply via email to

[Prev in Thread] Current Thread [Next in Thread]