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 if(a1 > a2) 12 goto back; 13 s1 = a1; 14 s2 = a2; 15 while(n > 0) { 16 *s1++ = *s2++; 17 n--; 18 } 19 return a1; 20 21 back: 22 s1 = (char*)a1 + n; 23 s2 = (char*)a2 + 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