Piotr Caban : msvcr120: Added _Cbuild implementation.

Alexandre Julliard julliard at winehq.org
Sun Mar 3 13:21:26 CST 2019


Module: wine
Branch: oldstable
Commit: a5f505d12ff33f13b9a1057dcc092fde6e6682cc
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=a5f505d12ff33f13b9a1057dcc092fde6e6682cc

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Mon Oct  1 19:50:39 2018 +0200

msvcr120: Added _Cbuild implementation.

Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit 84f5d8a619c599dbacff499989500e653abec0fa)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>

---

 .../api-ms-win-crt-math-l1-1-0.spec                |  2 +-
 dlls/msvcr120/msvcr120.spec                        |  2 +-
 dlls/msvcr120/tests/msvcr120.c                     | 23 ++++++++++++++++++++++
 dlls/msvcr120_app/msvcr120_app.spec                |  2 +-
 dlls/msvcrt/math.c                                 |  7 +++++++
 dlls/msvcrt/msvcrt.h                               |  1 +
 dlls/ucrtbase/ucrtbase.spec                        |  2 +-
 7 files changed, 35 insertions(+), 4 deletions(-)

diff --git a/dlls/api-ms-win-crt-math-l1-1-0/api-ms-win-crt-math-l1-1-0.spec b/dlls/api-ms-win-crt-math-l1-1-0/api-ms-win-crt-math-l1-1-0.spec
index 7bae4ff..ec85a53 100644
--- a/dlls/api-ms-win-crt-math-l1-1-0/api-ms-win-crt-math-l1-1-0.spec
+++ b/dlls/api-ms-win-crt-math-l1-1-0/api-ms-win-crt-math-l1-1-0.spec
@@ -14,7 +14,7 @@
 @ cdecl -arch=i386 _CIsqrt() ucrtbase._CIsqrt
 @ cdecl -arch=i386 _CItan() ucrtbase._CItan
 @ cdecl -arch=i386 _CItanh() ucrtbase._CItanh
-@ stub _Cbuild
+@ cdecl _Cbuild(ptr double double) ucrtbase._Cbuild
 @ stub _Cmulcc
 @ stub _Cmulcr
 @ stub _FCbuild
diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec
index 53a99f3..4d611d1 100644
--- a/dlls/msvcr120/msvcr120.spec
+++ b/dlls/msvcr120/msvcr120.spec
@@ -824,7 +824,7 @@
 @ cdecl -arch=i386 _CItanh()
 @ cdecl _CRT_RTC_INIT(ptr ptr long long long)
 @ cdecl _CRT_RTC_INITW(ptr ptr long long long)
-@ stub _Cbuild
+@ cdecl _Cbuild(ptr double double) MSVCR120__Cbuild
 @ cdecl _CreateFrameInfo(ptr ptr)
 @ stdcall _CxxThrowException(ptr ptr)
 @ cdecl -arch=i386 -norelay _EH_prolog()
diff --git a/dlls/msvcr120/tests/msvcr120.c b/dlls/msvcr120/tests/msvcr120.c
index 152bfdf..1b5d409 100644
--- a/dlls/msvcr120/tests/msvcr120.c
+++ b/dlls/msvcr120/tests/msvcr120.c
@@ -163,6 +163,12 @@ typedef struct
     unsigned int status;
 } fenv_t;
 
+typedef struct
+{
+    double r;
+    double i;
+} _Dcomplex;
+
 static char* (CDECL *p_setlocale)(int category, const char* locale);
 static struct MSVCRT_lconv* (CDECL *p_localeconv)(void);
 static size_t (CDECL *p_wcstombs_s)(size_t *ret, char* dest, size_t sz, const wchar_t* src, size_t max);
@@ -184,6 +190,7 @@ 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*);
 static int (__cdecl *p_vsscanf)(const char*, const char *, __ms_va_list valist);
+static _Dcomplex* (__cdecl *p__Cbuild)(_Dcomplex*, double, double);
 
 /* make sure we use the correct errno */
 #undef errno
@@ -242,6 +249,7 @@ static BOOL init(void)
     SET(p_fegetenv, "fegetenv");
     SET(p__clearfp, "_clearfp");
     SET(p_vsscanf, "vsscanf");
+    SET(p__Cbuild, "_Cbuild");
     if(sizeof(void*) == 8) { /* 64-bit initialization */
         SET(p_critical_section_ctor,
                 "??0critical_section at Concurrency@@QEAA at XZ");
@@ -936,6 +944,20 @@ static void test_vsscanf(void)
     ok(v == 10, "got %d.\n", v);
 }
 
+static void test__Cbuild(void)
+{
+    _Dcomplex c;
+
+    memset(&c, 0, sizeof(c));
+    p__Cbuild(&c, 1.0, 2.0);
+    ok(c.r == 1.0, "c.r = %lf\n", c.r);
+    ok(c.i == 2.0, "c.i = %lf\n", c.i);
+
+    p__Cbuild(&c, 3.0, NAN);
+    ok(c.r == 3.0, "c.r = %lf\n", c.r);
+    ok(_isnan(c.i), "c.i = %lf\n", c.i);
+}
+
 START_TEST(msvcr120)
 {
     if (!init()) return;
@@ -954,4 +976,5 @@ START_TEST(msvcr120)
     test__Condition_variable();
     test_wctype();
     test_vsscanf();
+    test__Cbuild();
 }
diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec
index fa5711f..d5658c9 100644
--- a/dlls/msvcr120_app/msvcr120_app.spec
+++ b/dlls/msvcr120_app/msvcr120_app.spec
@@ -818,7 +818,7 @@
 @ cdecl -arch=i386 _CIsqrt() msvcr120._CIsqrt
 @ cdecl -arch=i386 _CItan() msvcr120._CItan
 @ cdecl -arch=i386 _CItanh() msvcr120._CItanh
-@ stub _Cbuild
+@ cdecl _Cbuild(ptr double double) msvcr120._Cbuild
 @ cdecl _CreateFrameInfo(ptr ptr) msvcr120._CreateFrameInfo
 @ stdcall _CxxThrowException(ptr ptr) msvcr120._CxxThrowException
 @ cdecl -arch=i386 -norelay _EH_prolog() msvcr120._EH_prolog
diff --git a/dlls/msvcrt/math.c b/dlls/msvcrt/math.c
index a3af78a..b1669ce 100644
--- a/dlls/msvcrt/math.c
+++ b/dlls/msvcrt/math.c
@@ -3392,4 +3392,11 @@ double CDECL _except1(DWORD fpe, _FP_OPERATION_CODE op, double arg, double res,
     return res;
 }
 
+_Dcomplex* CDECL MSVCR120__Cbuild(_Dcomplex *ret, double r, double i)
+{
+    ret->x = r;
+    ret->y = i;
+    return ret;
+}
+
 #endif /* _MSVCR_VER>=120 */
diff --git a/dlls/msvcrt/msvcrt.h b/dlls/msvcrt/msvcrt.h
index a380613..d4a542f 100644
--- a/dlls/msvcrt/msvcrt.h
+++ b/dlls/msvcrt/msvcrt.h
@@ -455,6 +455,7 @@ struct MSVCRT__complex {
   double x;      /* Real part */
   double y;      /* Imaginary part */
 };
+typedef struct MSVCRT__complex _Dcomplex;
 
 typedef struct MSVCRT__div_t {
     int quot;  /* quotient */
diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec
index 504b27d..4e935dc 100644
--- a/dlls/ucrtbase/ucrtbase.spec
+++ b/dlls/ucrtbase/ucrtbase.spec
@@ -14,7 +14,7 @@
 @ cdecl -arch=i386 _CIsqrt()
 @ cdecl -arch=i386 _CItan()
 @ cdecl -arch=i386 _CItanh()
-@ stub _Cbuild
+@ cdecl _Cbuild(ptr double double) MSVCR120__Cbuild
 @ stub _Cmulcc
 @ stub _Cmulcr
 @ cdecl _CreateFrameInfo(ptr ptr)




More information about the wine-cvs mailing list