From 42ccd8d9ecb386bb9da311c1faa5c14a12d26de3 Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Fri, 14 Apr 2017 18:21:21 +0200 Subject: [PATCH] msvcr120: Add wctype implementation. Signed-off-by: Piotr Caban Signed-off-by: Alexandre Julliard --- .../api-ms-win-crt-string-l1-1-0.spec | 2 +- dlls/msvcr120/msvcr120.spec | 2 +- dlls/msvcr120/tests/msvcr120.c | 32 +++++++++++++++++++ dlls/msvcr120_app/msvcr120_app.spec | 2 +- dlls/msvcrt/ctype.c | 30 +++++++++++++++++ dlls/ucrtbase/ucrtbase.spec | 2 +- 6 files changed, 66 insertions(+), 4 deletions(-) diff --git a/dlls/api-ms-win-crt-string-l1-1-0/api-ms-win-crt-string-l1-1-0.spec b/dlls/api-ms-win-crt-string-l1-1-0/api-ms-win-crt-string-l1-1-0.spec index 0f30b05027e..1daaadc13ad 100644 --- a/dlls/api-ms-win-crt-string-l1-1-0/api-ms-win-crt-string-l1-1-0.spec +++ b/dlls/api-ms-win-crt-string-l1-1-0/api-ms-win-crt-string-l1-1-0.spec @@ -173,6 +173,6 @@ @ cdecl wcstok(wstr wstr) ucrtbase.wcstok @ cdecl wcstok_s(ptr wstr ptr) ucrtbase.wcstok_s @ cdecl wcsxfrm(ptr wstr long) ucrtbase.wcsxfrm -@ stub wctype +@ cdecl wctype(str) ucrtbase.wctype @ cdecl wmemcpy_s(ptr long ptr long) ucrtbase.wmemcpy_s @ cdecl wmemmove_s(ptr long ptr long) ucrtbase.wmemmove_s diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index d73a603c20c..96afa6f405e 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -2487,7 +2487,7 @@ @ cdecl wctomb(ptr long) MSVCRT_wctomb @ cdecl wctomb_s(ptr ptr long long) MSVCRT_wctomb_s @ stub wctrans -@ stub wctype +@ cdecl wctype(str) @ cdecl wmemcpy_s(ptr long ptr long) @ cdecl wmemmove_s(ptr long ptr long) @ varargs wprintf(wstr) MSVCRT_wprintf diff --git a/dlls/msvcr120/tests/msvcr120.c b/dlls/msvcr120/tests/msvcr120.c index 13f36720c00..de0ccc480ef 100644 --- a/dlls/msvcr120/tests/msvcr120.c +++ b/dlls/msvcr120/tests/msvcr120.c @@ -182,6 +182,7 @@ static int (CDECL *p_fegetenv)(fenv_t*); static int (CDECL *p__clearfp)(void); static _locale_t (__cdecl *p_wcreate_locale)(int, const wchar_t *); static void (__cdecl *p_free_locale)(_locale_t); +static unsigned short (__cdecl *p_wctype)(const char*); /* make sure we use the correct errno */ #undef errno @@ -236,6 +237,7 @@ static BOOL init(void) p_errno = (void*)GetProcAddress(module, "_errno"); p_wcreate_locale = (void*)GetProcAddress(module, "_wcreate_locale"); p_free_locale = (void*)GetProcAddress(module, "_free_locale"); + SET(p_wctype, "wctype"); SET(p_fegetenv, "fegetenv"); SET(p__clearfp, "_clearfp"); if(sizeof(void*) == 8) { /* 64-bit initialization */ @@ -880,6 +882,35 @@ static void test__Condition_variable(void) CloseHandle(thread_initialized); } +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