|
|
1.1 ! root 1: /****************************************************************************** ! 2: * Copyright (c) 2004, 2008 IBM Corporation ! 3: * All rights reserved. ! 4: * This program and the accompanying materials ! 5: * are made available under the terms of the BSD License ! 6: * which accompanies this distribution, and is available at ! 7: * http://www.opensource.org/licenses/bsd-license.php ! 8: * ! 9: * Contributors: ! 10: * IBM Corporation - initial implementation ! 11: *****************************************************************************/ ! 12: ! 13: #include "string.h" ! 14: ! 15: ! 16: void * ! 17: memmove(void *dest, const void *src, size_t n) ! 18: { ! 19: char *cdest; ! 20: const char *csrc; ! 21: int i; ! 22: ! 23: /* Do the buffers overlap in a bad way? */ ! 24: if (src < dest && src + n >= dest) { ! 25: /* Copy from end to start */ ! 26: cdest = dest + n - 1; ! 27: csrc = src + n - 1; ! 28: for (i = 0; i < n; i++) { ! 29: *cdest-- = *csrc--; ! 30: } ! 31: } ! 32: else { ! 33: /* Normal copy is possible */ ! 34: cdest = dest; ! 35: csrc = src; ! 36: for (i = 0; i < n; i++) { ! 37: *cdest++ = *csrc++; ! 38: } ! 39: } ! 40: ! 41: return dest; ! 42: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.