minimalist kernel and OS. targets x86_64 and the pinephone (aarch64)
osdev kernel
at master 55 lines 1.2 kB view raw
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}