Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/ldns/compat/memmove.c
39478 views
1
/*
2
* memmove.c: memmove compat implementation.
3
*
4
* Copyright (c) 2001-2008, NLnet Labs. All rights reserved.
5
*
6
* See LICENSE for the license.
7
*/
8
9
#include <ldns/config.h>
10
#include <stdlib.h>
11
12
void *memmove(void *dest, const void *src, size_t n);
13
14
void *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
}
44
45