riched20: Add a length return parameter to ME_ToUnicode.

This commit is contained in:
Jactry Zeng 2013-09-06 10:46:10 +08:00 committed by Alexandre Julliard
parent dea4f7bc02
commit 1cbdb2aff7
3 changed files with 18 additions and 12 deletions

View File

@ -3276,8 +3276,7 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam,
{
LPWSTR wszText;
SETTEXTEX *pStruct = (SETTEXTEX *)wParam;
size_t len = 0;
int from, to;
int from, to, len;
ME_Style *style;
BOOL bRtf, bUnicode, bSelection;
int oldModify = editor->nModifyStep;
@ -3315,8 +3314,7 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam,
}
} else {
/* FIXME: make use of pStruct->codepage in the to unicode translation */
wszText = lParam ? ME_ToUnicode(bUnicode, (void *)lParam) : NULL;
len = wszText ? lstrlenW(wszText) : 0;
wszText = ME_ToUnicode(bUnicode, (void *)lParam, &len);
ME_InsertTextFromCursor(editor, 0, wszText, len, style);
ME_EndToUnicode(bUnicode, wszText);
}
@ -3505,8 +3503,8 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam,
{
int from, to, nStartCursor;
ME_Style *style;
LPWSTR wszText = lParam ? ME_ToUnicode(unicode, (void *)lParam) : NULL;
size_t len = wszText ? lstrlenW(wszText) : 0;
int len = 0;
LPWSTR wszText = ME_ToUnicode(unicode, (void *)lParam, &len);
TRACE("EM_REPLACESEL - %s\n", debugstr_w(wszText));
nStartCursor = ME_GetSelectionOfs(editor, &from, &to);
@ -3576,9 +3574,10 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam,
}
else
{
LPWSTR wszText = ME_ToUnicode(unicode, (void *)lParam);
int textLen;
LPWSTR wszText = ME_ToUnicode(unicode, (void *)lParam, &textLen);
TRACE("WM_SETTEXT - %s\n", debugstr_w(wszText)); /* debugstr_w() */
if (lstrlenW(wszText) > 0)
if (textLen > 0)
{
int len = -1;

View File

@ -109,7 +109,7 @@ void ME_StrDeleteV(ME_String *s, int nVChar, int nChars) DECLSPEC_HIDDEN;
BOOL ME_InsertString(ME_String *s, int ofs, const WCHAR *insert, int len) DECLSPEC_HIDDEN;
/* smart helpers for A<->W conversions, they reserve/free memory and call MultiByte<->WideChar functions */
LPWSTR ME_ToUnicode(BOOL unicode, LPVOID psz) DECLSPEC_HIDDEN;
LPWSTR ME_ToUnicode(BOOL unicode, LPVOID psz, INT *len) DECLSPEC_HIDDEN;
void ME_EndToUnicode(BOOL unicode, LPVOID psz) DECLSPEC_HIDDEN;
static inline int ME_IsWSpace(WCHAR ch)

View File

@ -172,17 +172,24 @@ ME_CallWordBreakProc(ME_TextEditor *editor, WCHAR *str, INT len, INT start, INT
}
}
LPWSTR ME_ToUnicode(BOOL unicode, LPVOID psz)
LPWSTR ME_ToUnicode(BOOL unicode, LPVOID psz, INT *len)
{
assert(psz != NULL);
*len = 0;
if (!psz) return NULL;
if (unicode)
{
*len = lstrlenW(psz);
return psz;
}
else {
WCHAR *tmp;
int nChars = MultiByteToWideChar(CP_ACP, 0, psz, -1, NULL, 0);
if(!nChars) return NULL;
if((tmp = ALLOC_N_OBJ(WCHAR, nChars)) != NULL)
MultiByteToWideChar(CP_ACP, 0, psz, -1, tmp, nChars);
*len = MultiByteToWideChar(CP_ACP, 0, psz, -1, tmp, nChars) - 1;
return tmp;
}
}