From: Piotr Caban piotr@codeweavers.com
--- dlls/msvcrt/math.c | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-)
diff --git a/dlls/msvcrt/math.c b/dlls/msvcrt/math.c index bcdf459396b..c2b5e280451 100644 --- a/dlls/msvcrt/math.c +++ b/dlls/msvcrt/math.c @@ -1413,16 +1413,26 @@ int CDECL fegetenv(fenv_t *env) return 0; }
+/********************************************************************* + * feraiseexcept (MSVCR120.@) + */ +int CDECL feraiseexcept(int flags) +{ + fenv_t env; + + flags &= FE_ALL_EXCEPT; + fegetenv(&env); + env._Fe_stat |= fenv_encode(flags, flags); + return fesetenv(&env); +} + /********************************************************************* * feupdateenv (MSVCR120.@) */ int CDECL feupdateenv(const fenv_t *env) { - fenv_t set; - fegetenv(&set); - set._Fe_ctl = env->_Fe_ctl; - set._Fe_stat |= env->_Fe_stat; - return fesetenv(&set); + int except = fetestexcept(FE_ALL_EXCEPT); + return fesetenv(env) || feraiseexcept(except); }
/********************************************************************* @@ -1450,19 +1460,6 @@ int CDECL fesetexceptflag(const fexcept_t *status, int excepts) return fesetenv(&env); }
-/********************************************************************* - * feraiseexcept (MSVCR120.@) - */ -int CDECL feraiseexcept(int flags) -{ - fenv_t env; - - flags &= FE_ALL_EXCEPT; - fegetenv(&env); - env._Fe_stat |= fenv_encode(flags, flags); - return fesetenv(&env); -} - /********************************************************************* * feclearexcept (MSVCR120.@) */