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