[gdi32] Revise CreateScalableFontResourceA to pass through CreateScalableFontResourceW.

Jeremy White jwhite at winehq.org
Fri Mar 7 10:11:09 CST 2008


---
 dlls/gdi32/font.c |   67 ++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 51 insertions(+), 16 deletions(-)

diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c
index b8def4e..24e16f3 100644
--- a/dlls/gdi32/font.c
+++ b/dlls/gdi32/font.c
@@ -2662,23 +2662,44 @@ BOOL WINAPI CreateScalableFontResourceA( DWORD fHidden,
                                              LPCSTR lpszFontFile,
                                              LPCSTR lpszCurrentPath )
 {
-    HANDLE f;
+    LPWSTR lpszResourceFileW = NULL;
+    LPWSTR lpszFontFileW = NULL;
+    LPWSTR lpszCurrentPathW = NULL;
+    int len;
+    BOOL ret;

-    /* fHidden=1 - only visible for the calling app, read-only, not
-     * enumbered with EnumFonts/EnumFontFamilies
-     * lpszCurrentPath can be NULL
-     */
-    FIXME("(%d,%s,%s,%s): stub\n",
-          fHidden, debugstr_a(lpszResourceFile), debugstr_a(lpszFontFile),
-          debugstr_a(lpszCurrentPath) );
+    if (lpszResourceFile)
+    {
+        len = MultiByteToWideChar(CP_ACP, 0, lpszResourceFile, -1, NULL, 0);
+        lpszResourceFileW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+        MultiByteToWideChar(CP_ACP, 0, lpszResourceFile, -1, lpszResourceFileW, len);
+    }

-    /* If the output file already exists, return the ERROR_FILE_EXISTS error as specified in MSDN */
-    if ((f = CreateFileA(lpszResourceFile, 0, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)) != INVALID_HANDLE_VALUE) {
-        CloseHandle(f);
-        SetLastError(ERROR_FILE_EXISTS);
-        return FALSE;
+    if (lpszFontFile)
+    {
+        len = MultiByteToWideChar(CP_ACP, 0, lpszFontFile, -1, NULL, 0);
+        lpszFontFileW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+        MultiByteToWideChar(CP_ACP, 0, lpszFontFile, -1, lpszFontFileW, len);
     }
-    return FALSE; /* create failed */
+
+    if (lpszCurrentPath)
+    {
+        len = MultiByteToWideChar(CP_ACP, 0, lpszCurrentPath, -1, NULL, 0);
+        lpszCurrentPathW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+        MultiByteToWideChar(CP_ACP, 0, lpszCurrentPath, -1, lpszCurrentPathW, len);
+    }
+
+    ret = CreateScalableFontResourceW(fHidden, lpszResourceFileW,
+            lpszFontFileW, lpszCurrentPathW);
+
+    if (lpszResourceFileW)
+        HeapFree(GetProcessHeap(), 0, lpszResourceFileW);
+    if (lpszFontFileW)
+        HeapFree(GetProcessHeap(), 0, lpszFontFileW);
+    if (lpszCurrentPathW)
+        HeapFree(GetProcessHeap(), 0, lpszCurrentPathW);
+
+    return ret;
 }

 /***********************************************************************
@@ -2689,8 +2710,22 @@ BOOL WINAPI CreateScalableFontResourceW( DWORD fHidden,
                                              LPCWSTR lpszFontFile,
                                              LPCWSTR lpszCurrentPath )
 {
-    FIXME("(%d,%p,%p,%p): stub\n",
-	  fHidden, lpszResourceFile, lpszFontFile, lpszCurrentPath );
+    HANDLE f;
+    FIXME("(%d,%s,%s,%s): stub\n",
+          fHidden, debugstr_w(lpszResourceFile), debugstr_w(lpszFontFile),
+          debugstr_w(lpszCurrentPath) );
+
+    /* fHidden=1 - only visible for the calling app, read-only, not
+     * enumbered with EnumFonts/EnumFontFamilies
+     * lpszCurrentPath can be NULL
+     */
+
+    /* If the output file already exists, return the ERROR_FILE_EXISTS error as specified in MSDN */
+    if ((f = CreateFileW(lpszResourceFile, 0, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)) != INVALID_HANDLE_VALUE) {
+        CloseHandle(f);
+        SetLastError(ERROR_FILE_EXISTS);
+        return FALSE;
+    }
     return FALSE; /* create failed */
 }

-- 
1.5.3.6





More information about the wine-patches mailing list