Alexandre Julliard : user32: Use kernel32 functions for character types and case conversions.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Mar 29 08:53:22 CDT 2016


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Mar 29 20:40:57 2016 +0900

user32: Use kernel32 functions for character types and case conversions.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/user32/lstr.c | 62 +++++++++++++++++++++++++++++++++++-------------------
 1 file changed, 40 insertions(+), 22 deletions(-)

diff --git a/dlls/user32/lstr.c b/dlls/user32/lstr.c
index a7e885a..a56e21c 100644
--- a/dlls/user32/lstr.c
+++ b/dlls/user32/lstr.c
@@ -31,11 +31,11 @@
 
 #include "windef.h"
 #include "winbase.h"
+#include "winnls.h"
 #include "winuser.h"
 #include "winerror.h"
 
 #include "wine/exception.h"
-#include "wine/unicode.h"
 
 
 /***********************************************************************
@@ -175,7 +175,7 @@ BOOL WINAPI CharToOemBuffW( LPCWSTR s, LPSTR d, DWORD len )
  */
 BOOL WINAPI CharToOemW( LPCWSTR s, LPSTR d )
 {
-    return CharToOemBuffW( s, d, strlenW( s ) + 1 );
+    return CharToOemBuffW( s, d, lstrlenW( s ) + 1 );
 }
 
 
@@ -280,20 +280,38 @@ LPSTR WINAPI CharUpperA(LPSTR str)
 /***********************************************************************
  *           CharLowerW   (USER32.@)
  */
-LPWSTR WINAPI CharLowerW(LPWSTR x)
+LPWSTR WINAPI CharLowerW( LPWSTR str )
 {
-    if (!IS_INTRESOURCE(x)) return strlwrW(x);
-    else return (LPWSTR)((UINT_PTR)tolowerW(LOWORD(x)));
+    if (!IS_INTRESOURCE( str ))
+    {
+        CharLowerBuffW( str, lstrlenW( str ));
+        return str;
+    }
+    else
+    {
+        WCHAR ch = LOWORD( str );
+        CharLowerBuffW( &ch, 1 );
+        return (LPWSTR)(UINT_PTR)ch;
+    }
 }
 
 
 /***********************************************************************
  *           CharUpperW   (USER32.@)
  */
-LPWSTR WINAPI CharUpperW(LPWSTR x)
+LPWSTR WINAPI CharUpperW( LPWSTR str )
 {
-    if (!IS_INTRESOURCE(x)) return struprW(x);
-    else return (LPWSTR)((UINT_PTR)toupperW(LOWORD(x)));
+    if (!IS_INTRESOURCE( str ))
+    {
+        CharUpperBuffW( str, lstrlenW( str ));
+        return str;
+    }
+    else
+    {
+        WCHAR ch = LOWORD( str );
+        CharUpperBuffW( &ch, 1 );
+        return (LPWSTR)(UINT_PTR)ch;
+    }
 }
 
 
@@ -327,10 +345,8 @@ DWORD WINAPI CharLowerBuffA( LPSTR str, DWORD len )
  */
 DWORD WINAPI CharLowerBuffW( LPWSTR str, DWORD len )
 {
-    DWORD ret = len;
     if (!str) return 0; /* YES */
-    for (; len; len--, str++) *str = tolowerW(*str);
-    return ret;
+    return LCMapStringW( LOCALE_USER_DEFAULT, LCMAP_LOWERCASE, str, len, str, len );
 }
 
 
@@ -364,10 +380,8 @@ DWORD WINAPI CharUpperBuffA( LPSTR str, DWORD len )
  */
 DWORD WINAPI CharUpperBuffW( LPWSTR str, DWORD len )
 {
-    DWORD ret = len;
     if (!str) return 0; /* YES */
-    for (; len; len--, str++) *str = toupperW(*str);
-    return ret;
+    return LCMapStringW( LOCALE_USER_DEFAULT, LCMAP_UPPERCASE, str, len, str, len );
 }
 
 
@@ -386,9 +400,10 @@ BOOL WINAPI IsCharLowerA(CHAR x)
 /***********************************************************************
  *           IsCharLowerW   (USER32.@)
  */
-BOOL WINAPI IsCharLowerW(WCHAR x)
+BOOL WINAPI IsCharLowerW( WCHAR ch )
 {
-    return (get_char_typeW(x) & C1_LOWER) != 0;
+    WORD type;
+    return GetStringTypeW( CT_CTYPE1, &ch, 1, &type ) && (type & C1_LOWER);
 }
 
 
@@ -407,9 +422,10 @@ BOOL WINAPI IsCharUpperA(CHAR x)
 /***********************************************************************
  *           IsCharUpperW   (USER32.@)
  */
-BOOL WINAPI IsCharUpperW(WCHAR x)
+BOOL WINAPI IsCharUpperW( WCHAR ch )
 {
-    return (get_char_typeW(x) & C1_UPPER) != 0;
+    WORD type;
+    return GetStringTypeW( CT_CTYPE1, &ch, 1, &type ) && (type & C1_UPPER);
 }
 
 
@@ -428,9 +444,10 @@ BOOL WINAPI IsCharAlphaNumericA(CHAR x)
 /***********************************************************************
  *           IsCharAlphaNumericW   (USER32.@)
  */
-BOOL WINAPI IsCharAlphaNumericW(WCHAR x)
+BOOL WINAPI IsCharAlphaNumericW( WCHAR ch )
 {
-    return (get_char_typeW(x) & (C1_ALPHA|C1_DIGIT)) != 0;
+    WORD type;
+    return GetStringTypeW( CT_CTYPE1, &ch, 1, &type ) && (type & (C1_ALPHA|C1_DIGIT));
 }
 
 
@@ -449,7 +466,8 @@ BOOL WINAPI IsCharAlphaA(CHAR x)
 /***********************************************************************
  *           IsCharAlphaW   (USER32.@)
  */
-BOOL WINAPI IsCharAlphaW(WCHAR x)
+BOOL WINAPI IsCharAlphaW( WCHAR ch )
 {
-    return (get_char_typeW(x) & C1_ALPHA) != 0;
+    WORD type;
+    return GetStringTypeW( CT_CTYPE1, &ch, 1, &type ) && (type & C1_ALPHA);
 }




More information about the wine-cvs mailing list