Преглед на файлове

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