summaryrefslogtreecommitdiff
path: root/src/string.c
diff options
context:
space:
mode:
author3gg <3gg@shellblade.net>2025-10-15 19:32:21 -0700
committer3gg <3gg@shellblade.net>2025-10-15 19:32:21 -0700
commit55bcdf37342d782c723166de54ff031d09b1281f (patch)
tree11a95bfb390ba6f73e122a17fe0a00312f25dc78 /src/string.c
parentc099bcb7402421985e6e8c025e8cde591eaa073a (diff)
Clear framebuffer to pink
Diffstat (limited to 'src/string.c')
-rw-r--r--src/string.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/string.c b/src/string.c
new file mode 100644
index 0000000..4801154
--- /dev/null
+++ b/src/string.c
@@ -0,0 +1,59 @@
1#include <string.h>
2
3#include <stdint.h>
4
5void* memcpy(void* dst, const void* src, size_t count) {
6 // TODO: Can probably use better implementations based on hw instruction set.
7 uint32_t* dst32 = (uint32_t*)dst;
8 const uint32_t* src32 = (uint32_t*)src;
9 for(; count >= 4; count -= 4) {
10 *dst32++ = *src32++;
11 }
12 uint8_t* dst8 = (uint8_t*)dst32;
13 const uint8_t* src8 = (uint8_t*)src32;
14 for(; count != 0; count--) {
15 *dst8++ = *src8++;
16 }
17 return dst8;
18}
19
20static int count_digits_u(unsigned int x) {
21 int count = 0;
22 for(; x != 0; x /= 10, count++);
23 return count;
24}
25
26char* utoa(unsigned int x, char* buffer, size_t size) {
27 if (size > 0) {
28 const int num_digits = count_digits_u(x);
29 size_t i = 0;
30 while ((x != 0) && ((i+1) < size)) {
31 const unsigned int digit = x % 10;
32 x /= 10;
33 buffer[num_digits-1 - i++] = '0' + digit;
34 }
35 buffer[i] = 0;
36 }
37 return buffer;
38}
39
40char* ptoa(const void* ptr, char* buffer, size_t size) {
41 if (size > 2) {
42 size_t i = 0;
43 buffer[i++] = '0';
44 buffer[i++] = 'x';
45 uintptr_t x = (uintptr_t)ptr;
46 const int num_digits = count_digits_u(x);
47 while ((x != 0) && (i < size)) {
48 const unsigned int digit = x % 16;
49 x /= 16;
50 const char hex = (digit < 10) ? ('0' + digit) : ('a' + (digit-10));
51 buffer[num_digits-1+2 - i++] = hex;
52 }
53 buffer[i] = 0;
54 } else if (size > 0) {
55 buffer[0] = 0;
56 }
57 return buffer;
58}
59