Huw Davies : inetcomm: Implement IMimeInternational_GetCodePageCharset.

Alexandre Julliard julliard at winehq.org
Thu Sep 11 08:01:15 CDT 2008


Module: wine
Branch: master
Commit: f3a6b7a81d7839bbbeafed1b2ed8e7739eab5f07
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f3a6b7a81d7839bbbeafed1b2ed8e7739eab5f07

Author: Huw Davies <huw at codeweavers.com>
Date:   Wed Sep 10 14:17:35 2008 +0100

inetcomm: Implement IMimeInternational_GetCodePageCharset.

---

 dlls/inetcomm/mimeintl.c |   53 ++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 51 insertions(+), 2 deletions(-)

diff --git a/dlls/inetcomm/mimeintl.c b/dlls/inetcomm/mimeintl.c
index 2db5917..5258e50 100644
--- a/dlls/inetcomm/mimeintl.c
+++ b/dlls/inetcomm/mimeintl.c
@@ -120,12 +120,61 @@ static HRESULT WINAPI MimeInternat_GetDefaultCharset(IMimeInternational *iface,
     return E_NOTIMPL;
 }
 
+static HRESULT mlang_getcodepageinfo(UINT cp, MIMECPINFO *mlang_cp_info)
+{
+    HRESULT hr;
+    IMultiLanguage *ml;
+
+    hr = get_mlang(&ml);
+
+    if(SUCCEEDED(hr))
+    {
+        hr = IMultiLanguage_GetCodePageInfo(ml, cp, mlang_cp_info);
+        IMultiLanguage_Release(ml);
+    }
+    return hr;
+}
+
 static HRESULT WINAPI MimeInternat_GetCodePageCharset(IMimeInternational *iface, CODEPAGEID cpiCodePage,
                                                       CHARSETTYPE ctCsetType,
                                                       LPHCHARSET phCharset)
 {
-    FIXME("stub\n");
-    return E_NOTIMPL;
+    HRESULT hr;
+    MIMECPINFO mlang_cp_info;
+
+    TRACE("(%p)->(%d, %d, %p)\n", iface, cpiCodePage, ctCsetType, phCharset);
+
+    *phCharset = NULL;
+
+    if(ctCsetType < CHARSET_BODY || ctCsetType > CHARSET_WEB)
+        return MIME_E_INVALID_CHARSET_TYPE;
+
+    hr = mlang_getcodepageinfo(cpiCodePage, &mlang_cp_info);
+    if(SUCCEEDED(hr))
+    {
+        const WCHAR *charset_nameW = NULL;
+        char *charset_name;
+        DWORD len;
+
+        switch(ctCsetType)
+        {
+        case CHARSET_BODY:
+            charset_nameW = mlang_cp_info.wszBodyCharset;
+            break;
+        case CHARSET_HEADER:
+            charset_nameW = mlang_cp_info.wszHeaderCharset;
+            break;
+        case CHARSET_WEB:
+            charset_nameW = mlang_cp_info.wszWebCharset;
+            break;
+        }
+        len = WideCharToMultiByte(CP_ACP, 0, charset_nameW, -1, NULL, 0, NULL, NULL);
+        charset_name = HeapAlloc(GetProcessHeap(), 0, len);
+        WideCharToMultiByte(CP_ACP, 0, charset_nameW, -1, charset_name, len, NULL, NULL);
+        hr = IMimeInternational_FindCharset(iface, charset_name, phCharset);
+        HeapFree(GetProcessHeap(), 0, charset_name);
+    }
+    return hr;
 }
 
 static HRESULT mlang_getcsetinfo(const char *charset, MIMECSETINFO *mlang_info)




More information about the wine-cvs mailing list