summaryrefslogtreecommitdiff
path: root/kernel/src/libk
diff options
context:
space:
mode:
authorAleksa Vuckovic <aleksav013@gmail.com>2022-08-12 15:36:57 +0200
committerAleksa Vuckovic <aleksav013@gmail.com>2022-08-12 15:48:26 +0200
commit5c1c4eb0a4084b666342e6f8eb348eb80be6214b (patch)
tree18fd33482c2cdd66eb6be18ac25ad8bde62012ad /kernel/src/libk
parent97c5f8569a845b6e9b3f75460b3b90a2de9b72a8 (diff)
memcpy, memset; small fixes
Diffstat (limited to 'kernel/src/libk')
-rw-r--r--kernel/src/libk/stdio.c32
-rw-r--r--kernel/src/libk/string.c41
2 files changed, 57 insertions, 16 deletions
diff --git a/kernel/src/libk/stdio.c b/kernel/src/libk/stdio.c
index be75b73..da5d839 100644
--- a/kernel/src/libk/stdio.c
+++ b/kernel/src/libk/stdio.c
@@ -5,32 +5,32 @@
#include <libk/string.h>
#include <graphics.h>
-int32_t x;
-int32_t y;
+uint32_t curr_x;
+uint32_t curr_y;
inline void print_char(char c)
{
+ if (curr_x * 8 >= main_fb.width) {
+ curr_x = 0;
+ curr_y++;
+ }
+ if (curr_y * 16 >= main_fb.height) {
+ curr_x = 0;
+ curr_y = 0;
+ }
if (c == '\n') {
- x = 0;
- y++;
+ curr_x = 0;
+ curr_y++;
return;
}
if (c == '\b') {
- if (x != 0) {
- x--;
+ if (curr_x != 0) {
+ curr_x--;
}
return;
}
- if (x * 8 >= (int32_t)main_fb.width) {
- x = 0;
- y++;
- }
- if (y * 16 >= (int32_t)main_fb.height) {
- x = 0;
- y = 0;
- }
- fb_draw_character(main_fb, c, x * 8, y * 16, WHITE, BLACK);
- x++;
+ fb_draw_character(main_fb, c, (int32_t)curr_x * 8, (int32_t)curr_y * 16, WHITE, BLACK);
+ curr_x++;
}
inline void print_string(const char* s)
diff --git a/kernel/src/libk/string.c b/kernel/src/libk/string.c
index 6d7ab69..be37ba9 100644
--- a/kernel/src/libk/string.c
+++ b/kernel/src/libk/string.c
@@ -67,3 +67,44 @@ void itoh(uint64_t num, char* s)
s[i] = '\0';
strrev(s);
}
+
+void memcpy(const void* destptr, const void* srcptr, size_t n)
+{
+ uint8_t* dest = (uint8_t*)destptr;
+ const uint8_t* src = (const uint8_t*)srcptr;
+
+ for(size_t i = 0; i < n; i++) {
+ dest[i] = src[i];
+ }
+}
+
+void memset(const void* destptr, uint8_t value, size_t n)
+{
+ uint8_t* dest = (uint8_t*)destptr;
+
+ for (size_t i = 0; i < n; i++) {
+ dest[i] = value;
+ }
+}
+
+int32_t memcmp(const void* aptr, const void* bptr)
+{
+ const uint8_t* a = (const uint8_t*)aptr;
+ const uint8_t* b = (const uint8_t*)bptr;
+
+ const size_t len_a = strlen((char*)a);
+ const size_t len_b = strlen((char*)b);
+
+ for (size_t i = 0; i < len_a && i < len_b; i++) {
+ if (a[i] != b[i])
+ return a[i] - b[i];
+ }
+
+ if (len_a < len_b) {
+ return -1;
+ }
+ if (len_a > len_b) {
+ return 1;
+ }
+ return 0;
+}