summaryrefslogtreecommitdiff
path: root/src/memory/memory.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/memory/memory.c11
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");
}