summaryrefslogtreecommitdiff
path: root/src/string/memcpy_s.c
blob: 2b5ebec789471826c3238b7d584f3f2de16d8d0e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <string.h>
#include "_safety.h"

/** copy memory **/
errno_t memcpy_s(void * restrict s1, rsize_t s1max, const void * restrict s2, rsize_t n)
{
	SIGNAL_SAFE(0);
	ASSERT_NONNULL(s1);
	ASSERT_NONNULL(s2);
	ASSERT_NOOVERLAP(s1, s1max, s2, n);

	char *dst = (char*)s1, *src = (char*)s2;
	rsize_t i = 0;
	while (i < n) {
		dst[i] = src[i];
		i++;
	}
	return 0;
}

CHECK_4(errno_t, 0, memcpy_s, void * restrict, rsize_t, const void * restrict, rsize_t)

/***
The fn(memcpy) copies arg(n) bytes from the object at arg(s2) to the object at
arg(s1).
***/

/* UNSPECIFIED: - */
/* UNDEFINED: if the objects overlap */
/* IMPLEMENTATION: - */
/* LOCALE: - */

/* RETURN: the value of arg(s1) */

/*
CEXT1(201112)
*/