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