From: Zheng Chen Subject: msvcrt: Fix _copysign bugs for NAN/INF(try 2) Message-Id: Date: Wed, 25 Mar 2015 19:51:18 +0800 The last patch was damaged by my email client. Thanks Piotr for pointting out.
The last patch was damaged by my email client.

Thanks Piotr for pointting out.
From e9fa5fb121be3488e4e7120a494f9b37ee1a9320 Mon Sep 17 00:00:00 2001 From: Kevin Chan Date: Tue, 24 Mar 2015 09:51:12 +0000 Subject: msvcrt: Fix _copysign bugs for NAN/INF --- dlls/msvcrt/math.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/dlls/msvcrt/math.c b/dlls/msvcrt/math.c index 73f01aa..d4b1794 100644 --- a/dlls/msvcrt/math.c +++ b/dlls/msvcrt/math.c @@ -46,8 +46,9 @@ WINE_DEFAULT_DEBUG_CHANNEL(msvcrt); #endif #endif +/* FIXME: Doesnot work with -NAN and -0. */ #ifndef signbit -#define signbit(x) 0 +#define signbit(x) ((x) < 0) #endif typedef int (CDECL *MSVCRT_matherr_func)(struct MSVCRT__exception *); @@ -88,10 +89,9 @@ float CDECL MSVCRT__chgsignf( float num ) */ float CDECL MSVCRT__copysignf( float num, float sign ) { - /* FIXME: Behaviour for Nan/Inf? */ - if (sign < 0.0) - return num < 0.0 ? num : -num; - return num < 0.0 ? -num : num; + if (signbit(sign)) + return signbit(num) ? num : -num; + return signbit(num) ? -num : num; } /********************************************************************* @@ -1227,10 +1227,9 @@ int CDECL _controlfp_s(unsigned int *cur, unsigned int newval, unsigned int mask */ double CDECL MSVCRT__copysign(double num, double sign) { - /* FIXME: Behaviour for Nan/Inf? */ - if (sign < 0.0) - return num < 0.0 ? num : -num; - return num < 0.0 ? -num : num; + if (signbit(sign)) + return signbit(num) ? num : -num; + return signbit(num) ? -num : num; } /********************************************************************* -- 2.3.3