]> git.proxmox.com Git - wasi-libc.git/blob - basics/sources/string.c
Implement reallocarray.
[wasi-libc.git] / basics / sources / string.c
1 #include <string.h>
2 #include <stdint.h>
3
4 static void *copy_forward(void *restrict dst, const void *restrict src, size_t n) {
5 char *d = (char *)dst;
6 const char *s = (const char *)src;
7 while (n-- != 0) {
8 *d++ = *s++;
9 }
10 return dst;
11 }
12
13 static void *copy_backward(void *restrict dst, const void *restrict src, size_t n) {
14 char *d = (char *)dst;
15 const char *s = (const char *)src;
16 d += n;
17 s += n;
18 while (n-- != 0) {
19 *--d = *--s;
20 }
21 return dst;
22 }
23
24 void *memcpy(void *restrict dst, const void *restrict src, size_t n) {
25 return copy_forward(dst, src, n);
26 }
27
28 void *memmove(void *dst, const void *src, size_t n) {
29 if ((uintptr_t)dst - (uintptr_t)src >= n) {
30 return copy_forward(dst, src, n);
31 }
32 return copy_backward(dst, src, n);
33 }
34
35 void *memset(void *restrict dst, int c, size_t n) {
36 char *d = (char *)dst;
37 while (n-- != 0) {
38 *d++ = c;
39 }
40 return dst;
41 }