home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / gnu / libsrc87 / memcpy.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-07-30  |  652 b   |  39 lines

  1. /* from Henry Spencer's stringlib */
  2.  
  3. #include <stddef.h>
  4. #include <string.h>
  5.  
  6. asm(".stabs \"_memmove\",5,0,0,_memcpy"); /* dept of clean tricks */
  7.  
  8. /*
  9.  * memcpy - copy bytes (handles overlap, so we can equivalence memmove() to it.
  10.  */
  11.  
  12. void *
  13. memcpy(dst, src, size)
  14. void * dst;
  15. const void * src;
  16. size_t size;
  17. {
  18.     register char *d;
  19.     register const char *s;
  20.     register size_t n;
  21.  
  22.     if (size == 0)
  23.         return(dst);
  24.  
  25.     s = src;
  26.     d = dst;
  27.     if (s <= d && s + (size-1) >= d) {
  28.         /* Overlap, must copy right-to-left. */
  29.         s += size-1;
  30.         d += size-1;
  31.         for (n = size; n > 0; n--)
  32.             *d-- = *s--;
  33.     } else
  34.         for (n = size; n > 0; n--)
  35.             *d++ = *s++;
  36.  
  37.     return(dst);
  38. }
  39.