Signed-off-by: Alex Henrie alexhenrie24@gmail.com --- Fixes https://bugs.winehq.org/show_bug.cgi?id=37809
v3: Dropped incorrect fallbacks for j0 and j1
configure.ac | 8 +++++++- dlls/msvcrt/math.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac index 2e99320371..e198018427 100644 --- a/configure.ac +++ b/configure.ac @@ -2698,6 +2698,9 @@ AC_CHECK_FUNCS(\ exp2f \ expm1 \ expm1f \ + j0 \ + j1 \ + jn \ lgamma \ lgammaf \ llrint \ @@ -2722,7 +2725,10 @@ AC_CHECK_FUNCS(\ round \ roundf \ trunc \ - truncf + truncf \ + y0 \ + y1 \ + yn ) LIBS="$ac_save_LIBS"
diff --git a/dlls/msvcrt/math.c b/dlls/msvcrt/math.c index 9b480117fc..cc1979b96c 100644 --- a/dlls/msvcrt/math.c +++ b/dlls/msvcrt/math.c @@ -1412,7 +1412,12 @@ INT CDECL MSVCRT__isnan(double num) double CDECL MSVCRT__j0(double num) { /* FIXME: errno handling */ +#ifdef HAVE_J0 return j0(num); +#else + FIXME( "not implemented\n" ); + return 0; +#endif }
/********************************************************************* @@ -1421,7 +1426,12 @@ double CDECL MSVCRT__j0(double num) double CDECL MSVCRT__j1(double num) { /* FIXME: errno handling */ +#ifdef HAVE_J1 return j1(num); +#else + FIXME( "not implemented\n" ); + return 0; +#endif }
/********************************************************************* @@ -1430,7 +1440,12 @@ double CDECL MSVCRT__j1(double num) double CDECL MSVCRT__jn(int n, double num) { /* FIXME: errno handling */ +#ifdef HAVE_JN return jn(n, num); +#else + FIXME( "not implemented\n" ); + return 0; +#endif }
/********************************************************************* @@ -1440,12 +1455,17 @@ double CDECL MSVCRT__y0(double num) { double retval; if (!isfinite(num)) *MSVCRT__errno() = MSVCRT_EDOM; +#ifdef HAVE_Y0 retval = y0(num); if (MSVCRT__fpclass(retval) == MSVCRT__FPCLASS_NINF) { *MSVCRT__errno() = MSVCRT_EDOM; retval = sqrt(-1); } +#else + FIXME( "not implemented\n" ); + retval = 0; +#endif return retval; }
@@ -1456,12 +1476,17 @@ double CDECL MSVCRT__y1(double num) { double retval; if (!isfinite(num)) *MSVCRT__errno() = MSVCRT_EDOM; +#ifdef HAVE_Y1 retval = y1(num); if (MSVCRT__fpclass(retval) == MSVCRT__FPCLASS_NINF) { *MSVCRT__errno() = MSVCRT_EDOM; retval = sqrt(-1); } +#else + FIXME( "not implemented\n" ); + retval = 0; +#endif return retval; }
@@ -1472,12 +1497,17 @@ double CDECL MSVCRT__yn(int order, double num) { double retval; if (!isfinite(num)) *MSVCRT__errno() = MSVCRT_EDOM; +#ifdef HAVE_YN retval = yn(order,num); if (MSVCRT__fpclass(retval) == MSVCRT__FPCLASS_NINF) { *MSVCRT__errno() = MSVCRT_EDOM; retval = sqrt(-1); } +#else + FIXME( "not implemented\n" ); + retval = 0; +#endif return retval; }
Hi Alex,
On 03/02/18 17:21, Alex Henrie wrote:
@@ -1472,12 +1497,17 @@ double CDECL MSVCRT__yn(int order, double num) { double retval; if (!isfinite(num)) *MSVCRT__errno() = MSVCRT_EDOM; +#ifdef HAVE_YN retval = yn(order,num); if (MSVCRT__fpclass(retval) == MSVCRT__FPCLASS_NINF) { *MSVCRT__errno() = MSVCRT_EDOM; retval = sqrt(-1); } +#else
- FIXME( "not implemented\n" );
- retval = 0;
+#endif return retval; }
The patch looks mostly good for me. Could you please also remove the spaces after '(' and before ')' in FIXME to match surrounding code style? While you're at it, could you please also remove sqrt(-1) calls on error paths and just return NAN?
Thanks, Piotr