Hi,
do you have some test case showing the behaviour?
best regards
Waldemar
Petar Jovanovic wrote,
Can somebody take a look at this and apply it?
Thank you.
Regards,
Petar
On Mon, May 6, 2019 at 3:29 PM Petar Jovanovic
<petar.jovanovic(a)rt-rk.com> wrote:
When arch (such as MIPS) does not define __ARCH_HAS_BWD_MEMCPY__, memmove()
calls memcpy() which is wrong for overlapping regions.
Signed-off-by: Petar Jovanovic <petar.jovanovic(a)rt-rk.com>
---
libc/string/generic/memmove.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/libc/string/generic/memmove.c b/libc/string/generic/memmove.c
index bf78c4778..1ac018013 100644
--- a/libc/string/generic/memmove.c
+++ b/libc/string/generic/memmove.c
@@ -23,7 +23,7 @@
#include "memcopy.h"
#include "pagecopy.h"
-#ifdef __ARCH_HAS_BWD_MEMCPY__
+#ifndef __ARCH_HAS_BWD_MEMCPY__
/* generic-opt memmove assumes memcpy does forward copying! */
#include "_memcpy_fwd.c"
#endif
@@ -224,8 +224,8 @@ void *memmove (void *dest, const void *src, size_t len)
Reduces the working set. */
if (dstp - srcp >= len) /* *Unsigned* compare! */
{
-#ifndef __ARCH_HAS_BWD_MEMCPY__
- /* Backward memcpy implementation cannot be used */
+#ifdef __ARCH_HAS_BWD_MEMCPY__
+ /* Backward memcpy implementation can be used */
memcpy(dest, src, len);
#else
/* Copy from the beginning to the end. */
--
2.17.1