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