Commit 4e3ce9f8 authored by James Hawkins's avatar James Hawkins Committed by Alexandre Julliard

mlang: Reimplement ConvertINetMultiByteToUnicode.

parent e7fe63df
......@@ -546,50 +546,63 @@ HRESULT WINAPI ConvertINetUnicodeToMultiByte(
LPSTR pDstStr,
LPINT pcDstSize)
{
INT destsz, size;
INT src_len = -1;
TRACE("%p %d %s %p %p %p\n", pdwMode, dwEncoding,
debugstr_w(pSrcStr), pcSrcSize, pDstStr, pcDstSize);
if (!pcDstSize)
return E_FAIL;
return S_OK;
if (!pcSrcSize)
pcSrcSize = &src_len;
if (!*pcSrcSize)
{
*pcDstSize = 0;
destsz = (pDstStr) ? *pcDstSize : 0;
*pcDstSize = 0;
if (!pSrcStr || !*pcSrcSize)
return S_OK;
}
switch (dwEncoding)
if (*pcSrcSize == -1)
*pcSrcSize = lstrlenW(pSrcStr);
if (dwEncoding == CP_UNICODE)
{
case CP_UNICODE:
if (*pcSrcSize == -1)
*pcSrcSize = lstrlenW(pSrcStr);
*pcDstSize = min(*pcSrcSize * sizeof(WCHAR), *pcDstSize);
size = min(*pcSrcSize, destsz) * sizeof(WCHAR);
if (pDstStr)
memmove(pDstStr, pSrcStr, *pcDstSize);
break;
memmove(pDstStr, pSrcStr, size);
default:
if (*pcSrcSize == -1)
*pcSrcSize = lstrlenW(pSrcStr);
if (size >= destsz)
goto fail;
}
else
{
size = WideCharToMultiByte(dwEncoding, 0, pSrcStr, *pcSrcSize,
NULL, 0, NULL, NULL);
if (!size)
goto fail;
if (pDstStr)
*pcDstSize = WideCharToMultiByte(dwEncoding, 0, pSrcStr, *pcSrcSize, pDstStr, *pcDstSize, NULL, NULL);
else
*pcDstSize = WideCharToMultiByte(dwEncoding, 0, pSrcStr, *pcSrcSize, NULL, 0, NULL, NULL);
break;
{
size = min(size, destsz);
size = WideCharToMultiByte(dwEncoding, 0, pSrcStr, *pcSrcSize,
pDstStr, destsz, NULL, NULL);
if (!size)
goto fail;
}
}
if (!*pcDstSize)
return E_FAIL;
*pcDstSize = size;
return S_OK;
fail:
*pcSrcSize = 0;
*pcDstSize = 0;
return E_FAIL;
}
HRESULT WINAPI ConvertINetString(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment