1*946379e7Schristos /* memmove.c -- copy memory. 2*946379e7Schristos Copy LENGTH bytes from SOURCE to DEST. Does not null-terminate. 3*946379e7Schristos In the public domain. 4*946379e7Schristos By David MacKenzie <djm@gnu.ai.mit.edu>. */ 5*946379e7Schristos 6*946379e7Schristos #include <config.h> 7*946379e7Schristos 8*946379e7Schristos #include <stddef.h> 9*946379e7Schristos 10*946379e7Schristos void * memmove(void * dest0,void const * source0,size_t length)11*946379e7Schristosmemmove (void *dest0, void const *source0, size_t length) 12*946379e7Schristos { 13*946379e7Schristos char *dest = dest0; 14*946379e7Schristos char const *source = source0; 15*946379e7Schristos if (source < dest) 16*946379e7Schristos /* Moving from low mem to hi mem; start at end. */ 17*946379e7Schristos for (source += length, dest += length; length; --length) 18*946379e7Schristos *--dest = *--source; 19*946379e7Schristos else if (source != dest) 20*946379e7Schristos { 21*946379e7Schristos /* Moving from hi mem to low mem; start at beginning. */ 22*946379e7Schristos for (; length; --length) 23*946379e7Schristos *dest++ = *source++; 24*946379e7Schristos } 25*946379e7Schristos return dest0; 26*946379e7Schristos } 27