Pristine Ack-5.5
[Ack-5.5.git] / lang / cem / libcc.ansi / string / memmove.c
1 /*
2  * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
3  * See the copyright notice in the ACK home directory, in the file "Copyright".
4  */
5 /* $Id: memmove.c,v 1.4 1994/06/24 11:56:31 ceriel Exp $ */
6
7 #include        <string.h>
8
9 void *
10 memmove(void *s1, const void *s2, register size_t n)
11 {
12         register char *p1 = s1;
13         register const char *p2 = s2;
14
15         if (n>0) {
16                 if (p2 <= p1 && p2 + n > p1) {
17                         /* overlap, copy backwards */
18                         p1 += n;
19                         p2 += n;
20                         n++;
21                         while (--n > 0) {
22                                 *--p1 = *--p2;
23                         }
24                 } else {
25                         n++;
26                         while (--n > 0) {
27                                 *p1++ = *p2++;
28                         }
29                 }
30         }
31         return s1;
32 }