[PATCH 5/8] gdi32: Compute file name on face creation for future lookup.

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


Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---

Just a small change while I'm at it to not store the full path twice,
we now have unix_name and we are only comparing the file basename here.

 dlls/gdi32/freetype.c | 32 +++++++++-----------------------
 1 file changed, 9 insertions(+), 23 deletions(-)

diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c
index d0b076ce6fd..c613171e237 100644
--- a/dlls/gdi32/freetype.c
+++ b/dlls/gdi32/freetype.c
@@ -274,7 +274,7 @@ typedef struct tagFace {
     DWORD flags;
     WCHAR *style_name;
     WCHAR *full_name;
-    WCHAR *file;
+    WCHAR *file_name;
     FONTSIGNATURE fs;
     DWORD ntmFlags;
     FT_Fixed font_version;
@@ -1043,7 +1043,6 @@ static Face *find_face_from_filename(const WCHAR *file_name, const WCHAR *face_n
 {
     Family *family;
     Face *face;
-    const WCHAR *file;
 
     TRACE("looking for file %s name %s\n", debugstr_w(file_name), debugstr_w(face_name));
 
@@ -1055,12 +1054,7 @@ static Face *find_face_from_filename(const WCHAR *file_name, const WCHAR *face_n
         LIST_FOR_EACH_ENTRY(face, face_list, Face, entry)
         {
             if (face->flags & ADDFONT_ADD_MEMRESOURCE) continue;
-            file = strrchrW(face->file, '/');
-            if(!file)
-                file = face->file;
-            else
-                file++;
-            if(strcmpiW(file, file_name)) continue;
+            if (strcmpiW( face->file_name, file_name )) continue;
             face_addref( face );
             return face;
 	}
@@ -1571,6 +1565,7 @@ static ULONG family_release( Family *family )
 
 static Face *face_create( const char *unix_name, DWORD face_index, DWORD flags )
 {
+    const char *file_name;
     Face *face;
 
     if (!(face = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*face) + strlen( unix_name ) + 1 )))
@@ -1586,7 +1581,9 @@ static Face *face_create( const char *unix_name, DWORD face_index, DWORD flags )
     face->flags = flags;
     strcpy( (char *)face->unix_name, unix_name );
 
-    face->file = towstr( CP_UNIXCP, face->unix_name );
+    if ((file_name = strrchr( face->unix_name, '/' ))) file_name++;
+    else file_name = face->unix_name;
+    face->file_name = towstr( CP_UNIXCP, file_name );
     if (!HIWORD( face->flags )) face->flags |= ADDFONT_AA_FLAGS( default_aa_flags );
 
     return face;
@@ -1612,7 +1609,7 @@ static ULONG face_release( Face *face )
         family_release( face->family );
     }
 
-    HeapFree( GetProcessHeap(), 0, face->file );
+    HeapFree( GetProcessHeap(), 0, face->file_name );
     HeapFree( GetProcessHeap(), 0, face->style_name );
     HeapFree( GetProcessHeap(), 0, face->full_name );
     HeapFree( GetProcessHeap(), 0, face->cached_enum_data );
@@ -2583,11 +2580,7 @@ static void populate_system_links(const WCHAR *name, const WCHAR *const *values)
             LIST_FOR_EACH_ENTRY(face, face_list, Face, entry)
             {
                 if (face->flags & ADDFONT_ADD_MEMRESOURCE) continue;
-                file = strrchrW(face->file, '/');
-                if (!file)
-                    file = face->file;
-                else
-                    file++;
+                file = face->file_name;
                 break;
             }
             if (!file)
@@ -3213,14 +3206,7 @@ static void update_reg_entries(void)
                 }
                 file = path;
             }
-            else if ((file = strrchrW(face->file, '/')))
-            {
-                file++;
-            }
-            else
-            {
-                file = face->file;
-            }
+            else file = face->file_name;
 
             len = strlenW(file) + 1;
             RegSetValueExW(winnt_key, valueW, 0, REG_SZ, (BYTE*)file, len * sizeof(WCHAR));
-- 
2.28.0




More information about the wine-devel mailing list