|
|
1.1 ! root 1: /* Copyright AT&T Bell Laboratories, 1994 */ ! 2: #include <stddef.h> ! 3: #include <string.h> ! 4: ! 5: enum { S = sizeof(long) }; ! 6: ! 7: void * ! 8: memmove(void *to, const void *from, size_t n) ! 9: { ! 10: char *out = to; ! 11: const char *in = from; ! 12: if(out > in) { ! 13: in += n; ! 14: out += n; ! 15: if((in-out)%S == 0) { ! 16: for( ; (in-(char*)0)%S && n>0; n--) ! 17: *--out = *--in; ! 18: for( ; n>=S; n-=S) { ! 19: out -= S; ! 20: in -= S; ! 21: *(long*)out = *(long*)in; ! 22: } ! 23: } ! 24: for( ; n>0; n--) ! 25: *--out = *--in; ! 26: } else { ! 27: if((in-out)%S == 0) { ! 28: for( ; (in-(char*)0)%S && n>0; n--) ! 29: *out++ = *in++; ! 30: for( ; n>=S; n-=S) { ! 31: *(long*)out = *(long*)in; ! 32: out += S; ! 33: in += S; ! 34: } ! 35: } ! 36: for( ; n>0; n--) ! 37: *out++ = *in++; ! 38: } ! 39: return(to); ! 40: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.