diff options
Diffstat (limited to 'lib/libc/src')
-rw-r--r-- | lib/libc/src/stdlib/malloc.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/lib/libc/src/stdlib/malloc.c b/lib/libc/src/stdlib/malloc.c index 1c9e8ca..4f25c24 100644 --- a/lib/libc/src/stdlib/malloc.c +++ b/lib/libc/src/stdlib/malloc.c @@ -36,6 +36,7 @@ #include <stdatomic.h> #include <stdio.h> #include <stdbool.h> +#include <string.h> #define HEAP_SIZE 0x1001A8 #define HEAP_MAGIC 0x05306A /* "OSMORA" :~) */ @@ -163,6 +164,26 @@ malloc(size_t size) return PTR_OFFSET(next_block, sizeof(*next_block)); } +void * +realloc(void *ptr, size_t size) +{ + struct mem_block *blk; + void *new_buf; + + blk = PTR_NOFFSET(ptr, sizeof(*blk)); + if (blk->magic != HEAP_MAGIC) { + __heap_abort("realloc: bad realloc block detected\n"); + } + if (!blk->allocated) { + __heap_abort("realloc: bad realloc\n"); + } + + new_buf = malloc(size); + memcpy(new_buf, ptr, blk->size); + free(ptr); + return new_buf; +} + void free(void *ptr) { |