From 4f74c84ef2b827df9a07b437a04cb2e0ab665fa8 Mon Sep 17 00:00:00 2001 From: Baptiste Wicht Date: Fri, 1 Nov 2013 18:17:30 +0100 Subject: [PATCH] Implement k_free --- kernel/include/memory.hpp | 1 + kernel/src/memory.cpp | 14 +++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/kernel/include/memory.hpp b/kernel/include/memory.hpp index 1b0fb202..1ba06dc6 100644 --- a/kernel/include/memory.hpp +++ b/kernel/include/memory.hpp @@ -17,5 +17,6 @@ const char* str_e820_type(std::size_t type); void init_memory_manager(); std::size_t* k_malloc(std::size_t bytes); +void k_free(std::size_t* block); #endif diff --git a/kernel/src/memory.cpp b/kernel/src/memory.cpp index 9ce6d96b..8cc7713b 100644 --- a/kernel/src/memory.cpp +++ b/kernel/src/memory.cpp @@ -128,7 +128,7 @@ void init_memory_manager(){ } std::size_t* k_malloc(std::size_t bytes){ - malloc_header_chunk* current = malloc_head->next; + auto current = malloc_head->next; while(true){ if(current == malloc_head){ @@ -199,6 +199,18 @@ std::size_t* k_malloc(std::size_t bytes){ } } +void k_free(std::size_t* block){ + auto free_header = reinterpret_cast(block); + + auto header = malloc_head; + + free_header->prev = header; + free_header->next = header->next; + + header->next->prev = free_header; + header->next = free_header; +} + void load_memory_map(){ mmap_query(0, &e820_failed); mmap_query(1, &entry_count);