From 5c1c4eb0a4084b666342e6f8eb348eb80be6214b Mon Sep 17 00:00:00 2001 From: Aleksa Vuckovic Date: Fri, 12 Aug 2022 15:36:57 +0200 Subject: memcpy, memset; small fixes --- kernel/src/libk/string.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'kernel/src/libk/string.c') 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; +} -- cgit v1.2.3