xref: /inferno-os/libkern/memmove.c (revision 715a866f4203b352703247b51de6e9e29894384b)
1*37da2899SCharles.Forsyth #include	<lib9.h>
2*37da2899SCharles.Forsyth 
3*37da2899SCharles.Forsyth /* for testing only */
4*37da2899SCharles.Forsyth void*
memcpy(void * a1,void * a2,ulong n)5*37da2899SCharles.Forsyth memcpy(void *a1, void *a2, ulong n)
6*37da2899SCharles.Forsyth {
7*37da2899SCharles.Forsyth 	return memmove(a1, a2, n);
8*37da2899SCharles.Forsyth }
9*37da2899SCharles.Forsyth 
10*37da2899SCharles.Forsyth void*
memmove(void * a1,void * a2,ulong n)11*37da2899SCharles.Forsyth memmove(void *a1, void *a2, ulong n)
12*37da2899SCharles.Forsyth {
13*37da2899SCharles.Forsyth 	int m = (int)n;
14*37da2899SCharles.Forsyth 	uchar *s, *d;
15*37da2899SCharles.Forsyth 
16*37da2899SCharles.Forsyth 	d = a1;
17*37da2899SCharles.Forsyth 	s = a2;
18*37da2899SCharles.Forsyth 	if(d > s){
19*37da2899SCharles.Forsyth 		s += m;
20*37da2899SCharles.Forsyth 		d += m;
21*37da2899SCharles.Forsyth 		while(--m >= 0)
22*37da2899SCharles.Forsyth 			*--d = *--s;
23*37da2899SCharles.Forsyth 	}
24*37da2899SCharles.Forsyth 	else{
25*37da2899SCharles.Forsyth 		while(--m >= 0)
26*37da2899SCharles.Forsyth 			*d++ = *s++;
27*37da2899SCharles.Forsyth 	}
28*37da2899SCharles.Forsyth 	return a1;
29*37da2899SCharles.Forsyth }
30