diff --git a/kernel/src/CppLib/CString.cpp b/kernel/src/CppLib/CString.cpp index f777b43..91e1edd 100644 --- a/kernel/src/CppLib/CString.cpp +++ b/kernel/src/CppLib/CString.cpp @@ -17,7 +17,7 @@ namespace kcp { do { if (*str == delimiter || *str == '\0') { - auto cstr = current_stream.cstr(); + auto cstr = current_stream.c_str(); auto cstr_len = Lib::strlen(cstr); result.push_back((const char*)Memory::g_heap->Request(sizeof(char) * (cstr_len + 1))); diff --git a/kernel/src/CppLib/Stream.cpp b/kernel/src/CppLib/Stream.cpp index 18ad53a..5a76daf 100644 --- a/kernel/src/CppLib/Stream.cpp +++ b/kernel/src/CppLib/Stream.cpp @@ -23,9 +23,9 @@ kcp::cstringstream::~cstringstream() kcp::cstringstream& kcp::cstringstream::operator<<(char c) { this->string = (char *)Memory::g_heap->Realloc((void *)this->string, this->size + 2); - if (!this->string) + if (this->string == nullptr) { - kerr << "Streaming failed due to failed allocation" << Kt::newline; + kerr << "kcp::cstringstream: Streaming failed due to failed allocation" << Kt::newline; return *this; } @@ -85,6 +85,6 @@ kcp::cstringstream& kcp::cstringstream::operator<<(base nb) return *this; } -const char* kcp::cstringstream::cstr() { +const char* kcp::cstringstream::c_str() { return this->string; } \ No newline at end of file diff --git a/kernel/src/CppLib/Stream.hpp b/kernel/src/CppLib/Stream.hpp index 3e3e32a..f26c821 100644 --- a/kernel/src/CppLib/Stream.hpp +++ b/kernel/src/CppLib/Stream.hpp @@ -39,6 +39,6 @@ namespace kcp { cstringstream& operator<<(base nb); - const char* cstr(); + const char* c_str(); }; }; \ No newline at end of file diff --git a/kernel/src/Memory/Heap.cpp b/kernel/src/Memory/Heap.cpp index 2e13ae9..8b58744 100644 --- a/kernel/src/Memory/Heap.cpp +++ b/kernel/src/Memory/Heap.cpp @@ -32,7 +32,7 @@ namespace Memory void HeapAllocator::InsertToFreelist(void* ptr, std::size_t size) { auto prev_next = head.next; - + head.next = (Node*)ptr; head.next->next = prev_next; head.next->size = size; @@ -47,13 +47,10 @@ namespace Memory size_t size = 0x1000 * n; InsertToFreelist(ptr, size); - - kout << "HeapAllocator: expanded heap by " << base::dec << n << " pages" << Kt::newline; - } + } HeapAllocator::HeapAllocator() { - kout << "HeapAllocator: constructor called" << Kt::newline; InsertPagesToFreelist(8); } @@ -70,6 +67,8 @@ namespace Memory prev->next = current->next; Header* header = (Header*)current; + + header->magic = headerMagic; header->size = size; void* block = (void*)((uintptr_t)header + sizeof(Header)); @@ -109,15 +108,16 @@ namespace Memory void HeapAllocator::Free(void* ptr) { Header* header = GetHeader(ptr); auto size = header->size; + + if (header->magic != headerMagic) { + Panic("Bad magic in HeapAllocator header", nullptr); + return; + } + auto actualSize = size + sizeof(Header); void* actualBlock = (void*)header; - auto prev_next = head.next; - - // Relink the full node back into the list - head.next = (Node*)actualBlock; - head.next->size = actualSize; - head.next->next = prev_next; + InsertToFreelist(actualBlock, size); } // Traverses the Allocator's linked list for debugging diff --git a/kernel/src/Memory/Heap.hpp b/kernel/src/Memory/Heap.hpp index ac49c2a..6db3278 100644 --- a/kernel/src/Memory/Heap.hpp +++ b/kernel/src/Memory/Heap.hpp @@ -3,14 +3,17 @@ namespace Memory { class HeapAllocator { + static constexpr std::size_t headerMagic = 0x6CEF9AB4; + struct Node { size_t size; Node* next; }; struct Header { + std::size_t magic; std::size_t size; - }__attribute__((packed)); + }__attribute__((packed)) ; Node head{};