--- /dev/null
+#include <stdint.h>
+#include <klibc/string.h>
+
+void*
+memcpy(void* dest, const void* src, size_t num)
+{
+ uint8_t* dest_ptr = (uint8_t*)dest;
+ const uint8_t* src_ptr = (const uint8_t*)src;
+ for (size_t i = 0; i < num; i++) {
+ *(dest_ptr + i) = *(src_ptr + i);
+ }
+ return dest;
+}
+
+void*
+memmove(void* dest, const void* src, size_t num)
+{
+ uint8_t* dest_ptr = (uint8_t*)dest;
+ const uint8_t* src_ptr = (const uint8_t*)src;
+ if (dest_ptr < src_ptr) {
+ for (size_t i = 0; i < num; i++) {
+ *(dest_ptr + i) = *(src_ptr + i);
+ }
+ } else {
+ for (size_t i = num; i != 0; i--) {
+ *(dest_ptr + i - 1) = *(src_ptr + i - 1);
+ }
+ }
+ return dest;
+}
+
+void*
+memset(void* ptr, int value, size_t num)
+{
+ uint8_t* c_ptr = (uint8_t*)ptr;
+ for (size_t i = 0; i < num; i++) {
+ *(c_ptr + i) = (uint8_t)value;
+ }
+ return ptr;
+}
+
+int
+memcmp(const void* ptr1, const void* ptr2, size_t num)
+{
+ uint8_t* p1 = (uint8_t*)ptr1;
+ uint8_t* p2 = (uint8_t*)ptr2;
+ for (size_t i = 0; i < num; i++) {
+ int diff = *(p1 + i) - *(p2 + i);
+ if (diff != 0) {
+ return diff;
+ }
+ }
+ return 0;
+}
\ No newline at end of file