msvcr110: Add _W_Gettnames implementation.
authorPiotr Caban <piotr@codeweavers.com>
Wed, 20 Jan 2016 10:42:14 +0000 (11:42 +0100)
committerAlexandre Julliard <julliard@winehq.org>
Wed, 20 Jan 2016 12:19:27 +0000 (21:19 +0900)
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
dlls/api-ms-win-crt-time-l1-1-0/api-ms-win-crt-time-l1-1-0.spec
dlls/msvcr110/msvcr110.spec
dlls/msvcr120/msvcr120.spec
dlls/msvcr120/tests/msvcr120.c
dlls/msvcr120_app/msvcr120_app.spec
dlls/msvcrt/locale.c
dlls/ucrtbase/ucrtbase.spec

index 80b79cb04c95c92799fa33e7ccea5d2681880b36..2939b959150338ccc25538b77146fb3e67993941 100644 (file)
@@ -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
index dd23c7503536079709197b919029735c4262fd65..c1ee3a28d8cf02550ebdc7ab794a9c25ab3ac80a 100644 (file)
 @ 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)
index 461b5299730ad3a9861f92305d502e738406d48b..9931820ff378b013313ebcf8c7f1bdff94a4d089 100644 (file)
 @ 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)
index 708fada5f30779d878e6dc07b9c4b15b7bbb5f7b..aa78c4f0c2bd9428b5159c82eb6a26b6422d64ad 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <windef.h>
 #include <winbase.h>
+#include <winnls.h>
 #include "wine/test.h"
 
 #include <locale.h>
@@ -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; i<sizeof(str)/sizeof(*str); i++) {
+        ok(!strcmp(ret->str[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();
 }
index 425c839b69190c21f73f62341509324c19deaac3..50066ed07b85df6e4098ccd0e872afa1f763e34a 100644 (file)
 @ 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
index e1a0fbe4f1493f33e22b2de82ad2b12417c3fb3f..a1551c2f7271e9dd55a204e35227b6f095229802 100644 (file)
@@ -579,6 +579,14 @@ void* CDECL _Gettnames(void)
     return ret;
 }
 
+/*********************************************************************
+ *              _W_Gettnames (MSVCR110.@)
+ */
+void* CDECL _W_Gettnames(void)
+{
+    return _Gettnames();
+}
+
 /*********************************************************************
  *             __crtLCMapStringA (MSVCRT.@)
  */
index e59e26fbfe80e377a117272b64952a4ab769b4c3..e8095968720663448e3354d045b07b2b90faa54f 100644 (file)
@@ -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