ntdll: test and fix _wcslwr and _wcsupr (try 2)
André Hentschel
nerv at dawncrow.de
Wed Sep 7 11:03:17 CDT 2011
native seems to check if the string is empty so it doesn't matter if it's empty and constant.
---
dlls/ntdll/tests/string.c | 32 ++++++++++++++++++++++++++++----
dlls/ntdll/wcstring.c | 2 ++
2 files changed, 30 insertions(+), 4 deletions(-)
diff --git a/dlls/ntdll/tests/string.c b/dlls/ntdll/tests/string.c
index 14464d9..9422d41 100644
--- a/dlls/ntdll/tests/string.c
+++ b/dlls/ntdll/tests/string.c
@@ -51,8 +51,8 @@ static LPWSTR (WINAPIV *p_ultow)(ULONG, LPWSTR, INT);
static LPWSTR (WINAPIV *p_i64tow)(LONGLONG, LPWSTR, INT);
static LPWSTR (WINAPIV *p_ui64tow)(ULONGLONG, LPWSTR, INT);
-static long (WINAPIV *pwcstol)(LPCWSTR, LPWSTR *, INT);
-static ULONG (WINAPIV *pwcstoul)(LPCWSTR, LPWSTR *, INT);
+static LPWSTR (__cdecl *p_wcslwr)(LPWSTR);
+static LPWSTR (__cdecl *p_wcsupr)(LPWSTR);
static LPWSTR (WINAPIV *p_wcschr)(LPCWSTR, WCHAR);
static LPWSTR (WINAPIV *p_wcsrchr)(LPCWSTR, WCHAR);
@@ -89,8 +89,8 @@ static void InitFunctionPtrs(void)
p_i64tow = (void *)GetProcAddress(hntdll, "_i64tow");
p_ui64tow = (void *)GetProcAddress(hntdll, "_ui64tow");
- pwcstol = (void *)GetProcAddress(hntdll, "wcstol");
- pwcstoul = (void *)GetProcAddress(hntdll, "wcstoul");
+ p_wcslwr = (void *)GetProcAddress(hntdll, "_wcslwr");
+ p_wcsupr = (void *)GetProcAddress(hntdll, "_wcsupr");
p_wcschr= (void *)GetProcAddress(hntdll, "wcschr");
p_wcsrchr= (void *)GetProcAddress(hntdll, "wcsrchr");
@@ -1143,6 +1143,28 @@ static void test_wcsrchr(void)
"wcsrchr should have returned NULL\n");
}
+static void test_wcslwrupr(void)
+{
+ static WCHAR teststringW[] = {'a','b','r','a','c','a','d','a','b','r','a',0};
+ static WCHAR emptyW[1] = {0};
+ static const WCHAR constemptyW[1] = {0};
+
+ if (0) /* crashes on native */
+ {
+ static const WCHAR conststringW[] = {'a','b','r','a','c','a','d','a','b','r','a',0};
+ ok(p_wcslwr((LPWSTR)conststringW) == conststringW, "p_wcslwr returned different string\n");
+ ok(p_wcsupr((LPWSTR)conststringW) == conststringW, "p_wcsupr returned different string\n");
+ ok(p_wcslwr(NULL) == NULL, "p_wcslwr didn't returned NULL\n");
+ ok(p_wcsupr(NULL) == NULL, "p_wcsupr didn't returned NULL\n");
+ }
+ ok(p_wcslwr(teststringW) == teststringW, "p_wcslwr returned different string\n");
+ ok(p_wcsupr(teststringW) == teststringW, "p_wcsupr returned different string\n");
+ ok(p_wcslwr(emptyW) == emptyW, "p_wcslwr returned different string\n");
+ ok(p_wcsupr(emptyW) == emptyW, "p_wcsupr returned different string\n");
+ ok(p_wcslwr((LPWSTR)constemptyW) == constemptyW, "p_wcslwr returned different string\n");
+ ok(p_wcsupr((LPWSTR)constemptyW) == constemptyW, "p_wcsupr returned different string\n");
+}
+
static __cdecl int intcomparefunc(const void *a, const void *b)
{
const int *p = a, *q = b;
@@ -1272,6 +1294,8 @@ START_TEST(string)
test_wcschr();
if (p_wcsrchr)
test_wcsrchr();
+ if (p_wcslwr && p_wcsupr)
+ test_wcslwrupr();
if (patoi)
test_atoi();
if (patol)
diff --git a/dlls/ntdll/wcstring.c b/dlls/ntdll/wcstring.c
index 7f0035d..88f7acf 100644
--- a/dlls/ntdll/wcstring.c
+++ b/dlls/ntdll/wcstring.c
@@ -47,6 +47,7 @@ INT __cdecl NTDLL__wcsicmp( LPCWSTR str1, LPCWSTR str2 )
*/
LPWSTR __cdecl NTDLL__wcslwr( LPWSTR str )
{
+ if (!*str) return str;
return strlwrW( str );
}
@@ -65,6 +66,7 @@ INT __cdecl NTDLL__wcsnicmp( LPCWSTR str1, LPCWSTR str2, INT n )
*/
LPWSTR __cdecl NTDLL__wcsupr( LPWSTR str )
{
+ if (!*str) return str;
return struprW( str );
}
--
Best Regards, André Hentschel
More information about the wine-patches
mailing list