Module: wine Branch: master Commit: f02193738c88bea8fefb3f8d2e79c5e9941f6b5a URL: https://source.winehq.org/git/wine.git/?a=commit;h=f02193738c88bea8fefb3f8d2...
Author: Piotr Caban piotr@codeweavers.com Date: Wed Jul 22 11:10:26 2020 +0200
msvcrt: Copy memmove implementation from ntdll.
Signed-off-by: Piotr Caban piotr@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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); }
/*********************************************************************