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