Alexandre Julliard : kernelbase: Copy MulDiv() implementation instead of forwarding.
Alexandre Julliard
julliard at winehq.org
Fri Nov 13 15:57:52 CST 2020
Module: wine
Branch: master
Commit: f46e239468d48cf984cb8dc6697be840345199db
URL: https://source.winehq.org/git/wine.git/?a=commit;h=f46e239468d48cf984cb8dc6697be840345199db
Author: Alexandre Julliard <julliard at winehq.org>
Date: Fri Nov 13 13:18:53 2020 +0100
kernelbase: Copy MulDiv() implementation instead of forwarding.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/kernelbase/kernelbase.spec | 2 +-
dlls/kernelbase/main.c | 26 ++++++++++++++++++++++++++
2 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec
index da35b5e5c6e..36d0492857f 100644
--- a/dlls/kernelbase/kernelbase.spec
+++ b/dlls/kernelbase/kernelbase.spec
@@ -959,7 +959,7 @@
@ stdcall MoveFileExW(wstr wstr long)
# @ stub MoveFileWithProgressTransactedW
@ stdcall MoveFileWithProgressW(wstr wstr ptr ptr long)
-@ stdcall MulDiv(long long long) kernel32.MulDiv
+@ stdcall MulDiv(long long long)
@ stdcall MultiByteToWideChar(long long str long ptr long)
# @ stub NamedPipeEventEnum
# @ stub NamedPipeEventSelect
diff --git a/dlls/kernelbase/main.c b/dlls/kernelbase/main.c
index e85586a0751..b90ee1cba2c 100644
--- a/dlls/kernelbase/main.c
+++ b/dlls/kernelbase/main.c
@@ -62,6 +62,32 @@ BOOL WINAPI DllMainCRTStartup( HANDLE inst, DWORD reason, LPVOID reserved )
}
+/***********************************************************************
+ * MulDiv (kernelbase.@)
+ */
+INT WINAPI MulDiv( INT a, INT b, INT c )
+{
+ LONGLONG ret;
+
+ if (!c) return -1;
+
+ /* We want to deal with a positive divisor to simplify the logic. */
+ if (c < 0)
+ {
+ a = -a;
+ c = -c;
+ }
+
+ /* If the result is positive, we "add" to round. else, we subtract to round. */
+ if ((a < 0 && b < 0) || (a >= 0 && b >= 0))
+ ret = (((LONGLONG)a * b) + (c / 2)) / c;
+ else
+ ret = (((LONGLONG)a * b) - (c / 2)) / c;
+
+ if (ret > 2147483647 || ret < -2147483647) return -1;
+ return ret;
+}
+
/***********************************************************************
* AppPolicyGetProcessTerminationMethod (KERNELBASE.@)
*/
More information about the wine-cvs
mailing list