]> git.saurik.com Git - apple/network_cmds.git/blame - unbound/compat/memmove.c
network_cmds-543.200.16.tar.gz
[apple/network_cmds.git] / unbound / compat / memmove.c
CommitLineData
89c4ed63
A
1/*
2 * memmove.c: memmove compat implementation.
3 *
4 * Copyright (c) 2001-2006, NLnet Labs. All rights reserved.
5 *
6 * See LICENSE for the license.
7*/
8
9#include <config.h>
10#include <stdlib.h>
11
12void *memmove(void *dest, const void *src, size_t n);
13
14void *memmove(void *dest, const void *src, size_t n)
15{
16 uint8_t* from = (uint8_t*) src;
17 uint8_t* to = (uint8_t*) dest;
18
19 if (from == to || n == 0)
20 return dest;
21 if (to > from && to-from < (int)n) {
22 /* to overlaps with from */
23 /* <from......> */
24 /* <to........> */
25 /* copy in reverse, to avoid overwriting from */
26 int i;
27 for(i=n-1; i>=0; i--)
28 to[i] = from[i];
29 return dest;
30 }
31 if (from > to && from-to < (int)n) {
32 /* to overlaps with from */
33 /* <from......> */
34 /* <to........> */
35 /* copy forwards, to avoid overwriting from */
36 size_t i;
37 for(i=0; i<n; i++)
38 to[i] = from[i];
39 return dest;
40 }
41 memcpy(dest, src, n);
42 return dest;
43}