[PATCH v2 7/7] gdi32: Compute file basename on face creation.
Rémi Bernon
rbernon at codeweavers.com
Thu Sep 17 10:01:37 CDT 2020
Instead of keeping the full NT path and computing it later.
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
dlls/gdi32/freetype.c | 40 +++++++++++++---------------------------
1 file changed, 13 insertions(+), 27 deletions(-)
diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c
index d2c47b0a263..39775b6ff5a 100644
--- a/dlls/gdi32/freetype.c
+++ b/dlls/gdi32/freetype.c
@@ -271,7 +271,7 @@ typedef struct tagFace {
unsigned int refcount;
WCHAR *style_name;
WCHAR *full_name;
- WCHAR *file;
+ WCHAR *file_name;
const char *unix_name;
dev_t dev;
ino_t ino;
@@ -1040,7 +1040,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));
@@ -1051,14 +1050,8 @@ static Face *find_face_from_filename(const WCHAR *file_name, const WCHAR *face_n
face_list = get_face_list_from_family(family);
LIST_FOR_EACH_ENTRY(face, face_list, Face, entry)
{
- if (!face->file)
- continue;
- file = strrchrW(face->file, '/');
- if(!file)
- file = face->file;
- else
- file++;
- if(strcmpiW(file, file_name)) continue;
+ if (!face->file_name) continue;
+ if (strcmpiW( face->file_name, file_name )) continue;
face->refcount++;
return face;
}
@@ -1540,6 +1533,7 @@ static Face *face_create( const char *unix_name, DWORD face_index, void *font_da
{
struct stat st;
DWORD length = 0;
+ const char *file_name;
Face *face;
int fd;
@@ -1564,7 +1558,11 @@ static Face *face_create( const char *unix_name, DWORD face_index, void *font_da
{
face->unix_name = (char *)(face + 1);
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 );
+
face->dev = st.st_dev;
face->ino = st.st_ino;
}
@@ -1591,7 +1589,7 @@ static void release_face( Face *face )
list_remove( &face->entry );
release_family( 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 );
@@ -2602,13 +2600,8 @@ static void populate_system_links(const WCHAR *name, const WCHAR *const *values)
face_list = get_face_list_from_family(family);
LIST_FOR_EACH_ENTRY(face, face_list, Face, entry)
{
- if (!face->file)
- continue;
- file = strrchrW(face->file, '/');
- if (!file)
- file = face->file;
- else
- file++;
+ if (!face->file_name) continue;
+ file = face->file_name;
break;
}
if (!file)
@@ -3235,14 +3228,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