فهرست منبع

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.
Rich Felker 12 سال پیش
والد
کامیت
594318fd3d
1فایلهای تغییر یافته به همراه4 افزوده شده و 5 حذف شده
  1. 4 5
      src/string/memmove.c

+ 4 - 5
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;
 }