Branch data Line data Source code
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 <stddef.h> 14 : : 15 : : void *memcpy(void *dest, const void *src, size_t n); 16 : : void *memmove(void *dest, const void *src, size_t n); 17 : 15 : void *memmove(void *dest, const void *src, size_t n) 18 : : { 19 : : /* Do the buffers overlap in a bad way? */ 20 : 15 : if (src < dest && src + n >= dest) { 21 : : char *cdest; 22 : : const char *csrc; 23 : : int i; 24 : : 25 : : /* Copy from end to start */ 26 : 5 : cdest = dest + n - 1; 27 : 5 : csrc = src + n - 1; 28 : 55 : for (i = 0; i < n; i++) { 29 : 50 : *cdest-- = *csrc--; 30 : : } 31 : 5 : return dest; 32 : : } else { 33 : : /* Normal copy is possible */ 34 : 10 : return memcpy(dest, src, n); 35 : : } 36 : : }