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;
 }