minimalist kernel and OS. targets x86_64 and the pinephone (aarch64)
osdev
kernel
1#include <stdint.h>
2#include <stddef.h>
3#include <stdbool.h>
4
5
6void *memcpy(void *restrict dest, const void *restrict src, size_t n) {
7 uint8_t *restrict pdest = (uint8_t *restrict)dest;
8 const uint8_t *restrict psrc = (const uint8_t *restrict)src;
9
10 for (size_t i = 0; i < n; i++) {
11 pdest[i] = psrc[i];
12 }
13
14 return dest;
15}
16
17void *memset(void *s, int c, size_t n) {
18 uint8_t *p = (uint8_t *)s;
19
20 for (size_t i = 0; i < n; i++) {
21 p[i] = (uint8_t)c;
22 }
23
24 return s;
25}
26
27void *memmove(void *dest, const void *src, size_t n) {
28 uint8_t *pdest = (uint8_t *)dest;
29 const uint8_t *psrc = (const uint8_t *)src;
30
31 if (src > dest) {
32 for (size_t i = 0; i < n; i++) {
33 pdest[i] = psrc[i];
34 }
35 } else if (src < dest) {
36 for (size_t i = n; i > 0; i--) {
37 pdest[i-1] = psrc[i-1];
38 }
39 }
40
41 return dest;
42}
43
44int memcmp(const void *s1, const void *s2, size_t n) {
45 const uint8_t *p1 = (const uint8_t *)s1;
46 const uint8_t *p2 = (const uint8_t *)s2;
47
48 for (size_t i = 0; i < n; i++) {
49 if (p1[i] != p2[i]) {
50 return p1[i] < p2[i] ? -1 : 1;
51 }
52 }
53
54 return 0;
55}