From 594318fd3d13c7dda1ea87a76934e052ac74301f Mon Sep 17 00:00:00 2001
From: Rich Felker <dalias@aerifal.cx>
Date: Thu, 6 Sep 2012 20:25:48 -0400
Subject: remove dependency of memmove on memcpy direction

this commit introduces a performance regression in many uses of
memmove, which will need to be addressed before the next release. i'm
making it as a temporary measure so that the restrict patch can be
committed without invoking undefined behavior when memmove calls
memcpy with overlapping regions.
---
 src/string/memmove.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

(limited to 'src')

diff --git a/src/string/memmove.c b/src/string/memmove.c
index 22bb4b35..9153a644 100644
--- a/src/string/memmove.c
+++ b/src/string/memmove.c
@@ -5,10 +5,9 @@ void *memmove(void *dest, const void *src, size_t n)
 	char *d = dest;
 	const char *s = src;
 	if (d==s) return d;
-	if ((size_t)(d-s) < n) {
+	if ((size_t)(d-s) < n)
 		while (n--) d[n] = s[n];
-		return dest;
-	}
-	/* Assumes memcpy is overlap-safe when dest < src */
-	return memcpy(d, s, n);
+	else
+		while (n--) *d++ = *s++;
+	return dest;
 }
-- 
cgit v1.2.3-70-g09d2