1*7dd7cddfSDavid du Colombier #include <string.h>
23e12c5d1SDavid du Colombier
33e12c5d1SDavid du Colombier void*
memmove(void * a1,const void * a2,size_t n)43e12c5d1SDavid du Colombier memmove(void *a1, const void *a2, size_t n)
53e12c5d1SDavid du Colombier {
63e12c5d1SDavid du Colombier char *s1, *s2;
7*7dd7cddfSDavid du Colombier extern void abort(void);
83e12c5d1SDavid du Colombier
93e12c5d1SDavid du Colombier if((long)n < 0)
103e12c5d1SDavid du Colombier abort();
113e12c5d1SDavid du Colombier if(a1 > a2)
123e12c5d1SDavid du Colombier goto back;
133e12c5d1SDavid du Colombier s1 = a1;
143e12c5d1SDavid du Colombier s2 = a2;
153e12c5d1SDavid du Colombier while(n > 0) {
163e12c5d1SDavid du Colombier *s1++ = *s2++;
173e12c5d1SDavid du Colombier n--;
183e12c5d1SDavid du Colombier }
193e12c5d1SDavid du Colombier return a1;
203e12c5d1SDavid du Colombier
213e12c5d1SDavid du Colombier back:
223e12c5d1SDavid du Colombier s1 = (char*)a1 + n;
233e12c5d1SDavid du Colombier s2 = (char*)a2 + n;
243e12c5d1SDavid du Colombier while(n > 0) {
253e12c5d1SDavid du Colombier *--s1 = *--s2;
263e12c5d1SDavid du Colombier n--;
273e12c5d1SDavid du Colombier }
283e12c5d1SDavid du Colombier return a1;
293e12c5d1SDavid du Colombier }
303e12c5d1SDavid du Colombier
313e12c5d1SDavid du Colombier void*
memcpy(void * a1,const void * a2,size_t n)323e12c5d1SDavid du Colombier memcpy(void *a1, const void *a2, size_t n)
333e12c5d1SDavid du Colombier {
343e12c5d1SDavid du Colombier return memmove(a1, a2, n);
353e12c5d1SDavid du Colombier }
36