diff options
author | Anton Kling <anton@kling.gg> | 2024-06-09 22:05:53 +0200 |
---|---|---|
committer | Anton Kling <anton@kling.gg> | 2024-06-09 22:05:53 +0200 |
commit | 15003d1b0abccc8bcef84386c4a6da176e41f883 (patch) | |
tree | d4f8c4f1602ee9e6c4332f3b0585d0e284d0f695 /kernel/kmalloc.c | |
parent | ddd796325c9c703f007f046ed9f6fd9eb0ba6383 (diff) |
Add UDP
Diffstat (limited to 'kernel/kmalloc.c')
-rw-r--r-- | kernel/kmalloc.c | 17 |
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); |