diff --git a/dlls/msvcrt/tests/string.c b/dlls/msvcrt/tests/string.c index a1591329725..4f8b8b0dfba 100644 --- a/dlls/msvcrt/tests/string.c +++ b/dlls/msvcrt/tests/string.c @@ -3633,7 +3633,6 @@ static void test_C_locale(void) ok(ret == exp, "expected %x, got %x for C locale\n", exp, ret); } else - todo_wine_if(ret != i) ok(ret == i, "expected self %x, got %x for C locale\n", i, ret); ret = p_towupper(i); @@ -3664,7 +3663,6 @@ static void test_C_locale(void) ok(ret == exp, "expected %x, got %x for C locale\n", exp, ret); } else - todo_wine_if(ret != j) ok(ret == j, "expected self %x, got %x for C locale\n", j, ret); ret = p__towupper_l(j, locale); diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c index a6d7c1f2006..d96da44737e 100644 --- a/dlls/msvcrt/wcs.c +++ b/dlls/msvcrt/wcs.c @@ -2494,6 +2494,19 @@ int CDECL MSVCRT_towupper(MSVCRT_wint_t c) */ int CDECL MSVCRT__towlower_l(MSVCRT_wint_t c, MSVCRT__locale_t locale) { + MSVCRT_pthreadlocinfo locinfo; + + if(!locale) + locinfo = get_locinfo(); + else + locinfo = locale->locinfo; + + if(!locinfo->lc_handle[MSVCRT_LC_CTYPE]) { + if(c >= 'A' && c <= 'Z') + return c + 'a' - 'A'; + return c; + } + return tolowerW(c); }