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 * memmove(void * dest,const void * src,size_t n)17memmove(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 } 43