DECL(int, FSInit, void) { if ((int)bss_ptr == 0x0a000000) { // allocate memory for our stuff void *mem_ptr = memalign(sizeof(struct bss_t), 0x40); if(!mem_ptr) return real_FSInit(); // copy pointer bss_ptr = mem_ptr; memset(bss_ptr, 0, sizeof(struct bss_t)); // setup exceptions setup_os_exceptions(); // create game mount path prefix __os_snprintf(bss.mount_base, sizeof(bss.mount_base), "%s%s/%s%s", CAFE_OS_SD_PATH, SD_GAMES_PATH, GAME_DIR_NAME, CONTENT_PATH); // create game save path prefix __os_snprintf(bss.save_base, sizeof(bss.save_base), "%s%s/%s", CAFE_OS_SD_PATH, SD_SAVES_PATH, GAME_DIR_NAME); logger_connect(&bss.global_sock); // Call real FSInit int result = real_FSInit(); // Mount sdcard FSClient *pClient = (FSClient*) MEMAllocFromDefaultHeap(sizeof(FSClient)); if (!pClient) return 0; FSCmdBlock *pCmd = (FSCmdBlock*) MEMAllocFromDefaultHeap(sizeof(FSCmdBlock)); if (!pCmd) { MEMFreeToDefaultHeap(pClient); return 0; } FSInitCmdBlock(pCmd); FSAddClientEx(pClient, 0, FS_RET_NO_ERROR); fs_mount_sd(bss.global_sock, pClient, pCmd); FSDelClient(pClient); MEMFreeToDefaultHeap(pCmd); MEMFreeToDefaultHeap(pClient); return result; } return real_FSInit(); }
DECL(int, FSInit, void) { if ((int)bss_ptr == 0x0a000000) { bss_ptr = memalign(sizeof(struct bss_t), 0x40); memset(bss_ptr, 0, sizeof(struct bss_t)); } return real_FSInit(); }