blob: 6fb0dad934d198586ab19c7b7a12964b76bc1ecb [file] [log] [blame]
Guido van Rossumbe0e9421993-12-24 10:32:00 +00001
2/* A perhaps slow but I hope correct implementation of memmove */
3
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00004extern char *memcpy(char *, char *, int);
Guido van Rossumbe0e9421993-12-24 10:32:00 +00005
6char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00007memmove(char *dst, char *src, int n)
Guido van Rossumbe0e9421993-12-24 10:32:00 +00008{
9 char *realdst = dst;
10 if (n <= 0)
11 return dst;
12 if (src >= dst+n || dst >= src+n)
13 return memcpy(dst, src, n);
14 if (src > dst) {
15 while (--n >= 0)
16 *dst++ = *src++;
17 }
18 else if (src < dst) {
19 src += n;
20 dst += n;
21 while (--n >= 0)
22 *--dst = *--src;
23 }
24 return realdst;
25}