~pmdj/ubuntu/trusty/qemu/2.9+applesmc+fadtv3

« back to all changes in this revision

Viewing changes to roms/SLOF/lib/libc/string/memmove.c

  • Committer: Phil Dennis-Jordan
  • Date: 2017-07-21 08:03:43 UTC
  • mfrom: (1.1.1)
  • Revision ID: phil@philjordan.eu-20170721080343-2yr2vdj7713czahv
New upstream release 2.9.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
}