msvcp90: Added wctype implementation.
This commit is contained in:
parent
62a5540259
commit
7eb800f185
|
@ -2867,4 +2867,4 @@
|
||||||
@ stub __Wcrtomb_lk
|
@ stub __Wcrtomb_lk
|
||||||
@ stub towctrans
|
@ stub towctrans
|
||||||
@ stub wctrans
|
@ stub wctrans
|
||||||
@ stub wctype
|
@ cdecl wctype(str) msvcp90.wctype
|
||||||
|
|
|
@ -4317,4 +4317,4 @@
|
||||||
@ cdecl wcsrtombs(ptr ptr long ptr) msvcrt.wcsrtombs
|
@ cdecl wcsrtombs(ptr ptr long ptr) msvcrt.wcsrtombs
|
||||||
@ cdecl wctob(long) msvcrt.wctob
|
@ cdecl wctob(long) msvcrt.wctob
|
||||||
@ stub wctrans
|
@ stub wctrans
|
||||||
@ stub wctype
|
@ cdecl wctype(str) msvcp90.wctype
|
||||||
|
|
|
@ -5106,4 +5106,4 @@
|
||||||
@ cdecl wcsrtombs(ptr ptr long ptr) msvcrt.wcsrtombs
|
@ cdecl wcsrtombs(ptr ptr long ptr) msvcrt.wcsrtombs
|
||||||
@ cdecl wctob(long) msvcrt.wctob
|
@ cdecl wctob(long) msvcrt.wctob
|
||||||
@ stub wctrans
|
@ stub wctrans
|
||||||
@ stub wctype
|
@ cdecl wctype(str) msvcp90.wctype
|
||||||
|
|
|
@ -5166,4 +5166,4 @@
|
||||||
@ cdecl wcsrtombs(ptr ptr long ptr) msvcrt.wcsrtombs
|
@ cdecl wcsrtombs(ptr ptr long ptr) msvcrt.wcsrtombs
|
||||||
@ cdecl wctob(long) msvcrt.wctob
|
@ cdecl wctob(long) msvcrt.wctob
|
||||||
@ stub wctrans
|
@ stub wctrans
|
||||||
@ stub wctype
|
@ cdecl wctype(str) msvcp90.wctype
|
||||||
|
|
|
@ -5787,4 +5787,4 @@
|
||||||
@ stub __Wcrtomb_lk
|
@ stub __Wcrtomb_lk
|
||||||
@ stub towctrans
|
@ stub towctrans
|
||||||
@ stub wctrans
|
@ stub wctrans
|
||||||
@ stub wctype
|
@ cdecl wctype(str) msvcp90.wctype
|
||||||
|
|
|
@ -172,3 +172,31 @@ void __thiscall _Lockit_dtor(_Lockit *this)
|
||||||
{
|
{
|
||||||
_Lockit__Lockit_dtor(this);
|
_Lockit__Lockit_dtor(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* wctype */
|
||||||
|
unsigned short __cdecl wctype(const char *property)
|
||||||
|
{
|
||||||
|
static const struct {
|
||||||
|
const char *name;
|
||||||
|
unsigned short mask;
|
||||||
|
} properties[] = {
|
||||||
|
{ "alnum", _DIGIT|_ALPHA },
|
||||||
|
{ "alpha", _ALPHA },
|
||||||
|
{ "cntrl", _CONTROL },
|
||||||
|
{ "digit", _DIGIT },
|
||||||
|
{ "graph", _DIGIT|_PUNCT|_ALPHA },
|
||||||
|
{ "lower", _LOWER },
|
||||||
|
{ "print", _DIGIT|_PUNCT|_BLANK|_ALPHA },
|
||||||
|
{ "punct", _PUNCT },
|
||||||
|
{ "space", _SPACE },
|
||||||
|
{ "upper", _UPPER },
|
||||||
|
{ "xdigit", _HEX }
|
||||||
|
};
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for(i=0; i<sizeof(properties)/sizeof(properties[0]); i++)
|
||||||
|
if(!strcmp(property, properties[i].name))
|
||||||
|
return properties[i].mask;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -5809,7 +5809,7 @@
|
||||||
@ stub __Wcrtomb_lk
|
@ stub __Wcrtomb_lk
|
||||||
@ stub towctrans
|
@ stub towctrans
|
||||||
@ stub wctrans
|
@ stub wctrans
|
||||||
@ stub wctype
|
@ cdecl wctype(str)
|
||||||
|
|
||||||
#Functions not exported in native dll:
|
#Functions not exported in native dll:
|
||||||
@ thiscall -arch=win32 ?_Tidy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEX_N@Z(ptr long) basic_string_char_tidy_built
|
@ thiscall -arch=win32 ?_Tidy@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAEX_N@Z(ptr long) basic_string_char_tidy_built
|
||||||
|
|
|
@ -34,6 +34,8 @@ static BYTE (__cdecl *p_short_eq)(const void*, const void*);
|
||||||
|
|
||||||
static char* (__cdecl *p_Copy_s)(char*, size_t, const char*, size_t);
|
static char* (__cdecl *p_Copy_s)(char*, size_t, const char*, size_t);
|
||||||
|
|
||||||
|
static unsigned short (__cdecl *p_wctype)(const char*);
|
||||||
|
|
||||||
#ifdef __i386__
|
#ifdef __i386__
|
||||||
#define __thiscall __stdcall
|
#define __thiscall __stdcall
|
||||||
#else
|
#else
|
||||||
|
@ -124,6 +126,7 @@ static BOOL init(void)
|
||||||
|
|
||||||
p_set_invalid_parameter_handler(test_invalid_parameter_handler);
|
p_set_invalid_parameter_handler(test_invalid_parameter_handler);
|
||||||
|
|
||||||
|
SET(p_wctype, "wctype");
|
||||||
if(sizeof(void*) == 8) { /* 64-bit initialization */
|
if(sizeof(void*) == 8) { /* 64-bit initialization */
|
||||||
SET(p_char_assign, "?assign@?$char_traits@D@std@@SAXAEADAEBD@Z");
|
SET(p_char_assign, "?assign@?$char_traits@D@std@@SAXAEADAEBD@Z");
|
||||||
SET(p_wchar_assign, "?assign@?$char_traits@_W@std@@SAXAEA_WAEB_W@Z");
|
SET(p_wchar_assign, "?assign@?$char_traits@_W@std@@SAXAEA_WAEB_W@Z");
|
||||||
|
@ -259,6 +262,35 @@ static void test_Copy_s(void)
|
||||||
ok(errno == 0xdeadbeef, "errno = %d\n", errno);
|
ok(errno == 0xdeadbeef, "errno = %d\n", errno);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_wctype(void)
|
||||||
|
{
|
||||||
|
static const struct {
|
||||||
|
const char *name;
|
||||||
|
unsigned short mask;
|
||||||
|
} properties[] = {
|
||||||
|
{ "alnum", 0x107 },
|
||||||
|
{ "alpha", 0x103 },
|
||||||
|
{ "cntrl", 0x020 },
|
||||||
|
{ "digit", 0x004 },
|
||||||
|
{ "graph", 0x117 },
|
||||||
|
{ "lower", 0x002 },
|
||||||
|
{ "print", 0x157 },
|
||||||
|
{ "punct", 0x010 },
|
||||||
|
{ "space", 0x008 },
|
||||||
|
{ "upper", 0x001 },
|
||||||
|
{ "xdigit", 0x080 },
|
||||||
|
{ "ALNUM", 0x000 },
|
||||||
|
{ "Alnum", 0x000 },
|
||||||
|
{ "", 0x000 }
|
||||||
|
};
|
||||||
|
int i, ret;
|
||||||
|
|
||||||
|
for(i=0; i<sizeof(properties)/sizeof(properties[0]); i++) {
|
||||||
|
ret = p_wctype(properties[i].name);
|
||||||
|
ok(properties[i].mask == ret, "%d - Expected %x, got %x\n", i, properties[i].mask, ret);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void test_allocator_char(void)
|
static void test_allocator_char(void)
|
||||||
{
|
{
|
||||||
void *allocator = (void*)0xdeadbeef;
|
void *allocator = (void*)0xdeadbeef;
|
||||||
|
@ -298,6 +330,7 @@ START_TEST(misc)
|
||||||
test_assign();
|
test_assign();
|
||||||
test_equal();
|
test_equal();
|
||||||
test_Copy_s();
|
test_Copy_s();
|
||||||
|
test_wctype();
|
||||||
|
|
||||||
test_allocator_char();
|
test_allocator_char();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue