Module: wine Branch: master Commit: 4ed792439050c06c1833406ca74924153d9856cf URL: https://source.winehq.org/git/wine.git/?a=commit;h=4ed792439050c06c1833406ca...
Author: Piotr Caban piotr@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@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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(); }