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