dead simple rtc code for getting current datetime.
[lunaix-os.git] / lunaix-os / libs / libc / string / mem.c
1 #include <stdint.h>
2 #include <libc/string.h>
3
4 void*
5 memcpy(void* dest, const void* src, size_t num)
6 {
7     uint8_t* dest_ptr = (uint8_t*)dest;
8     const uint8_t* src_ptr = (const uint8_t*)src;
9     for (size_t i = 0; i < num; i++) {
10         *(dest_ptr + i) = *(src_ptr + i);
11     }
12     return dest;
13 }
14
15 void*
16 memmove(void* dest, const void* src, size_t num)
17 {
18     uint8_t* dest_ptr = (uint8_t*)dest;
19     const uint8_t* src_ptr = (const uint8_t*)src;
20     if (dest_ptr < src_ptr) {
21         for (size_t i = 0; i < num; i++) {
22             *(dest_ptr + i) = *(src_ptr + i);
23         }
24     } else {
25         for (size_t i = num; i != 0; i--) {
26             *(dest_ptr + i - 1) = *(src_ptr + i - 1);
27         }
28     }
29     return dest;
30 }
31
32 void*
33 memset(void* ptr, int value, size_t num)
34 {
35     uint8_t* c_ptr = (uint8_t*)ptr;
36     for (size_t i = 0; i < num; i++) {
37         *(c_ptr + i) = (uint8_t)value;
38     }
39     return ptr;
40 }
41
42 int
43 memcmp(const void* ptr1, const void* ptr2, size_t num)
44 {
45     uint8_t* p1 = (uint8_t*)ptr1;
46     uint8_t* p2 = (uint8_t*)ptr2;
47     for (size_t i = 0; i < num; i++) {
48         int diff = *(p1 + i) - *(p2 + i);
49         if (diff != 0) {
50             return diff;
51         }
52     }
53     return 0;
54 }