diff options
| author | M4xw <m4x@m4xw.net> | 2022-03-22 02:51:23 +0100 |
|---|---|---|
| committer | M4xw <m4x@m4xw.net> | 2022-03-22 02:51:23 +0100 |
| commit | 39cc86c2608e2f75ace33fc7f43bc4f2ad743f1a (patch) | |
| tree | 0d3fd9e995d7484eaaeb158ac808bd6a39121189 /soh/src/code/system_malloc.c | |
| parent | 0bb0e7b53bd80bdc7f78e08c441691737e039b2b (diff) | |
git subrepo clone https://github.com/HarbourMasters/soh.git
subrepo:
subdir: "soh"
merged: "ba904bbd0"
upstream:
origin: "https://github.com/HarbourMasters/soh.git"
branch: "master"
commit: "ba904bbd0"
git-subrepo:
version: "0.4.1"
origin: "???"
commit: "???"
Diffstat (limited to 'soh/src/code/system_malloc.c')
| -rw-r--r-- | soh/src/code/system_malloc.c | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/soh/src/code/system_malloc.c b/soh/src/code/system_malloc.c new file mode 100644 index 000000000..e8bfefed3 --- /dev/null +++ b/soh/src/code/system_malloc.c @@ -0,0 +1,111 @@ +#include "global.h" +#include <string.h> + +#define LOG_SEVERITY_NOLOG 0 +#define LOG_SEVERITY_ERROR 2 +#define LOG_SEVERITY_VERBOSE 3 + +s32 gSystemArenaLogSeverity = LOG_SEVERITY_NOLOG; +Arena gSystemArena; + +void SystemArena_CheckPointer(void* ptr, size_t size, const char* name, const char* action) { + if (ptr == NULL) { + if (gSystemArenaLogSeverity >= LOG_SEVERITY_ERROR) { + // "%s: %u bytes %s failed\n" + osSyncPrintf("%s: %u バイトの%sに失敗しました\n", name, size, action); + __osDisplayArena(&gSystemArena); + return; + } + } else if (gSystemArenaLogSeverity >= LOG_SEVERITY_VERBOSE) { + // "%s: %u bytes %s succeeded\n" + osSyncPrintf("%s: %u バイトの%sに成功しました\n", name, size, action); + } +} + +void* SystemArena_Malloc(size_t size) { + void* ptr = __osMalloc(&gSystemArena, size); + + SystemArena_CheckPointer(ptr, size, "malloc", "確保"); // "Secure" + return ptr; +} + +void* SystemArena_MallocDebug(size_t size, const char* file, s32 line) { + void* ptr = __osMallocDebug(&gSystemArena, size, file, line); + + SystemArena_CheckPointer(ptr, size, "malloc_DEBUG", "確保"); // "Secure" + return ptr; +} + +void* SystemArena_MallocR(size_t size) { + void* ptr = __osMallocR(&gSystemArena, size); + + SystemArena_CheckPointer(ptr, size, "malloc_r", "確保"); // "Secure" + return ptr; +} + +void* SystemArena_MallocRDebug(size_t size, const char* file, s32 line) { + void* ptr = __osMallocRDebug(&gSystemArena, size, file, line); + + SystemArena_CheckPointer(ptr, size, "malloc_r_DEBUG", "確保"); // "Secure" + return ptr; +} + +void* SystemArena_Realloc(void* ptr, size_t newSize) { + ptr = __osRealloc(&gSystemArena, ptr, newSize); + SystemArena_CheckPointer(ptr, newSize, "realloc", "再確保"); // "Re-securing" + return ptr; +} + +void* SystemArena_ReallocDebug(void* ptr, size_t newSize, const char* file, s32 line) { + ptr = __osReallocDebug(&gSystemArena, ptr, newSize, file, line); + SystemArena_CheckPointer(ptr, newSize, "realloc_DEBUG", "再確保"); // "Re-securing" + return ptr; +} + +void SystemArena_Free(void* ptr) { + __osFree(&gSystemArena, ptr); +} + +void SystemArena_FreeDebug(void* ptr, const char* file, s32 line) { + __osFreeDebug(&gSystemArena, ptr, file, line); +} + +void* SystemArena_Calloc(size_t num, size_t size) { + void* ret; + size_t n = num * size; + + ret = __osMalloc(&gSystemArena, n); + if (ret != NULL) { + memset(ret, 0, n); + } + + SystemArena_CheckPointer(ret, n, "calloc", "確保"); + return ret; +} + +void SystemArena_Display(void) { + osSyncPrintf("システムヒープ表示\n"); // "System heap display" + __osDisplayArena(&gSystemArena); +} + +void SystemArena_GetSizes(u32* outMaxFree, u32* outFree, u32* outAlloc) { + ArenaImpl_GetSizes(&gSystemArena, outMaxFree, outFree, outAlloc); +} + +void SystemArena_Check(void) { + __osCheckArena(&gSystemArena); +} + +void SystemArena_Init(void* start, size_t size) { + gSystemArenaLogSeverity = LOG_SEVERITY_NOLOG; + __osMallocInit(&gSystemArena, start, size); +} + +void SystemArena_Cleanup(void) { + gSystemArenaLogSeverity = LOG_SEVERITY_NOLOG; + __osMallocCleanup(&gSystemArena); +} + +u8 SystemArena_IsInitalized(void) { + return __osMallocIsInitalized(&gSystemArena); +} |
