Piotr Caban : msvcrt: Copy memmove implementation from ntdll.

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


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Wed Jul 22 11:10:26 2020 +0200

msvcrt: Copy memmove implementation from ntdll.

Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/msvcrt/string.c | 25 +++++++++++++++++++------
 1 file changed, 19 insertions(+), 6 deletions(-)

diff --git a/dlls/msvcrt/string.c b/dlls/msvcrt/string.c
index fe2cf6abe5..8612780722 100644
--- a/dlls/msvcrt/string.c
+++ b/dlls/msvcrt/string.c
@@ -2230,19 +2230,32 @@ int __cdecl MSVCRT_memcmp(const void *ptr1, const void *ptr2, MSVCRT_size_t n)
 }
 
 /*********************************************************************
- *                  memcpy   (MSVCRT.@)
+ *                  memmove (MSVCRT.@)
  */
-void * __cdecl MSVCRT_memcpy(void *dst, const void *src, MSVCRT_size_t n)
+void * __cdecl MSVCRT_memmove(void *dst, const void *src, MSVCRT_size_t n)
 {
-    return memmove(dst, src, n);
+    volatile unsigned char *d = dst;  /* avoid gcc optimizations */
+    const unsigned char *s = src;
+
+    if ((MSVCRT_size_t)dst - (MSVCRT_size_t)src >= n)
+    {
+        while (n--) *d++ = *s++;
+    }
+    else
+    {
+        d += n - 1;
+        s += n - 1;
+        while (n--) *d-- = *s--;
+    }
+    return dst;
 }
 
 /*********************************************************************
- *                  memmove (MSVCRT.@)
+ *                  memcpy   (MSVCRT.@)
  */
-void * __cdecl MSVCRT_memmove(void *dst, const void *src, MSVCRT_size_t n)
+void * __cdecl MSVCRT_memcpy(void *dst, const void *src, MSVCRT_size_t n)
 {
-    return memmove(dst, src, n);
+    return MSVCRT_memmove(dst, src, n);
 }
 
 /*********************************************************************




More information about the wine-cvs mailing list