Piotr Caban : msvcrt: Don't use div and ldiv function.
Module: wine Branch: master Commit: 75cdc3b6058cd42a4d96331b045b22fa0a7f88f9 URL: https://source.winehq.org/git/wine.git/?a=commit;h=75cdc3b6058cd42a4d96331b0... Author: Piotr Caban <piotr(a)codeweavers.com> Date: Wed Jul 22 12:30:16 2020 +0200 msvcrt: Don't use div and ldiv function. Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/msvcrt/math.c | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/dlls/msvcrt/math.c b/dlls/msvcrt/math.c index ae4a267e03..772065d44f 100644 --- a/dlls/msvcrt/math.c +++ b/dlls/msvcrt/math.c @@ -2059,8 +2059,14 @@ int CDECL MSVCRT__gcvt_s(char *buff, MSVCRT_size_t size, double number, int digi #ifdef __i386__ unsigned __int64 CDECL MSVCRT_div(int num, int denom) { - div_t dt = div(num,denom); - return ((unsigned __int64)dt.rem << 32) | (unsigned int)dt.quot; + union { + MSVCRT_div_t div; + unsigned __int64 uint64; + } ret; + + ret.div.quot = num / denom; + ret.div.rem = num % denom; + return ret.uint64; } #else /********************************************************************* @@ -2070,13 +2076,11 @@ unsigned __int64 CDECL MSVCRT_div(int num, int denom) */ MSVCRT_div_t CDECL MSVCRT_div(int num, int denom) { - div_t dt = div(num,denom); - MSVCRT_div_t ret; - ret.quot = dt.quot; - ret.rem = dt.rem; - - return ret; + MSVCRT_div_t ret; + ret.quot = num / denom; + ret.rem = num % denom; + return ret; } #endif /* ifdef __i386__ */ @@ -2089,8 +2093,14 @@ MSVCRT_div_t CDECL MSVCRT_div(int num, int denom) #ifdef __i386__ unsigned __int64 CDECL MSVCRT_ldiv(MSVCRT_long num, MSVCRT_long denom) { - ldiv_t ldt = ldiv(num,denom); - return ((unsigned __int64)ldt.rem << 32) | (MSVCRT_ulong)ldt.quot; + union { + MSVCRT_ldiv_t ldiv; + unsigned __int64 uint64; + } ret; + + ret.ldiv.quot = num / denom; + ret.ldiv.rem = num % denom; + return ret.uint64; } #else /********************************************************************* @@ -2100,13 +2110,11 @@ unsigned __int64 CDECL MSVCRT_ldiv(MSVCRT_long num, MSVCRT_long denom) */ MSVCRT_ldiv_t CDECL MSVCRT_ldiv(MSVCRT_long num, MSVCRT_long denom) { - ldiv_t result = ldiv(num,denom); - - MSVCRT_ldiv_t ret; - ret.quot = result.quot; - ret.rem = result.rem; + MSVCRT_ldiv_t ret; - return ret; + ret.quot = num / denom; + ret.rem = num % denom; + return ret; } #endif /* ifdef __i386__ */
participants (1)
-
Alexandre Julliard