gdi32: Use a function to add entries to the substitution list
Huw D M Davies
h.davies1 at physics.ox.ac.uk
Tue Apr 4 08:57:10 CDT 2006
Huw Davies <huw at codeweavers>
gdi32: Use a function to add entries to the substitution list
(based on a patch by Byeong-Sik Jeon).
--
Huw Davies
huw at codeweavers.com
---
dlls/gdi/freetype.c | 37 ++++++++++++++++++++++++++++++++++++-
1 files changed, 36 insertions(+), 1 deletions(-)
ab904b7b3bc229b9f0145df4a1219251ee3f46cf
diff --git a/dlls/gdi/freetype.c b/dlls/gdi/freetype.c
index 125c452..e02553b 100644
--- a/dlls/gdi/freetype.c
+++ b/dlls/gdi/freetype.c
@@ -770,6 +770,41 @@ static FontSubst *get_font_subst(const s
return NULL;
}
+#define ADD_FONT_SUBST_FORCE 1
+
+static BOOL add_font_subst(struct list *subst_list, FontSubst *subst, INT flags)
+{
+ FontSubst *from_exist, *to_exist;
+
+ from_exist = get_font_subst(subst_list, subst->from.name, subst->from.charset);
+
+ if(from_exist && (flags & ADD_FONT_SUBST_FORCE))
+ {
+ list_remove(&from_exist->entry);
+ HeapFree(GetProcessHeap(), 0, &from_exist->from.name);
+ HeapFree(GetProcessHeap(), 0, &from_exist->to.name);
+ HeapFree(GetProcessHeap(), 0, from_exist);
+ from_exist = NULL;
+ }
+
+ if(!from_exist)
+ {
+ to_exist = get_font_subst(subst_list, subst->to.name, subst->to.charset);
+
+ if(to_exist)
+ {
+ HeapFree(GetProcessHeap(), 0, subst->to.name);
+ subst->to.name = strdupW(to_exist->to.name);
+ }
+
+ list_add_tail(subst_list, &subst->entry);
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
static void split_subst_info(NameCs *nc, LPSTR str)
{
CHAR *p = strrchr(str, ',');
@@ -834,7 +869,7 @@ static void LoadSubstList(void)
HeapFree(GetProcessHeap(), 0, psub->from.name);
HeapFree(GetProcessHeap(), 0, psub);
} else {
- list_add_head(&font_subst_list, &psub->entry);
+ add_font_subst(&font_subst_list, psub, 0);
}
/* reset dlen and vlen */
dlen = datalen;
--
1.2.4
More information about the wine-patches
mailing list