[ros-diffs] [cfinck] 33482: Sync CharLowerA/W and CharUpperA/W with Wine (after replacing Wine's SEH with PSEH). This way, we pass all user32 wsprintf Wine tests. Verified under Windows XP SP2.

cfinck at svn.reactos.org cfinck at svn.reactos.org
Mon May 12 20:35:22 CEST 2008


Author: cfinck
Date: Mon May 12 13:35:21 2008
New Revision: 33482

URL: http://svn.reactos.org/svn/reactos?rev=33482&view=rev
Log:
Sync CharLowerA/W and CharUpperA/W with Wine (after replacing Wine's SEH with PSEH).
This way, we pass all user32 wsprintf Wine tests.
Verified under Windows XP SP2.

Modified:
    trunk/reactos/dll/win32/user32/windows/text.c

Modified: trunk/reactos/dll/win32/user32/windows/text.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/user32/windows/text.c?rev=33482&r1=33481&r2=33482&view=diff
==============================================================================
--- trunk/reactos/dll/win32/user32/windows/text.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/user32/windows/text.c [iso-8859-1] Mon May 12 13:35:21 2008
@@ -52,28 +52,27 @@
  */
 LPSTR
 WINAPI
-CharLowerA(LPSTR x)
-{
-    if (!HIWORD(x)) return (LPSTR)tolower((char)(int)x);
-    CharLowerBuffA(x, strlen(x));
-/*
-    __TRY
-    {
-        LPSTR s = x;
-        while (*s)
-        {
-            *s=tolower(*s);
-            s++;
-        }
-    }
-    __EXCEPT(page_fault)
+CharLowerA(LPSTR str)
+{
+    if (!HIWORD(str))
+    {
+        char ch = LOWORD(str);
+        CharLowerBuffA( &ch, 1 );
+        return (LPSTR)(UINT_PTR)(BYTE)ch;
+    }
+
+    _SEH_TRY
+    {
+        CharLowerBuffA( str, strlen(str) );
+    }
+    _SEH_HANDLE
     {
         SetLastError( ERROR_INVALID_PARAMETER );
         return NULL;
     }
-    __ENDTRY
- */
-    return x;
+    _SEH_END;
+
+    return str;
 }
 
 /*
@@ -119,11 +118,8 @@
 WINAPI
 CharLowerW(LPWSTR x)
 {
-    if (HIWORD(x)) {
-        return _wcslwr(x);
-    } else {
-        return (LPWSTR)(INT)towlower((WORD)(((DWORD)(x)) & 0xFFFF));
-    }
+    if (HIWORD(x)) return strlwrW(x);
+    else return (LPWSTR)((UINT_PTR)tolowerW(LOWORD(x)));
 }
 
 /*
@@ -256,11 +252,27 @@
 /*
  * @implemented
  */
-LPSTR WINAPI CharUpperA(LPSTR x)
-{
-    if (!HIWORD(x)) return (LPSTR)toupper((char)(int)x);
-    CharUpperBuffA(x, strlen(x));
-    return x;
+LPSTR WINAPI CharUpperA(LPSTR str)
+{
+    if (!HIWORD(str))
+    {
+        char ch = LOWORD(str);
+        CharUpperBuffA( &ch, 1 );
+        return (LPSTR)(UINT_PTR)(BYTE)ch;
+    }
+
+    _SEH_TRY
+    {
+        CharUpperBuffA( str, strlen(str) );
+    }
+    _SEH_HANDLE
+    {
+        SetLastError( ERROR_INVALID_PARAMETER );
+        return NULL;
+    }
+    _SEH_END;
+
+    return str;
 }
 
 /*
@@ -306,8 +318,8 @@
 WINAPI
 CharUpperW(LPWSTR x)
 {
-    if (HIWORD(x)) return _wcsupr(x);
-    else return (LPWSTR)(UINT)towlower((WORD)(((DWORD)(x)) & 0xFFFF));
+    if (HIWORD(x)) return struprW(x);
+    else return (LPWSTR)((UINT_PTR)toupperW(LOWORD(x)));
 }
 
 /*



More information about the Ros-diffs mailing list