|
|
1.1 ! root 1: /* Copyright AT&T Bell Laboratories, 1993 */ ! 2: #include <stddef.h> ! 3: ! 4: extern void *memcpy(void*, void*, size_t); ! 5: ! 6: void * ! 7: memmove(void *to, void *from, register size_t n) ! 8: { ! 9: register char *out = to; ! 10: register char *in = from; ! 11: ! 12: if(n <= 0) /* works if size_t is signed or not */ ! 13: ; ! 14: else if(in + n <= out || out + n <= in) ! 15: return(memcpy(to, from, n)); /* hope it's fast*/ ! 16: else if(out < in) ! 17: do ! 18: *out++ = *in++; ! 19: while(--n > 0); ! 20: else { ! 21: out += n; ! 22: in += n; ! 23: do ! 24: *--out = *--in; ! 25: while(--n > 0); ! 26: } ! 27: return(to); ! 28: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.