summaryrefslogtreecommitdiff
path: root/src/code/m_malloc.c
diff options
context:
space:
mode:
authorAnghelo Carvajal <angheloalf95@gmail.com>2023-08-09 20:55:50 -0400
committerGitHub <noreply@github.com>2023-08-09 20:55:50 -0400
commit56b4e612cc8fc1af7c051592e850ca1aac02e39e (patch)
tree1b0a4d9fd080bc49d9a8779b5ed073df7c626a71 /src/code/m_malloc.c
parentc7729c05c07cf0d60a70cd6c4f456069604a1f43 (diff)
`m_malloc.c` (#41)
* match * bss * format * fix
Diffstat (limited to 'src/code/m_malloc.c')
-rw-r--r--src/code/m_malloc.c55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/code/m_malloc.c b/src/code/m_malloc.c
new file mode 100644
index 0000000..a63ac74
--- /dev/null
+++ b/src/code/m_malloc.c
@@ -0,0 +1,55 @@
+#include "m_malloc.h"
+#include "libc64/osmalloc.h"
+#include "fault.h"
+
+Arena zelda_arena;
+FaultClient B_80141FC8_jp;
+
+void* zelda_malloc(size_t size) {
+ return __osMalloc(&zelda_arena, size);
+}
+
+void* zelda_malloc_r(size_t size) {
+ return __osMallocR(&zelda_arena, size);
+}
+
+void* zelda_realloc(void* ptr, size_t size) {
+ __osRealloc(&zelda_arena, ptr, size);
+}
+
+void zelda_free(void* ptr) {
+ __osFree(&zelda_arena, ptr);
+}
+
+void* zelda_calloc(s32 num, size_t size) {
+ void* ptr;
+ u32 n = num * size;
+
+ ptr = __osMalloc(&zelda_arena, n);
+ if (ptr != NULL) {
+ bzero(ptr, n);
+ }
+ return ptr;
+}
+
+void zelda_GetFreeArena(size_t* outMaxFree, size_t* outFree, size_t* outAlloc) {
+ __osGetFreeArena(&zelda_arena, outMaxFree, outFree, outAlloc);
+}
+
+s32 zelda_CheckArena(void) {
+ return __osCheckArena(&zelda_arena);
+}
+
+void zelda_InitArena(void* heap, size_t size) {
+ __osMallocInit(&zelda_arena, heap, size);
+ Fault_AddClient(&B_80141FC8_jp, (void*)ArenaImpl_FaultClient, &zelda_arena, NULL);
+}
+
+void zelda_CleanupArena(void) {
+ Fault_RemoveClient(&B_80141FC8_jp);
+ __osMallocCleanup(&zelda_arena);
+}
+
+s32 zelda_MallocIsInitalized(void) {
+ return __osMallocIsInitalized(&zelda_arena);
+}