]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libc/port/memmove.c
16ef43277b4a12f34bc5d4b484509d1d70926074
[plan9front.git] / sys / src / libc / port / memmove.c
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 }