improved the speed somewhat
fixed bug with negative chars in comparisons
This commit is contained in:
@@ -12,18 +12,21 @@ memmove(void *s1, const void *s2, register size_t n)
|
||||
register char *p1 = s1;
|
||||
register const char *p2 = s2;
|
||||
|
||||
if (p2 <= p1 && p2 + (n-1) >= p1) {
|
||||
/* overlap, copy backwards */
|
||||
p1 += n;
|
||||
p2 += n;
|
||||
while (n > 0) {
|
||||
n--;
|
||||
*--p1 = *--p2;
|
||||
}
|
||||
} else
|
||||
while (n > 0) {
|
||||
n--;
|
||||
*p1++ = *p2++;
|
||||
if (n>0) {
|
||||
if (p2 <= p1 && p2 + n > p1) {
|
||||
/* overlap, copy backwards */
|
||||
p1 += n;
|
||||
p2 += n;
|
||||
n++;
|
||||
while (--n > 0) {
|
||||
*--p1 = *--p2;
|
||||
}
|
||||
} else {
|
||||
n++;
|
||||
while (--n > 0) {
|
||||
*p1++ = *p2++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return s1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user