mirror of
https://github.com/reactos/reactos.git
synced 2026-06-05 19:43:39 +08:00
[IMM32] Improve IchWideFromAnsi and IchAnsiFromWide (#4028)
- Use LONG instead of DWORD for indexing and counting the characters. - Use the sign for the loop condition. - Add NUL check. CORE-11700
This commit is contained in:
committed by
GitHub
parent
89fd2b86e4
commit
fec35dc893
@@ -81,8 +81,8 @@ LPVOID APIENTRY Imm32HeapAlloc(DWORD dwFlags, DWORD dwBytes);
|
||||
|
||||
LPWSTR APIENTRY Imm32WideFromAnsi(LPCSTR pszA);
|
||||
LPSTR APIENTRY Imm32AnsiFromWide(LPCWSTR pszW);
|
||||
DWORD APIENTRY IchWideFromAnsi(DWORD cchAnsi, LPCSTR pchAnsi, UINT uCodePage);
|
||||
DWORD APIENTRY IchAnsiFromWide(DWORD cchWide, LPCWSTR pchWide, UINT uCodePage);
|
||||
LONG APIENTRY IchWideFromAnsi(LONG cchAnsi, LPCSTR pchAnsi, UINT uCodePage);
|
||||
LONG APIENTRY IchAnsiFromWide(LONG cchWide, LPCWSTR pchWide, UINT uCodePage);
|
||||
PIMEDPI APIENTRY ImmLockOrLoadImeDpi(HKL hKL);
|
||||
LPINPUTCONTEXT APIENTRY Imm32LockIMCEx(HIMC hIMC, BOOL fSelect);
|
||||
BOOL APIENTRY Imm32ReleaseIME(HKL hKL);
|
||||
|
||||
@@ -50,23 +50,16 @@ LPSTR APIENTRY Imm32AnsiFromWide(LPCWSTR pszW)
|
||||
return pszA;
|
||||
}
|
||||
|
||||
DWORD APIENTRY IchWideFromAnsi(DWORD cchAnsi, LPCSTR pchAnsi, UINT uCodePage)
|
||||
/* Converts the character index */
|
||||
LONG APIENTRY IchWideFromAnsi(LONG cchAnsi, LPCSTR pchAnsi, UINT uCodePage)
|
||||
{
|
||||
DWORD cchWide;
|
||||
for (cchWide = 0; cchAnsi; ++cchWide)
|
||||
LONG cchWide;
|
||||
for (cchWide = 0; cchAnsi > 0; ++cchWide)
|
||||
{
|
||||
if (IsDBCSLeadByteEx(uCodePage, *pchAnsi))
|
||||
if (IsDBCSLeadByteEx(uCodePage, *pchAnsi) && pchAnsi[1])
|
||||
{
|
||||
if (cchAnsi <= 1)
|
||||
{
|
||||
++cchWide;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
cchAnsi -= 2;
|
||||
pchAnsi += 2;
|
||||
}
|
||||
cchAnsi -= 2;
|
||||
pchAnsi += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -77,10 +70,11 @@ DWORD APIENTRY IchWideFromAnsi(DWORD cchAnsi, LPCSTR pchAnsi, UINT uCodePage)
|
||||
return cchWide;
|
||||
}
|
||||
|
||||
DWORD APIENTRY IchAnsiFromWide(DWORD cchWide, LPCWSTR pchWide, UINT uCodePage)
|
||||
/* Converts the character index */
|
||||
LONG APIENTRY IchAnsiFromWide(LONG cchWide, LPCWSTR pchWide, UINT uCodePage)
|
||||
{
|
||||
DWORD cb, cchAnsi;
|
||||
for (cchAnsi = 0; cchWide; ++cchAnsi, ++pchWide, --cchWide)
|
||||
LONG cb, cchAnsi;
|
||||
for (cchAnsi = 0; cchWide > 0; ++cchAnsi, ++pchWide, --cchWide)
|
||||
{
|
||||
cb = WideCharToMultiByte(uCodePage, 0, pchWide, 1, NULL, 0, NULL, NULL);
|
||||
if (cb > 1)
|
||||
|
||||
Reference in New Issue
Block a user