/ src / lib / misc.c
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  }