xref: /dflybsd-src/contrib/gcc-4.7/libgcc/memmove.c (revision 04febcfb30580676d3e95f58a16c5137ee478b32)
1*e4b17023SJohn Marino /* Public domain.  */
2*e4b17023SJohn Marino #include <stddef.h>
3*e4b17023SJohn Marino 
4*e4b17023SJohn Marino void *
memmove(void * dest,const void * src,size_t len)5*e4b17023SJohn Marino memmove (void *dest, const void *src, size_t len)
6*e4b17023SJohn Marino {
7*e4b17023SJohn Marino   char *d = dest;
8*e4b17023SJohn Marino   const char *s = src;
9*e4b17023SJohn Marino   if (d < s)
10*e4b17023SJohn Marino     while (len--)
11*e4b17023SJohn Marino       *d++ = *s++;
12*e4b17023SJohn Marino   else
13*e4b17023SJohn Marino     {
14*e4b17023SJohn Marino       char *lasts = s + (len-1);
15*e4b17023SJohn Marino       char *lastd = d + (len-1);
16*e4b17023SJohn Marino       while (len--)
17*e4b17023SJohn Marino         *lastd-- = *lasts--;
18*e4b17023SJohn Marino     }
19*e4b17023SJohn Marino   return dest;
20*e4b17023SJohn Marino }
21