msvcr120: Add [to]wctrans.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46848 Signed-off-by: Gijs Vermeulen <gijsvrm@gmail.com> Signed-off-by: Piotr Caban <piotr@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
2dffeef20a
commit
3229074824
|
@ -119,4 +119,4 @@
|
||||||
@ cdecl wctob(long) ucrtbase.wctob
|
@ cdecl wctob(long) ucrtbase.wctob
|
||||||
@ cdecl wctomb(ptr long) ucrtbase.wctomb
|
@ cdecl wctomb(ptr long) ucrtbase.wctomb
|
||||||
@ cdecl wctomb_s(ptr ptr long long) ucrtbase.wctomb_s
|
@ cdecl wctomb_s(ptr ptr long long) ucrtbase.wctomb_s
|
||||||
@ stub wctrans
|
@ cdecl wctrans(str) ucrtbase.wctrans
|
||||||
|
|
|
@ -151,7 +151,7 @@
|
||||||
@ cdecl strxfrm(ptr str long) ucrtbase.strxfrm
|
@ cdecl strxfrm(ptr str long) ucrtbase.strxfrm
|
||||||
@ cdecl tolower(long) ucrtbase.tolower
|
@ cdecl tolower(long) ucrtbase.tolower
|
||||||
@ cdecl toupper(long) ucrtbase.toupper
|
@ cdecl toupper(long) ucrtbase.toupper
|
||||||
@ stub towctrans
|
@ cdecl towctrans(long long) ucrtbase.towctrans
|
||||||
@ cdecl towlower(long) ucrtbase.towlower
|
@ cdecl towlower(long) ucrtbase.towlower
|
||||||
@ cdecl towupper(long) ucrtbase.towupper
|
@ cdecl towupper(long) ucrtbase.towupper
|
||||||
@ cdecl wcscat(wstr wstr) ucrtbase.wcscat
|
@ cdecl wcscat(wstr wstr) ucrtbase.wcscat
|
||||||
|
|
|
@ -2414,7 +2414,7 @@
|
||||||
@ cdecl tmpnam_s(ptr long) MSVCRT_tmpnam_s
|
@ cdecl tmpnam_s(ptr long) MSVCRT_tmpnam_s
|
||||||
@ cdecl tolower(long) MSVCRT_tolower
|
@ cdecl tolower(long) MSVCRT_tolower
|
||||||
@ cdecl toupper(long) MSVCRT_toupper
|
@ cdecl toupper(long) MSVCRT_toupper
|
||||||
@ stub towctrans
|
@ cdecl towctrans(long long) MSVCR120_towctrans
|
||||||
@ cdecl towlower(long) MSVCRT_towlower
|
@ cdecl towlower(long) MSVCRT_towlower
|
||||||
@ cdecl towupper(long) MSVCRT_towupper
|
@ cdecl towupper(long) MSVCRT_towupper
|
||||||
@ cdecl trunc(double) MSVCR120_trunc
|
@ cdecl trunc(double) MSVCR120_trunc
|
||||||
|
@ -2486,7 +2486,7 @@
|
||||||
@ cdecl wctob(long) MSVCRT_wctob
|
@ cdecl wctob(long) MSVCRT_wctob
|
||||||
@ cdecl wctomb(ptr long) MSVCRT_wctomb
|
@ cdecl wctomb(ptr long) MSVCRT_wctomb
|
||||||
@ cdecl wctomb_s(ptr ptr long long) MSVCRT_wctomb_s
|
@ cdecl wctomb_s(ptr ptr long long) MSVCRT_wctomb_s
|
||||||
@ stub wctrans
|
@ cdecl wctrans(str) MSVCR120_wctrans
|
||||||
@ cdecl wctype(str)
|
@ cdecl wctype(str)
|
||||||
@ cdecl wmemcpy_s(ptr long ptr long)
|
@ cdecl wmemcpy_s(ptr long ptr long)
|
||||||
@ cdecl wmemmove_s(ptr long ptr long)
|
@ cdecl wmemmove_s(ptr long ptr long)
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <float.h>
|
#include <float.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
#include <wctype.h>
|
||||||
|
|
||||||
#include <windef.h>
|
#include <windef.h>
|
||||||
#include <winbase.h>
|
#include <winbase.h>
|
||||||
|
@ -205,6 +206,8 @@ static double (__cdecl *p_creal)(_Dcomplex);
|
||||||
static double (__cdecl *p_nexttoward)(double, double);
|
static double (__cdecl *p_nexttoward)(double, double);
|
||||||
static float (__cdecl *p_nexttowardf)(float, double);
|
static float (__cdecl *p_nexttowardf)(float, double);
|
||||||
static double (__cdecl *p_nexttowardl)(double, double);
|
static double (__cdecl *p_nexttowardl)(double, double);
|
||||||
|
static wctrans_t (__cdecl *p_wctrans)(const char*);
|
||||||
|
static wint_t (__cdecl *p_towctrans)(wint_t, wctrans_t);
|
||||||
|
|
||||||
/* make sure we use the correct errno */
|
/* make sure we use the correct errno */
|
||||||
#undef errno
|
#undef errno
|
||||||
|
@ -268,6 +271,8 @@ static BOOL init(void)
|
||||||
SET(p_nexttoward, "nexttoward");
|
SET(p_nexttoward, "nexttoward");
|
||||||
SET(p_nexttowardf, "nexttowardf");
|
SET(p_nexttowardf, "nexttowardf");
|
||||||
SET(p_nexttowardl, "nexttowardl");
|
SET(p_nexttowardl, "nexttowardl");
|
||||||
|
SET(p_wctrans, "wctrans");
|
||||||
|
SET(p_towctrans, "towctrans");
|
||||||
if(sizeof(void*) == 8) { /* 64-bit initialization */
|
if(sizeof(void*) == 8) { /* 64-bit initialization */
|
||||||
SET(p_critical_section_ctor,
|
SET(p_critical_section_ctor,
|
||||||
"??0critical_section@Concurrency@@QEAA@XZ");
|
"??0critical_section@Concurrency@@QEAA@XZ");
|
||||||
|
@ -1052,6 +1057,37 @@ static void test_nexttoward(void)
|
||||||
ok(e == -1, "Expected no error, got %d.\n", e);
|
ok(e == -1, "Expected no error, got %d.\n", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_towctrans(void)
|
||||||
|
{
|
||||||
|
wchar_t ret;
|
||||||
|
|
||||||
|
ret = p_wctrans("tolower");
|
||||||
|
ok(ret == 2, "wctrans returned %d, expected 2\n", ret);
|
||||||
|
ret = p_wctrans("toupper");
|
||||||
|
ok(ret == 1, "wctrans returned %d, expected 1\n", ret);
|
||||||
|
ret = p_wctrans("toLower");
|
||||||
|
ok(ret == 0, "wctrans returned %d, expected 0\n", ret);
|
||||||
|
ret = p_wctrans("");
|
||||||
|
ok(ret == 0, "wctrans returned %d, expected 0\n", ret);
|
||||||
|
if(0) { /* crashes on windows */
|
||||||
|
ret = p_wctrans(NULL);
|
||||||
|
ok(ret == 0, "wctrans returned %d, expected 0\n", ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = p_towctrans('t', 2);
|
||||||
|
ok(ret == 't', "towctrans('t', 2) returned %c, expected t\n", ret);
|
||||||
|
ret = p_towctrans('T', 2);
|
||||||
|
ok(ret == 't', "towctrans('T', 2) returned %c, expected t\n", ret);
|
||||||
|
ret = p_towctrans('T', 0);
|
||||||
|
ok(ret == 't', "towctrans('T', 0) returned %c, expected t\n", ret);
|
||||||
|
ret = p_towctrans('T', 3);
|
||||||
|
ok(ret == 't', "towctrans('T', 3) returned %c, expected t\n", ret);
|
||||||
|
ret = p_towctrans('t', 1);
|
||||||
|
ok(ret == 'T', "towctrans('t', 1) returned %c, expected T\n", ret);
|
||||||
|
ret = p_towctrans('T', 1);
|
||||||
|
ok(ret == 'T', "towctrans('T', 1) returned %c, expected T\n", ret);
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(msvcr120)
|
START_TEST(msvcr120)
|
||||||
{
|
{
|
||||||
if (!init()) return;
|
if (!init()) return;
|
||||||
|
@ -1072,4 +1108,5 @@ START_TEST(msvcr120)
|
||||||
test_vsscanf();
|
test_vsscanf();
|
||||||
test__Cbuild();
|
test__Cbuild();
|
||||||
test_nexttoward();
|
test_nexttoward();
|
||||||
|
test_towctrans();
|
||||||
}
|
}
|
||||||
|
|
|
@ -2076,7 +2076,7 @@
|
||||||
@ cdecl tmpnam_s(ptr long) msvcr120.tmpnam_s
|
@ cdecl tmpnam_s(ptr long) msvcr120.tmpnam_s
|
||||||
@ cdecl tolower(long) msvcr120.tolower
|
@ cdecl tolower(long) msvcr120.tolower
|
||||||
@ cdecl toupper(long) msvcr120.toupper
|
@ cdecl toupper(long) msvcr120.toupper
|
||||||
@ stub towctrans
|
@ cdecl towctrans(long long) msvcr120.towctrans
|
||||||
@ cdecl towlower(long) msvcr120.towlower
|
@ cdecl towlower(long) msvcr120.towlower
|
||||||
@ cdecl towupper(long) msvcr120.towupper
|
@ cdecl towupper(long) msvcr120.towupper
|
||||||
@ cdecl trunc(double) msvcr120.trunc
|
@ cdecl trunc(double) msvcr120.trunc
|
||||||
|
@ -2148,7 +2148,7 @@
|
||||||
@ cdecl wctob(long) msvcr120.wctob
|
@ cdecl wctob(long) msvcr120.wctob
|
||||||
@ cdecl wctomb(ptr long) msvcr120.wctomb
|
@ cdecl wctomb(ptr long) msvcr120.wctomb
|
||||||
@ cdecl wctomb_s(ptr ptr long long) msvcr120.wctomb_s
|
@ cdecl wctomb_s(ptr ptr long long) msvcr120.wctomb_s
|
||||||
@ stub wctrans
|
@ cdecl wctrans(str) msvcr120.wctrans
|
||||||
@ cdecl wctype(str) msvcr120.wctype
|
@ cdecl wctype(str) msvcr120.wctype
|
||||||
@ cdecl wmemcpy_s(ptr long ptr long) msvcr120.wmemcpy_s
|
@ cdecl wmemcpy_s(ptr long ptr long) msvcr120.wmemcpy_s
|
||||||
@ cdecl wmemmove_s(ptr long ptr long) msvcr120.wmemmove_s
|
@ cdecl wmemmove_s(ptr long ptr long) msvcr120.wmemmove_s
|
||||||
|
|
|
@ -2069,3 +2069,30 @@ BOOL msvcrt_init_locale(void)
|
||||||
_setmbcp(_MB_CP_ANSI);
|
_setmbcp(_MB_CP_ANSI);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if _MSVCR_VER >= 120
|
||||||
|
/*********************************************************************
|
||||||
|
* wctrans (MSVCR120.@)
|
||||||
|
*/
|
||||||
|
MSVCRT_wctrans_t CDECL MSVCR120_wctrans(const char *property)
|
||||||
|
{
|
||||||
|
static const char str_tolower[] = "tolower";
|
||||||
|
static const char str_toupper[] = "toupper";
|
||||||
|
|
||||||
|
if(!strcmp(property, str_tolower))
|
||||||
|
return 2;
|
||||||
|
if(!strcmp(property, str_toupper))
|
||||||
|
return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
* towctrans (MSVCR120.@)
|
||||||
|
*/
|
||||||
|
MSVCRT_wint_t CDECL MSVCR120_towctrans(MSVCRT_wint_t c, MSVCRT_wctrans_t category)
|
||||||
|
{
|
||||||
|
if(category == 1)
|
||||||
|
return MSVCRT__towupper_l(c, NULL);
|
||||||
|
return MSVCRT__towlower_l(c, NULL);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
|
@ -63,6 +63,7 @@
|
||||||
typedef unsigned char MSVCRT_bool;
|
typedef unsigned char MSVCRT_bool;
|
||||||
typedef unsigned short MSVCRT_wchar_t;
|
typedef unsigned short MSVCRT_wchar_t;
|
||||||
typedef unsigned short MSVCRT_wint_t;
|
typedef unsigned short MSVCRT_wint_t;
|
||||||
|
typedef unsigned short MSVCRT_wctrans_t;
|
||||||
typedef unsigned short MSVCRT_wctype_t;
|
typedef unsigned short MSVCRT_wctype_t;
|
||||||
typedef unsigned short MSVCRT__ino_t;
|
typedef unsigned short MSVCRT__ino_t;
|
||||||
typedef unsigned int MSVCRT__fsize_t;
|
typedef unsigned int MSVCRT__fsize_t;
|
||||||
|
@ -1145,6 +1146,8 @@ void __cdecl MSVCRT__invalid_parameter(const MSVCRT_wchar_t *expr, const MSVCRT_
|
||||||
const MSVCRT_wchar_t *file, unsigned int line, MSVCRT_uintptr_t arg);
|
const MSVCRT_wchar_t *file, unsigned int line, MSVCRT_uintptr_t arg);
|
||||||
int __cdecl MSVCRT__toupper_l(int,MSVCRT__locale_t);
|
int __cdecl MSVCRT__toupper_l(int,MSVCRT__locale_t);
|
||||||
int __cdecl MSVCRT__tolower_l(int,MSVCRT__locale_t);
|
int __cdecl MSVCRT__tolower_l(int,MSVCRT__locale_t);
|
||||||
|
int __cdecl MSVCRT__towupper_l(MSVCRT_wint_t,MSVCRT__locale_t);
|
||||||
|
int __cdecl MSVCRT__towlower_l(MSVCRT_wint_t,MSVCRT__locale_t);
|
||||||
int __cdecl MSVCRT__strnicmp(const char*, const char*, MSVCRT_size_t);
|
int __cdecl MSVCRT__strnicmp(const char*, const char*, MSVCRT_size_t);
|
||||||
int __cdecl MSVCRT__strnicoll_l(const char*, const char*, MSVCRT_size_t, MSVCRT__locale_t);
|
int __cdecl MSVCRT__strnicoll_l(const char*, const char*, MSVCRT_size_t, MSVCRT__locale_t);
|
||||||
int __cdecl MSVCRT__strncoll_l(const char*, const char*, MSVCRT_size_t, MSVCRT__locale_t);
|
int __cdecl MSVCRT__strncoll_l(const char*, const char*, MSVCRT_size_t, MSVCRT__locale_t);
|
||||||
|
|
|
@ -2543,7 +2543,7 @@
|
||||||
@ cdecl tmpnam_s(ptr long) MSVCRT_tmpnam_s
|
@ cdecl tmpnam_s(ptr long) MSVCRT_tmpnam_s
|
||||||
@ cdecl tolower(long) MSVCRT_tolower
|
@ cdecl tolower(long) MSVCRT_tolower
|
||||||
@ cdecl toupper(long) MSVCRT_toupper
|
@ cdecl toupper(long) MSVCRT_toupper
|
||||||
@ stub towctrans
|
@ cdecl towctrans(long long) MSVCR120_towctrans
|
||||||
@ cdecl towlower(long) MSVCRT_towlower
|
@ cdecl towlower(long) MSVCRT_towlower
|
||||||
@ cdecl towupper(long) MSVCRT_towupper
|
@ cdecl towupper(long) MSVCRT_towupper
|
||||||
@ cdecl trunc(double) MSVCR120_trunc
|
@ cdecl trunc(double) MSVCR120_trunc
|
||||||
|
@ -2593,7 +2593,7 @@
|
||||||
@ cdecl wctob(long) MSVCRT_wctob
|
@ cdecl wctob(long) MSVCRT_wctob
|
||||||
@ cdecl wctomb(ptr long) MSVCRT_wctomb
|
@ cdecl wctomb(ptr long) MSVCRT_wctomb
|
||||||
@ cdecl wctomb_s(ptr ptr long long) MSVCRT_wctomb_s
|
@ cdecl wctomb_s(ptr ptr long long) MSVCRT_wctomb_s
|
||||||
@ stub wctrans
|
@ cdecl wctrans(str) MSVCR120_wctrans
|
||||||
@ cdecl wctype(str)
|
@ cdecl wctype(str)
|
||||||
@ cdecl wmemcpy_s(ptr long ptr long)
|
@ cdecl wmemcpy_s(ptr long ptr long)
|
||||||
@ cdecl wmemmove_s(ptr long ptr long)
|
@ cdecl wmemmove_s(ptr long ptr long)
|
||||||
|
|
Loading…
Reference in New Issue