string.c (1320B)
1 #include <stdint.h>
2 #include <stddef.h>
3
4 void *memcpy(void *destination, const void *source, size_t count) {
5 uint8_t *destination_bytes = (uint8_t *)destination;
6 const uint8_t *source_bytes = (const uint8_t *)source;
7
8 for (size_t i = 0; i < count; i++) {
9 destination_bytes[i] = source_bytes[i];
10 }
11
12 return destination;
13 }
14
15 void *memmove(void *destination, const void *source, size_t count) {
16 uint8_t *destination_bytes = (uint8_t *)destination;
17 const uint8_t *source_bytes = (const uint8_t *)source;
18
19 if (destination_bytes < source_bytes) {
20 for (size_t i = 0; i < count; i++) {
21 destination_bytes[i] = source_bytes[i];
22 }
23 } else {
24 for (size_t i = count; i > 0; i--) {
25 destination_bytes[i - 1] = source_bytes[i - 1];
26 }
27 }
28
29 return destination;
30 }
31
32 void *memset(void *destination, int value, size_t count) {
33 uint8_t *destination_bytes = (uint8_t *)destination;
34
35 for (size_t i = 0; i < count; i++) {
36 destination_bytes[i] = (uint8_t)value;
37 }
38
39 return destination;
40 }
41
42 int memcmp(const void *first, const void *second, size_t count) {
43 const uint8_t *first_bytes = (const uint8_t *)first;
44 const uint8_t *second_bytes = (const uint8_t *)second;
45
46 for (size_t i = 0; i < count; i++) {
47 if (first_bytes[i] != second_bytes[i]) {
48 return first_bytes[i] < second_bytes[i] ? -1 : 1;
49 }
50 }
51
52 return 0;
53 }