Пример #1
0
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();
}
Пример #2
0
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();
}