[6/6] gdi32: Add a helper function to convert a string from A to W. (try 3)

Kusanagi Kouichi slash at ac.auone-net.jp
Thu Dec 8 08:17:59 CST 2011


Signed-off-by: Kusanagi Kouichi <slash at ac.auone-net.jp>
---
 dlls/gdi32/freetype.c |   35 ++++++++++++++++-------------------
 1 files changed, 16 insertions(+), 19 deletions(-)

diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c
index 5853468..b153cbd 100644
--- a/dlls/gdi32/freetype.c
+++ b/dlls/gdi32/freetype.c
@@ -1021,19 +1021,27 @@ static BOOL add_font_subst(struct list *subst_list, FontSubst *subst, INT flags)
     return FALSE;
 }
 
+static WCHAR *towstr(UINT cp, const char *str)
+{
+    int len;
+    WCHAR *wstr;
+
+    len = MultiByteToWideChar(cp, 0, str, -1, NULL, 0);
+    wstr = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+    MultiByteToWideChar(cp, 0, str, -1, wstr, len);
+    return wstr;
+}
+
 static void split_subst_info(NameCs *nc, LPSTR str)
 {
     CHAR *p = strrchr(str, ',');
-    DWORD len;
 
     nc->charset = -1;
     if(p && *(p+1)) {
         nc->charset = strtol(p+1, NULL, 10);
 	*p = '\0';
     }
-    len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
-    nc->name = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
-    MultiByteToWideChar(CP_ACP, 0, str, -1, nc->name, len);
+    nc->name = towstr(CP_ACP, str);
 }
 
 static void LoadSubstList(void)
@@ -1471,7 +1479,6 @@ static void AddFaceToList(FT_Face ft_face, const char *fake_family, const char *
         TT_OS2 *pOS2;
         TT_Header *pHeader = NULL;
         WCHAR *english_family, *localised_family;
-        DWORD len;
         Face *face;
         struct list *face_elem_ptr;
         FT_WinFNT_HeaderRec winfnt_header;
@@ -1485,10 +1492,7 @@ static void AddFaceToList(FT_Face ft_face, const char *fake_family, const char *
 
         if (fake_family)
         {
-            len = MultiByteToWideChar(CP_ACP, 0, fake_family, -1, NULL, 0);
-            english_family = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
-            MultiByteToWideChar(CP_ACP, 0, fake_family, -1, english_family, len);
-
+            english_family = towstr(CP_ACP, fake_family);
             localised_family = NULL;
         }
         else
@@ -1496,9 +1500,7 @@ static void AddFaceToList(FT_Face ft_face, const char *fake_family, const char *
             english_family = get_face_name(ft_face, TT_NAME_ID_FONT_FAMILY, TT_MS_LANGID_ENGLISH_UNITED_STATES);
             if (!english_family)
             {
-                len = MultiByteToWideChar(CP_ACP, 0, ft_face->family_name, -1, NULL, 0);
-                english_family = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
-                MultiByteToWideChar(CP_ACP, 0, ft_face->family_name, -1, english_family, len);
+                english_family = towstr(CP_ACP, ft_face->family_name);
             }
 
             localised_family = get_face_name(ft_face, TT_NAME_ID_FONT_FAMILY, GetUserDefaultLCID());
@@ -1535,9 +1537,7 @@ static void AddFaceToList(FT_Face ft_face, const char *fake_family, const char *
         HeapFree(GetProcessHeap(), 0, localised_family);
         HeapFree(GetProcessHeap(), 0, english_family);
 
-        len = MultiByteToWideChar(CP_ACP, 0, ft_face->style_name, -1, NULL, 0);
-        StyleW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
-        MultiByteToWideChar(CP_ACP, 0, ft_face->style_name, -1, StyleW, len);
+        StyleW = towstr(CP_ACP, ft_face->style_name);
 
         internal_leading = 0;
         memset(&fs, 0, sizeof(fs));
@@ -2815,7 +2815,6 @@ static void populate_system_links(HKEY hkey, const WCHAR *name, const WCHAR *con
     Face *face;
     const char *file;
     WCHAR *fileW;
-    int fileLen;
     WCHAR buff[MAX_PATH];
     WCHAR *data;
     int entryLen;
@@ -2853,9 +2852,7 @@ static void populate_system_links(HKEY hkey, const WCHAR *name, const WCHAR *con
             }
             if (!file)
                 continue;
-            fileLen = MultiByteToWideChar(CP_UNIXCP, 0, file, -1, NULL, 0);
-            fileW = HeapAlloc(GetProcessHeap(), 0, fileLen * sizeof(WCHAR));
-            MultiByteToWideChar(CP_UNIXCP, 0, file, -1, fileW, fileLen);
+            fileW = towstr(CP_UNIXCP, file);
             entryLen = strlenW(fileW) + 1 + strlenW(value) + 1;
             if (sizeof(buff)-(data-buff) < entryLen + 1)
             {
-- 
1.7.7.3




More information about the wine-patches mailing list