From 7d1620fa345eeeecc19b45c747ae94559d9be98a Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sat, 19 Nov 2011 19:01:58 +0000 Subject: [PATCH] [CRT] Check for NaN and set error accordingly svn path=/trunk/; revision=54447 --- reactos/lib/sdk/crt/math/i386/ldexp.c | 31 ++++++++++++++++++--------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/reactos/lib/sdk/crt/math/i386/ldexp.c b/reactos/lib/sdk/crt/math/i386/ldexp.c index 327e72a27b8..adfa85fb0b7 100644 --- a/reactos/lib/sdk/crt/math/i386/ldexp.c +++ b/reactos/lib/sdk/crt/math/i386/ldexp.c @@ -19,11 +19,22 @@ Boston, MA 02110-1301, USA. */ +#include #include +#include double ldexp (double value, int exp) { register double result; + + /* Check for value correctness + * and set errno if required + */ + if (_isnan(value)) + { + errno = EDOM; + } + #ifdef __GNUC__ #if defined(__clang__) asm ("fild %[exp]\n" @@ -33,20 +44,20 @@ double ldexp (double value, int exp) : [value] "0" (value), [exp] "m" (exp)); #else asm ("fscale" - : "=t" (result) + : "=t" (result) : "0" (value), "u" ((double)exp) : "1"); #endif #else /* !__GNUC__ */ - register double __dy = (double)exp; - __asm - { - fld __dy - fld value - fscale - fstp result - } + register double __dy = (double)exp; + __asm + { + fld __dy + fld value + fscale + fstp result + } #endif /* !__GNUC__ */ - return result; + return result; }