Piotr Caban : ntdll: Fix tolower implementation to not depend on locale.

Alexandre Julliard julliard at winehq.org
Tue Mar 26 16:43:13 CDT 2019


Module: wine
Branch: master
Commit: 4ed792439050c06c1833406ca74924153d9856cf
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=4ed792439050c06c1833406ca74924153d9856cf

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Tue Mar 26 10:26:12 2019 +0100

ntdll: Fix tolower implementation to not depend on locale.

Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ntdll/string.c       | 18 +++++++++---------
 dlls/ntdll/tests/string.c | 24 ++++++++++++++++++++++++
 2 files changed, 33 insertions(+), 9 deletions(-)

diff --git a/dlls/ntdll/string.c b/dlls/ntdll/string.c
index e0bf5be..d881e85 100644
--- a/dlls/ntdll/string.c
+++ b/dlls/ntdll/string.c
@@ -218,6 +218,15 @@ void * __cdecl _memccpy( void *dst, const void *src, int c, size_t n )
 
 
 /*********************************************************************
+ *                  tolower   (NTDLL.@)
+ */
+int __cdecl NTDLL_tolower( int c )
+{
+    return (char)c >= 'A' && (char)c <= 'Z' ? c - 'A' + 'a' : c;
+}
+
+
+/*********************************************************************
  *                  _memicmp   (NTDLL.@)
  *
  * Compare two blocks of memory as strings, ignoring case.
@@ -308,15 +317,6 @@ LPSTR __cdecl _strlwr( LPSTR str )
 
 
 /*********************************************************************
- *                  tolower   (NTDLL.@)
- */
-int __cdecl NTDLL_tolower( int c )
-{
-    return tolower( c );
-}
-
-
-/*********************************************************************
  *                  toupper   (NTDLL.@)
  */
 int __cdecl NTDLL_toupper( int c )
diff --git a/dlls/ntdll/tests/string.c b/dlls/ntdll/tests/string.c
index 0ab28ff..84755fd 100644
--- a/dlls/ntdll/tests/string.c
+++ b/dlls/ntdll/tests/string.c
@@ -61,6 +61,7 @@ static void     (__cdecl *p_qsort)(void *,size_t,size_t, int(__cdecl *compar)(co
 static void*    (__cdecl *p_bsearch)(void *,void*,size_t,size_t, int(__cdecl *compar)(const void *, const void *) );
 static int      (WINAPIV *p__snprintf)(char *, size_t, const char *, ...);
 
+static int      (__cdecl *p_tolower)(int);
 
 static void InitFunctionPtrs(void)
 {
@@ -99,6 +100,8 @@ static void InitFunctionPtrs(void)
 	p_bsearch= (void *)GetProcAddress(hntdll, "bsearch");
 
         p__snprintf = (void *)GetProcAddress(hntdll, "_snprintf");
+
+        p_tolower = (void *)GetProcAddress(hntdll, "tolower");
     } /* if */
 }
 
@@ -1327,6 +1330,26 @@ static void test__snprintf(void)
     ok(!strcmp(buffer, teststring), "_snprintf returned buffer '%s', expected '%s'.\n", buffer, teststring);
 }
 
+static void test_tolower(void)
+{
+    int i, ret, exp_ret;
+
+    if (!GetProcAddress(GetModuleHandleA("ntdll"), "NtRemoveIoCompletionEx"))
+    {
+        win_skip("tolower tests\n");
+        return;
+    }
+
+    ok(p_tolower != NULL, "tolower is not available\n");
+
+    for (i = -512; i < 512; i++)
+    {
+        exp_ret = (char)i >= 'A' && (char)i <= 'Z' ? i - 'A' + 'a' : i;
+        ret = p_tolower(i);
+        ok(ret == exp_ret, "tolower(%d) = %d\n", i, ret);
+    }
+}
+
 START_TEST(string)
 {
     InitFunctionPtrs();
@@ -1363,4 +1386,5 @@ START_TEST(string)
         test_bsearch();
     if (p__snprintf)
         test__snprintf();
+    test_tolower();
 }




More information about the wine-cvs mailing list