Jactry Zeng : riched20: Add a length return parameter to ME_ToUnicode.

Alexandre Julliard julliard at winehq.org
Tue Sep 10 14:49:56 CDT 2013


Module: wine
Branch: master
Commit: 1cbdb2aff7cb690be5a99ca36e994f84504e4b5b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=1cbdb2aff7cb690be5a99ca36e994f84504e4b5b

Author: Jactry Zeng <jactry92 at gmail.com>
Date:   Fri Sep  6 10:46:10 2013 +0800

riched20: Add a length return parameter to ME_ToUnicode.

---

 dlls/riched20/editor.c |   15 +++++++--------
 dlls/riched20/editor.h |    2 +-
 dlls/riched20/string.c |   13 ++++++++++---
 3 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/dlls/riched20/editor.c b/dlls/riched20/editor.c
index f54458e..9af8a23 100644
--- a/dlls/riched20/editor.c
+++ b/dlls/riched20/editor.c
@@ -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;
 
diff --git a/dlls/riched20/editor.h b/dlls/riched20/editor.h
index 8c78447..5893051 100644
--- a/dlls/riched20/editor.h
+++ b/dlls/riched20/editor.h
@@ -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)
diff --git a/dlls/riched20/string.c b/dlls/riched20/string.c
index 6d7d222..f4cd320 100644
--- a/dlls/riched20/string.c
+++ b/dlls/riched20/string.c
@@ -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;
   }
 }




More information about the wine-cvs mailing list