mlibc: Use memmove in realloc.
[mes.git] / lib / libc.c
index bfef3eec43a67201206e856ac3150dece6811c18..70b6d14546efdcbe2dcb1b74f54a415f261dceb4 100644 (file)
@@ -294,13 +294,25 @@ memcpy (void *dest, void const *src, size_t n)
   return dest;
 }
 
+void *
+memmove (void *dest, void const *src, size_t n)
+{
+  if (dest < src)
+    return memcpy (dest, src, n);
+  char *p = dest + n;
+  char const *q = src +n;
+  while (n--)
+    *--p = *--q;
+  return dest;
+}
+
 void *
 realloc (void *ptr, size_t size)
 {
   void *new = malloc (size);
   if (ptr && new)
     {
-      memcpy (new, ptr, size);
+      memmove (new, ptr, size);
       free (ptr);
     }
   return new;