memmove.c 401 B

1234567891011121314151617181920212223242526272829303132333435
  1. #include <u.h>
  2. #include <libc.h>
  3. void*
  4. memmove(void *a1, void *a2, ulong n)
  5. {
  6. char *s1, *s2;
  7. if((long)n < 0)
  8. abort();
  9. s1 = a1;
  10. s2 = a2;
  11. if((s2 < s1) && (s2+n > s1))
  12. goto back;
  13. while(n > 0) {
  14. *s1++ = *s2++;
  15. n--;
  16. }
  17. return a1;
  18. back:
  19. s1 += n;
  20. s2 += n;
  21. while(n > 0) {
  22. *--s1 = *--s2;
  23. n--;
  24. }
  25. return a1;
  26. }
  27. void*
  28. memcpy(void *a1, void *a2, ulong n)
  29. {
  30. return memmove(a1, a2, n);
  31. }