1 #include <u.h> 2 #include <libc.h> 3 4 void* 5 memmove(void *a1, void *a2, ulong n) 6 { 7 char *s1, *s2; 8 9 if((long)n < 0) 10 abort(); 11 s1 = a1; 12 s2 = a2; 13 if((s2 < s1) && (s2+n > s1)) 14 goto back; 15 while(n > 0) { 16 *s1++ = *s2++; 17 n--; 18 } 19 return a1; 20 21 back: 22 s1 += n; 23 s2 += n; 24 while(n > 0) { 25 *--s1 = *--s2; 26 n--; 27 } 28 return a1; 29 } 30 31 void* 32 memcpy(void *a1, void *a2, ulong n) 33 { 34 return memmove(a1, a2, n); 35 } 36