diff options
Diffstat (limited to '')
-rw-r--r-- | src/memory/memory.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/memory/memory.c b/src/memory/memory.c index ae26bfe..d1a163f 100644 --- a/src/memory/memory.c +++ b/src/memory/memory.c @@ -1,4 +1,3 @@ -#include "serial.h" #include <memory.h> #include <stdint.h> #include <lib.h> @@ -52,6 +51,7 @@ void *kalloc_new(size_t size) { node = 0; } + memset(addr, 0, pages * PAGE_SIZE); struct page_header *header = addr; header->magic = 0xBEEFCAFE; header->used = size; @@ -66,6 +66,8 @@ void *kalloc_new(size_t size) { if (end_header != NULL) { end_header->next = header; + } else { + end_header = header; } return mem; @@ -146,7 +148,12 @@ void *krealloc(void *src, size_t dst_len) { return NULL; // allocation failed } + if (dst_len < src_len) + src_len = dst_len; + memcpy(dst, src, src_len); + kfree(src); + return dst; } @@ -159,7 +166,7 @@ void kfree(void *ptr) { header = get_header(ptr); - if (header == NULL || header->used == 0) { + if (header == NULL) { panic("attempted to kfree invalid pointer"); } |