Rob Shearman : mlang: Implement ConvertINetString.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri May 25 14:43:23 CDT 2007
Module: wine
Branch: master
Commit: f21e9c2aa89a12db3dda5493556fd2195b6f1468
URL: http://source.winehq.org/git/wine.git/?a=commit;h=f21e9c2aa89a12db3dda5493556fd2195b6f1468
Author: Rob Shearman <rob at codeweavers.com>
Date: Wed May 23 19:12:59 2007 +0100
mlang: Implement ConvertINetString.
---
dlls/mlang/mlang.c | 41 +++++++++++++++++++++++++++++++++++++++--
1 files changed, 39 insertions(+), 2 deletions(-)
diff --git a/dlls/mlang/mlang.c b/dlls/mlang/mlang.c
index 8133744..6d5142b 100644
--- a/dlls/mlang/mlang.c
+++ b/dlls/mlang/mlang.c
@@ -601,9 +601,46 @@ HRESULT WINAPI ConvertINetString(
LPINT pcDstSize
)
{
- FIXME("%p %d %d %s %p %p %p: stub!\n", pdwMode, dwSrcEncoding, dwDstEncoding,
+ TRACE("%p %d %d %s %p %p %p\n", pdwMode, dwSrcEncoding, dwDstEncoding,
debugstr_a(pSrcStr), pcSrcSize, pDstStr, pcDstSize);
- return E_NOTIMPL;
+
+ if (dwSrcEncoding == CP_UNICODE)
+ {
+ INT cSrcSizeW;
+ if (pcSrcSize && *pcSrcSize != -1)
+ {
+ cSrcSizeW = *pcSrcSize / sizeof(WCHAR);
+ pcSrcSize = &cSrcSizeW;
+ }
+ return ConvertINetUnicodeToMultiByte(pdwMode, dwDstEncoding, (LPCWSTR)pSrcStr, pcSrcSize, pDstStr, pcDstSize);
+ }
+ else if (dwDstEncoding == CP_UNICODE)
+ {
+ HRESULT hr = ConvertINetMultiByteToUnicode(pdwMode, dwSrcEncoding, pSrcStr, pcSrcSize, (LPWSTR)pDstStr, pcDstSize);
+ *pcDstSize *= sizeof(WCHAR);
+ return hr;
+ }
+ else
+ {
+ INT cDstSizeW;
+ LPWSTR pDstStrW;
+ HRESULT hr;
+
+ TRACE("convert %s from %d to %d\n", debugstr_a(pSrcStr), dwSrcEncoding, dwDstEncoding);
+
+ hr = ConvertINetMultiByteToUnicode(pdwMode, dwSrcEncoding, pSrcStr, pcSrcSize, NULL, &cDstSizeW);
+ if (hr != S_OK)
+ return hr;
+
+ pDstStrW = HeapAlloc(GetProcessHeap(), 0, cDstSizeW * sizeof(WCHAR));
+ hr = ConvertINetMultiByteToUnicode(pdwMode, dwSrcEncoding, pSrcStr, pcSrcSize, pDstStrW, &cDstSizeW);
+ if (hr != S_OK)
+ return hr;
+
+ hr = ConvertINetUnicodeToMultiByte(pdwMode, dwDstEncoding, pDstStrW, &cDstSizeW, pDstStr, pcDstSize);
+ HeapFree(GetProcessHeap(), 0, pDstStrW);
+ return hr;
+ }
}
static HRESULT GetFamilyCodePage(
More information about the wine-cvs
mailing list