From: Rich Felker Date: Fri, 7 Sep 2012 00:25:48 +0000 (-0400) Subject: remove dependency of memmove on memcpy direction X-Git-Url: http://nsz.repo.hu/git/?p=musl;a=commitdiff_plain;h=594318fd3d13c7dda1ea87a76934e052ac74301f;hp=fcfba99503746e44585d7e318562dd425e8ff390 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. --- 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; }