summaryrefslogtreecommitdiff
path: root/kernel/kmalloc.c
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2024-06-09 22:05:53 +0200
committerAnton Kling <anton@kling.gg>2024-06-09 22:05:53 +0200
commit15003d1b0abccc8bcef84386c4a6da176e41f883 (patch)
treed4f8c4f1602ee9e6c4332f3b0585d0e284d0f695 /kernel/kmalloc.c
parentddd796325c9c703f007f046ed9f6fd9eb0ba6383 (diff)
Add UDP
Diffstat (limited to 'kernel/kmalloc.c')
-rw-r--r--kernel/kmalloc.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/kernel/kmalloc.c b/kernel/kmalloc.c
index 08b4821..a652962 100644
--- a/kernel/kmalloc.c
+++ b/kernel/kmalloc.c
@@ -246,14 +246,23 @@ size_t get_mem_size(void *ptr) {
}
void *krealloc(void *ptr, size_t size) {
+ if (!ptr) {
+ return kmalloc(size);
+ }
+ size_t l = get_mem_size(ptr);
+ if (l == size) {
+ return ptr;
+ }
+ if (l > size) {
+ MallocHeader *header = (MallocHeader *)((u8 *)ptr - sizeof(MallocHeader));
+ header->size = size;
+ return ptr;
+ }
+
void *rc = kmalloc(size);
if (!rc) {
return NULL;
}
- if (!ptr) {
- return rc;
- }
- size_t l = get_mem_size(ptr);
size_t to_copy = min(l, size);
memcpy(rc, ptr, to_copy);
kfree(ptr);