diff --git a/dlls/api-ms-win-crt-time-l1-1-0/api-ms-win-crt-time-l1-1-0.spec b/dlls/api-ms-win-crt-time-l1-1-0/api-ms-win-crt-time-l1-1-0.spec index 80b79cb04c9..2939b959150 100644 --- a/dlls/api-ms-win-crt-time-l1-1-0/api-ms-win-crt-time-l1-1-0.spec +++ b/dlls/api-ms-win-crt-time-l1-1-0/api-ms-win-crt-time-l1-1-0.spec @@ -4,7 +4,7 @@ @ cdecl _Strftime(str long str ptr ptr) ucrtbase._Strftime @ cdecl _W_Getdays() ucrtbase._W_Getdays @ cdecl _W_Getmonths() ucrtbase._W_Getmonths -@ stub _W_Gettnames +@ cdecl _W_Gettnames() ucrtbase._W_Gettnames @ stub _Wcsftime @ cdecl __daylight() ucrtbase.__daylight @ cdecl __dstbias() ucrtbase.__dstbias diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index dd23c750353..c1ee3a28d8c 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -866,7 +866,7 @@ @ stub _Unlock_shared_ptr_spin_lock @ cdecl _W_Getdays() @ cdecl _W_Getmonths() -@ stub _W_Gettnames +@ cdecl _W_Gettnames() @ stub _Wcsftime @ cdecl _XcptFilter(long ptr) @ cdecl __AdjustPointer(ptr ptr) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 461b5299730..9931820ff37 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -850,7 +850,7 @@ @ cdecl _Strftime(str long str ptr ptr) @ cdecl _W_Getdays() @ cdecl _W_Getmonths() -@ stub _W_Gettnames +@ cdecl _W_Gettnames() @ stub _Wcsftime @ cdecl _XcptFilter(long ptr) @ cdecl __AdjustPointer(ptr ptr) diff --git a/dlls/msvcr120/tests/msvcr120.c b/dlls/msvcr120/tests/msvcr120.c index 708fada5f30..aa78c4f0c2b 100644 --- a/dlls/msvcr120/tests/msvcr120.c +++ b/dlls/msvcr120/tests/msvcr120.c @@ -24,6 +24,7 @@ #include #include +#include #include "wine/test.h" #include @@ -80,6 +81,8 @@ static int (CDECL *p__fdsign)(float); static int (__cdecl *p__dpcomp)(double x, double y); static wchar_t** (CDECL *p____lc_locale_name_func)(void); static unsigned int (CDECL *p__GetConcurrency)(void); +static void* (CDECL *p__W_Gettnames)(void); +static void (CDECL *p_free)(void*); static BOOL init(void) { @@ -100,6 +103,8 @@ static BOOL init(void) p__dpcomp = (void*)GetProcAddress(module, "_dpcomp"); p____lc_locale_name_func = (void*)GetProcAddress(module, "___lc_locale_name_func"); p__GetConcurrency = (void*)GetProcAddress(module,"?_GetConcurrency@details@Concurrency@@YAIXZ"); + p__W_Gettnames = (void*)GetProcAddress(module, "_W_Gettnames"); + p_free = (void*)GetProcAddress(module, "free"); return TRUE; } @@ -269,6 +274,53 @@ static void test__GetConcurrency(void) ok(c == si.dwNumberOfProcessors, "expected %u, got %u\n", si.dwNumberOfProcessors, c); } +static void test__W_Gettnames(void) +{ + static const char *str[] = { + "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", + "Sunday", "Monday", "Tuesday", "Wednesday", + "Thursday", "Friday", "Saturday", + "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", + "January", "February", "March", "April", "May", "June", "July", + "August", "September", "October", "November", "December", + "AM", "PM", "M/d/yyyy" + }; + + struct { + char *str[43]; + int unk[2]; + wchar_t *wstr[43]; + wchar_t *locname; + char data[1]; + } *ret; + int i, size; + WCHAR buf[64]; + + if(!p_setlocale(LC_ALL, "english")) + return; + + ret = p__W_Gettnames(); + size = ret->str[0]-(char*)ret; + if(sizeof(void*) == 8) + ok(size==0x2c0, "structure size: %x\n", size); + else + ok(size==0x164, "structure size: %x\n", size); + + for(i=0; istr[i], str[i]), "ret->str[%d] = %s, expected %s\n", + i, ret->str[i], str[i]); + + MultiByteToWideChar(CP_ACP, 0, str[i], strlen(str[i])+1, + buf, sizeof(buf)/sizeof(*buf)); + ok(!lstrcmpW(ret->wstr[i], buf), "ret->wstr[%d] = %s, expected %s\n", + i, wine_dbgstr_w(ret->wstr[i]), wine_dbgstr_w(buf)); + } + p_free(ret); + + p_setlocale(LC_ALL, "C"); +} + START_TEST(msvcr120) { if (!init()) return; @@ -277,4 +329,5 @@ START_TEST(msvcr120) test__dpcomp(); test____lc_locale_name_func(); test__GetConcurrency(); + test__W_Gettnames(); } diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec index 425c839b691..50066ed07b8 100644 --- a/dlls/msvcr120_app/msvcr120_app.spec +++ b/dlls/msvcr120_app/msvcr120_app.spec @@ -844,7 +844,7 @@ @ cdecl _Strftime(str long str ptr ptr) msvcr120._Strftime @ cdecl _W_Getdays() msvcr120._W_Getdays @ cdecl _W_Getmonths() msvcr120._W_Getmonths -@ stub _W_Gettnames +@ cdecl _W_Gettnames() msvcr120._W_Gettnames @ stub _Wcsftime @ cdecl _XcptFilter(long ptr) msvcr120._XcptFilter @ cdecl __AdjustPointer(ptr ptr) msvcr120.__AdjustPointer diff --git a/dlls/msvcrt/locale.c b/dlls/msvcrt/locale.c index e1a0fbe4f14..a1551c2f727 100644 --- a/dlls/msvcrt/locale.c +++ b/dlls/msvcrt/locale.c @@ -579,6 +579,14 @@ void* CDECL _Gettnames(void) return ret; } +/********************************************************************* + * _W_Gettnames (MSVCR110.@) + */ +void* CDECL _W_Gettnames(void) +{ + return _Gettnames(); +} + /********************************************************************* * __crtLCMapStringA (MSVCRT.@) */ diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index e59e26fbfe8..e8095968720 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -43,7 +43,7 @@ @ cdecl _Strftime(str long str ptr ptr) @ cdecl _W_Getdays() @ cdecl _W_Getmonths() -@ stub _W_Gettnames +@ cdecl _W_Gettnames() @ stub _Wcsftime @ cdecl __AdjustPointer(ptr ptr) @ stub __BuildCatchObject