From 5d6ce1d2c3ae5af7bb32ae0ef9f8e44ba1024083 Mon Sep 17 00:00:00 2001 From: Abdelrahman Date: Sat, 7 Sep 2024 15:43:00 +0100 Subject: [PATCH] Restore libc Allocator implementation --- src/core/mem/libc/mem_libc.c | 49 ++++++++++++++++++++++++++++++++++++ src/core/mem/libc/mem_libc.h | 15 +++++++++++ 2 files changed, 64 insertions(+) create mode 100644 src/core/mem/libc/mem_libc.c create mode 100644 src/core/mem/libc/mem_libc.h diff --git a/src/core/mem/libc/mem_libc.c b/src/core/mem/libc/mem_libc.c new file mode 100644 index 0000000..ad793d4 --- /dev/null +++ b/src/core/mem/libc/mem_libc.c @@ -0,0 +1,49 @@ +#include "mem_libc.h" +#include "aliases.h" +#include "mem_allocator.h" +#include +#include + +internal inline void *mem_libc_alloc(u64 size, void *alloc_obj); +internal inline void *mem_libc_alloc_aligned(u64 size, u64 alignment, + void *alloc_obj); +internal inline void *mem_libc_realloc(void *ptr, u64 size, void *alloc_obj); +internal inline void mem_libc_free(void **ptr, void *alloc_obj); + +Allocator wapp_mem_libc_allocator(void) { + return (Allocator){ + .obj = NULL, + .alloc = mem_libc_alloc, + .alloc_aligned = mem_libc_alloc_aligned, + .realloc = mem_libc_realloc, + .realloc_aligned = NULL, + .free = mem_libc_free, + }; +} + +internal inline void *mem_libc_alloc(u64 size, void *alloc_obj) { + return calloc(1, size); +} + +internal inline void *mem_libc_alloc_aligned(u64 size, u64 alignment, + void *alloc_obj) { + void *output = aligned_alloc(alignment, size); + if (output) { + memset(output, 0, size); + } + + return output; +} + +internal inline void *mem_libc_realloc(void *ptr, u64 size, void *alloc_obj) { + return realloc(ptr, size); +} + +internal inline void mem_libc_free(void **ptr, void *alloc_obj) { + if (!ptr || !(*ptr)) { + return; + } + + free(*ptr); + *ptr = NULL; +} diff --git a/src/core/mem/libc/mem_libc.h b/src/core/mem/libc/mem_libc.h new file mode 100644 index 0000000..608821c --- /dev/null +++ b/src/core/mem/libc/mem_libc.h @@ -0,0 +1,15 @@ +#ifndef MEM_LIBC_H +#define MEM_LIBC_H + +#include "mem_allocator.h" +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +Allocator wapp_mem_libc_allocator(void); + +#ifdef __cplusplus +} +#endif // __cplusplus + +#endif // !MEM_LIBC_H