diff options
| author | Aleksa Vuckovic <aleksav013@gmail.com> | 2022-08-12 15:36:57 +0200 |
|---|---|---|
| committer | Aleksa Vuckovic <aleksav013@gmail.com> | 2022-08-12 15:48:26 +0200 |
| commit | 5c1c4eb0a4084b666342e6f8eb348eb80be6214b (patch) | |
| tree | 18fd33482c2cdd66eb6be18ac25ad8bde62012ad /kernel/src/libk | |
| parent | 97c5f8569a845b6e9b3f75460b3b90a2de9b72a8 (diff) | |
memcpy, memset; small fixes
Diffstat (limited to 'kernel/src/libk')
| -rw-r--r-- | kernel/src/libk/stdio.c | 32 | ||||
| -rw-r--r-- | kernel/src/libk/string.c | 41 |
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; +} |
