From f2df0fa5471c9951ff9a12bea51efbe22afb196e Mon Sep 17 00:00:00 2001 From: Anish Athalye <me@anishathalye.com> Date: Tue, 8 Oct 2019 21:24:03 -0400 Subject: [PATCH] Fix ulib's memmove to handle overlap when src<dst --- user/ulib.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/user/ulib.c b/user/ulib.c index 8bfba5d..4775939 100644 --- a/user/ulib.c +++ b/user/ulib.c @@ -103,8 +103,15 @@ memmove(void *vdst, const void *vsrc, int n) dst = vdst; src = vsrc; - while(n-- > 0) - *dst++ = *src++; + if (src > dst) { + while(n-- > 0) + *dst++ = *src++; + } else { + dst += n; + src += n; + while(n-- > 0) + *--dst = *--src; + } return vdst; }