Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / SLOF / lib / libc / string / memmove.c
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 }