Piotr Caban : msvcrt: Don't use div and ldiv function.

Alexandre Julliard julliard at winehq.org
Wed Jul 22 16:34:28 CDT 2020


Module: wine
Branch: master
Commit: 75cdc3b6058cd42a4d96331b045b22fa0a7f88f9
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=75cdc3b6058cd42a4d96331b045b22fa0a7f88f9

Author: Piotr Caban <piotr at 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 at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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__ */
 




More information about the wine-cvs mailing list