[PATCH 2/8] gdi32: Remove loading face from memory support code.

Rémi Bernon rbernon at codeweavers.com
Wed Sep 9 05:21:58 CDT 2020


Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
 dlls/gdi32/freetype.c | 112 ++++++++++++++----------------------------
 1 file changed, 38 insertions(+), 74 deletions(-)

diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c
index bdd8d97b16d..6a9fad5b5dc 100644
--- a/dlls/gdi32/freetype.c
+++ b/dlls/gdi32/freetype.c
@@ -274,8 +274,6 @@ typedef struct tagFace {
     WCHAR *file;
     dev_t dev;
     ino_t ino;
-    void *font_data_ptr;
-    DWORD font_data_size;
     FT_Long face_index;
     FONTSIGNATURE fs;
     DWORD ntmFlags;
@@ -1581,7 +1579,7 @@ static BOOL insert_face_in_family_list( Face *face, Family *family )
                    debugstr_w(face->full_name), debugstr_w(family->family_name),
                    cursor->font_version, face->font_version );
 
-            if (face->file && face->dev == cursor->dev && face->ino == cursor->ino)
+            if (face->dev == cursor->dev && face->ino == cursor->ino)
             {
                 cursor->refcount++;
                 TRACE("Font %s already in list, refcount now %d\n",
@@ -2101,8 +2099,7 @@ static inline void get_fontsig( FT_Face ft_face, FONTSIGNATURE *fs )
     }
 }
 
-static Face *create_face( FT_Face ft_face, FT_Long face_index, const char *file, void *font_data_ptr, DWORD font_data_size,
-                          DWORD flags )
+static Face *create_face( FT_Face ft_face, FT_Long face_index, const char *file, DWORD flags )
 {
     struct stat st;
     Face *face = HeapAlloc( GetProcessHeap(), 0, sizeof(*face) );
@@ -2114,22 +2111,11 @@ static Face *create_face( FT_Face ft_face, FT_Long face_index, const char *file,
 
     face->dev = 0;
     face->ino = 0;
-    if (file)
+    face->file = towstr( CP_UNIXCP, file );
+    if (!stat( file, &st ))
     {
-        face->file = towstr( CP_UNIXCP, file );
-        face->font_data_ptr = NULL;
-        face->font_data_size = 0;
-        if (!stat( file, &st ))
-        {
-            face->dev = st.st_dev;
-            face->ino = st.st_ino;
-        }
-    }
-    else
-    {
-        face->file = NULL;
-        face->font_data_ptr = font_data_ptr;
-        face->font_data_size = font_data_size;
+        face->dev = st.st_dev;
+        face->ino = st.st_ino;
     }
 
     face->face_index = face_index;
@@ -2161,13 +2147,12 @@ static Face *create_face( FT_Face ft_face, FT_Long face_index, const char *file,
     return face;
 }
 
-static void AddFaceToList(FT_Face ft_face, const char *file, void *font_data_ptr, DWORD font_data_size,
-                          FT_Long face_index, DWORD flags )
+static void AddFaceToList( FT_Face ft_face, const char *file, FT_Long face_index, DWORD flags )
 {
     Face *face;
     Family *family;
 
-    face = create_face( ft_face, face_index, file, font_data_ptr, font_data_size, flags );
+    face = create_face( ft_face, face_index, file, flags );
     family = get_family( ft_face, flags & ADDFONT_VERTICAL_FONT );
 
     if (insert_face_in_family_list( face, family ))
@@ -2180,34 +2165,25 @@ static void AddFaceToList(FT_Face ft_face, const char *file, void *font_data_ptr
     release_family( family );
 }
 
-static FT_Face new_ft_face( const char *file, void *font_data_ptr, DWORD font_data_size,
-                            FT_Long face_index, BOOL allow_bitmap )
+static FT_Face new_ft_face( const char *file, FT_Long face_index, BOOL allow_bitmap )
 {
     FT_Error err;
     TT_OS2 *pOS2;
     FT_Face ft_face;
 
-    if (file)
-    {
-        TRACE("Loading font file %s index %ld\n", debugstr_a(file), face_index);
-        err = pFT_New_Face(library, file, face_index, &ft_face);
-    }
-    else
-    {
-        TRACE("Loading font from ptr %p size %d, index %ld\n", font_data_ptr, font_data_size, face_index);
-        err = pFT_New_Memory_Face(library, font_data_ptr, font_data_size, face_index, &ft_face);
-    }
+    TRACE( "Loading font file %s index %ld\n", debugstr_a(file), face_index );
+    err = pFT_New_Face( library, file, face_index, &ft_face );
 
     if (err != 0)
     {
-        WARN("Unable to load font %s/%p err = %x\n", debugstr_a(file), font_data_ptr, err);
+        WARN( "Unable to load font %s err = %x\n", debugstr_a(file), err );
         return NULL;
     }
 
     /* There are too many bugs in FreeType < 2.1.9 for bitmap font support */
     if (!FT_IS_SCALABLE( ft_face ) && FT_SimpleVersion < FT_VERSION_VALUE(2, 1, 9))
     {
-        WARN("FreeType version < 2.1.9, skipping bitmap font %s/%p\n", debugstr_a(file), font_data_ptr);
+        WARN( "FreeType version < 2.1.9, skipping bitmap font %s\n", debugstr_a(file) );
         goto fail;
     }
 
@@ -2215,7 +2191,7 @@ static FT_Face new_ft_face( const char *file, void *font_data_ptr, DWORD font_da
     {
         if (FT_IS_SCALABLE( ft_face ) || !allow_bitmap )
         {
-            WARN("Ignoring font %s/%p\n", debugstr_a(file), font_data_ptr);
+            WARN( "Ignoring font %s\n", debugstr_a(file) );
             goto fail;
         }
     }
@@ -2225,8 +2201,7 @@ static FT_Face new_ft_face( const char *file, void *font_data_ptr, DWORD font_da
             !pFT_Get_Sfnt_Table( ft_face, ft_sfnt_hhea ) ||
             !pFT_Get_Sfnt_Table( ft_face, ft_sfnt_head ))
         {
-            TRACE("Font %s/%p lacks either an OS2, HHEA or HEAD table.\n"
-                  "Skipping this font.\n", debugstr_a(file), font_data_ptr);
+            TRACE( "Skipping font %s lacking OS2, HHEA and HEAD tables.\n", debugstr_a(file) );
             goto fail;
         }
 
@@ -2246,7 +2221,7 @@ static FT_Face new_ft_face( const char *file, void *font_data_ptr, DWORD font_da
 
     if (!ft_face->family_name || !ft_face->style_name)
     {
-        TRACE("Font %s/%p lacks either a family or style name\n", debugstr_a(file), font_data_ptr);
+        TRACE( "Font %s lacks either a family or style name\n", debugstr_a(file) );
         goto fail;
     }
 
@@ -2256,7 +2231,7 @@ fail:
     return NULL;
 }
 
-static INT AddFontToList(const char *file, void *font_data_ptr, DWORD font_data_size, DWORD flags)
+static INT AddFontToList( const char *file, DWORD flags )
 {
     FT_Face ft_face;
     FT_Long face_index = 0, num_faces;
@@ -2276,7 +2251,7 @@ static INT AddFontToList(const char *file, void *font_data_ptr, DWORD font_data_
             for(cursor = mac_list; *cursor; cursor++)
             {
                 had_one = TRUE;
-                AddFontToList(*cursor, NULL, 0, flags);
+                AddFontToList( *cursor, flags );
                 HeapFree(GetProcessHeap(), 0, *cursor);
             }
             HeapFree(GetProcessHeap(), 0, mac_list);
@@ -2289,7 +2264,7 @@ static INT AddFontToList(const char *file, void *font_data_ptr, DWORD font_data_
     do {
         FONTSIGNATURE fs;
 
-        ft_face = new_ft_face( file, font_data_ptr, font_data_size, face_index, flags & ADDFONT_ALLOW_BITMAP );
+        ft_face = new_ft_face( file, face_index, flags & ADDFONT_ALLOW_BITMAP );
         if (!ft_face) return 0;
 
         if(ft_face->family_name[0] == '.') /* Ignore fonts with names beginning with a dot */
@@ -2299,14 +2274,13 @@ static INT AddFontToList(const char *file, void *font_data_ptr, DWORD font_data_
             return 0;
         }
 
-        AddFaceToList(ft_face, file, font_data_ptr, font_data_size, face_index, flags);
+        AddFaceToList( ft_face, file, face_index, flags );
         ++ret;
 
         get_fontsig(ft_face, &fs);
         if (fs.fsCsb[0] & FS_DBCS_MASK)
         {
-            AddFaceToList(ft_face, file, font_data_ptr, font_data_size, face_index,
-                          flags | ADDFONT_VERTICAL_FONT);
+            AddFaceToList( ft_face, file, face_index, flags | ADDFONT_VERTICAL_FONT );
             ++ret;
         }
 
@@ -2323,7 +2297,7 @@ static int add_font_resource( const WCHAR *file, DWORD flags )
 
     if (unixname)
     {
-        ret = AddFontToList( unixname, NULL, 0, flags );
+        ret = AddFontToList( unixname, flags );
         HeapFree( GetProcessHeap(), 0, unixname );
     }
     return ret;
@@ -2344,7 +2318,6 @@ static int remove_font_resource( const WCHAR *file, DWORD flags )
         family->refcount++;
         LIST_FOR_EACH_ENTRY_SAFE( face, face_next, &family->faces, Face, entry )
         {
-            if (!face->file) continue;
             if (LOWORD(face->flags) != LOWORD(flags)) continue;
             if (st.st_dev == face->dev && st.st_ino == face->ino)
             {
@@ -2811,7 +2784,7 @@ static BOOL ReadFontDir(const char *dirname, BOOL external_fonts)
         {
             DWORD addfont_flags = ADDFONT_ADD_TO_CACHE;
             if(external_fonts) addfont_flags |= ADDFONT_EXTERNAL_FONT;
-            AddFontToList(path, NULL, 0, addfont_flags);
+            AddFontToList( path, addfont_flags );
         }
     }
     closedir(dir);
@@ -2946,8 +2919,7 @@ static void load_fontconfig_fonts(void)
         if(len < 4) continue;
         ext = &file[ len - 3 ];
         if(_strnicmp(ext, "pfa", -1) && _strnicmp(ext, "pfb", -1))
-            AddFontToList(file, NULL, 0,
-                          ADDFONT_EXTERNAL_FONT | ADDFONT_ADD_TO_CACHE | ADDFONT_AA_FLAGS(aa_flags) );
+            AddFontToList( file, ADDFONT_EXTERNAL_FONT | ADDFONT_ADD_TO_CACHE | ADDFONT_AA_FLAGS( aa_flags ) );
     }
     pFcFontSetDestroy(fontset);
     pFcPatternDestroy(pat);
@@ -2966,7 +2938,7 @@ static void load_mac_font_callback(const void *value, void *context)
     if (path && CFStringGetFileSystemRepresentation(pathStr, path, len))
     {
         TRACE("font file %s\n", path);
-        AddFontToList(path, NULL, 0, ADDFONT_EXTERNAL_FONT | ADDFONT_ADD_TO_CACHE);
+        AddFontToList( path, ADDFONT_EXTERNAL_FONT | ADDFONT_ADD_TO_CACHE );
     }
     HeapFree(GetProcessHeap(), 0, path);
 }
@@ -3472,7 +3444,7 @@ static void GetEnumStructs(Face *face, const WCHAR *family_name, LPENUMLOGFONTEX
 
 static BOOL get_fontdir( const char *unix_name, struct fontdir *fd )
 {
-    FT_Face ft_face = new_ft_face( unix_name, NULL, 0, 0, FALSE );
+    FT_Face ft_face = new_ft_face( unix_name, 0, FALSE );
     Face *face;
     WCHAR *family_name;
     ENUMLOGFONTEXW elf;
@@ -3480,7 +3452,7 @@ static BOOL get_fontdir( const char *unix_name, struct fontdir *fd )
     DWORD type;
 
     if (!ft_face) return FALSE;
-    face = create_face( ft_face, 0, unix_name, NULL, 0, 0 );
+    face = create_face( ft_face, 0, unix_name, 0 );
     family_name = ft_face_get_family_name( ft_face, GetSystemDefaultLCID() );
     pFT_Done_Face( ft_face );
 
@@ -4553,28 +4525,21 @@ static FT_Face OpenFontFace(GdiFont *font, Face *face, LONG width, LONG height)
     FT_Error err;
     FT_Face ft_face;
     void *data_ptr;
+    char *filename;
     DWORD data_size;
 
-    TRACE("%s/%p, %ld, %d x %d\n", debugstr_w(face->file), face->font_data_ptr, face->face_index, width, height);
+    TRACE( "%s, %d x %d\n", debugstr_w(face->file), width, height );
 
-    if (face->file)
-    {
-        char *filename = strWtoA( CP_UNIXCP, face->file );
-        font->mapping = map_font_file( filename );
-        HeapFree( GetProcessHeap(), 0, filename );
-        if (!font->mapping)
-        {
-            WARN("failed to map %s\n", debugstr_w(face->file));
-            return 0;
-        }
-        data_ptr = font->mapping->data;
-        data_size = font->mapping->size;
-    }
-    else
+    filename = strWtoA( CP_UNIXCP, face->file );
+    font->mapping = map_font_file( filename );
+    HeapFree( GetProcessHeap(), 0, filename );
+    if (!font->mapping)
     {
-        data_ptr = face->font_data_ptr;
-        data_size = face->font_data_size;
+        WARN( "failed to map %s\n", debugstr_w(face->file) );
+        return 0;
     }
+    data_ptr = font->mapping->data;
+    data_size = font->mapping->size;
 
     err = pFT_New_Memory_Face(library, data_ptr, data_size, face->face_index, &ft_face);
     if(err) {
@@ -5844,8 +5809,7 @@ found_face:
     else
         ret->charset = get_nearest_charset( family->family_name, face, &ret->codepage );
 
-    TRACE( "Chosen: %s (%s/%p:%ld)\n", debugstr_w(face->full_name), debugstr_w(face->file),
-           face->font_data_ptr, face->face_index );
+    TRACE( "Chosen: %s (%s:%ld)\n", debugstr_w(face->full_name), debugstr_w(face->file), face->face_index );
 
     ret->aveWidth = height ? lf.lfWidth : 0;
 
-- 
2.28.0




More information about the wine-devel mailing list