From c677aaeed6440b71e0e90f22a7a7a25ebcf71589 Mon Sep 17 00:00:00 2001 From: emiyl Date: Mon, 13 Apr 2020 15:24:19 +0100 Subject: [PATCH] added support for dumping to fat32 usb --- Makefile | 6 +- dumpling.png | Bin 0 -> 167334 bytes meta/meta.xml | 2 +- src/dynamic_libs/ax_functions.c | 1 - src/dynamic_libs/os_functions.c | 82 ++----------- src/dynamic_libs/os_functions.h | 48 ++------ src/fs/fs_utils.c | 4 +- src/main.c | 203 ++++++++++++++++++++++++-------- src/sd_dumper.c | 2 +- src/virtualpath.c | 125 ++++++++++++++++++++ src/virtualpath.h | 58 +++++++++ 11 files changed, 368 insertions(+), 163 deletions(-) create mode 100644 dumpling.png create mode 100644 src/virtualpath.c create mode 100644 src/virtualpath.h diff --git a/Makefile b/Makefile index 8320bc7..986ba6b 100644 --- a/Makefile +++ b/Makefile @@ -56,7 +56,7 @@ MAKEFLAGS += --no-print-directory #--------------------------------------------------------------------------------- # any extra libraries we wish to link with the project #--------------------------------------------------------------------------------- -LIBS := -lgcc -lgd -lpng -lz -lfreetype -lvorbisidec -liosuhax +LIBS := -lgcc -lgd -lpng -lz -lfreetype -lvorbisidec -liosuhax -lfat #--------------------------------------------------------------------------------- # list of directories containing libraries, this must be the top level containing @@ -114,8 +114,8 @@ export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ #--------------------------------------------------------------------------------- # build a list of library paths #--------------------------------------------------------------------------------- -export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ - -L$(LIBOGC_LIB) -L$(PORTLIBS)/lib +export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ + -L$(PORTLIBS)/lib -L$(LIBOGC_LIB) export OUTPUT := $(CURDIR)/$(TARGET) .PHONY: $(BUILD) clean install diff --git a/dumpling.png b/dumpling.png new file mode 100644 index 0000000000000000000000000000000000000000..29f11b59ef9682c46104448f310b18f326166909 GIT binary patch literal 167334 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

oqOp)Pa;8 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

LFsc~ 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 F{2x8&IIsW! literal 0 HcmV?d00001 diff --git a/meta/meta.xml b/meta/meta.xml index ef4f228..08312b0 100644 --- a/meta/meta.xml +++ b/meta/meta.xml @@ -2,7 +2,7 @@ dumpling emiyl - 0.2.1 + 0.3.0 20200411200000 Simple Cemu File Dumper Simple Cemu File Dumper diff --git a/src/dynamic_libs/ax_functions.c b/src/dynamic_libs/ax_functions.c index d84d6f8..815ec7b 100644 --- a/src/dynamic_libs/ax_functions.c +++ b/src/dynamic_libs/ax_functions.c @@ -71,4 +71,3 @@ void InitAXFunctionPointers(void) OS_FIND_EXPORT(sound_handle, AXSetVoiceEndOffset); OS_FIND_EXPORT(sound_handle, AXSetVoiceLoopOffset); } - diff --git a/src/dynamic_libs/os_functions.c b/src/dynamic_libs/os_functions.c index 143db91..2f2b457 100644 --- a/src/dynamic_libs/os_functions.c +++ b/src/dynamic_libs/os_functions.c @@ -24,7 +24,7 @@ #include "common/common.h" #include "os_functions.h" -unsigned int coreinit_handle __attribute__((section(".data"))) = 0; +unsigned int coreinit_handle = 0; //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Lib handle functions @@ -32,12 +32,6 @@ unsigned int coreinit_handle __attribute__((section(".data"))) = 0; EXPORT_DECL(int, OSDynLoad_Acquire, const char* rpl, u32 *handle); EXPORT_DECL(int, OSDynLoad_FindExport, u32 handle, int isdata, const char *symbol, void *address); -//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -//! Security functions -//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -EXPORT_DECL(int, OSGetSecurityLevel, void); -EXPORT_DECL(int, OSForceFullRelaunch, void); - //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Thread functions //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -53,7 +47,6 @@ EXPORT_DECL(void, OSSleepTicks, u64 ticks); EXPORT_DECL(u64, OSGetTick, void); EXPORT_DECL(u64, OSGetTime, void); - //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Mutex functions //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -66,7 +59,6 @@ EXPORT_DECL(int, OSTryLockMutex, void* mutex); //! System functions //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- EXPORT_DECL(u64, OSGetTitleID, void); -EXPORT_DECL(void, OSGetArgcArgv, int* argc, char*** argv); EXPORT_DECL(void, __Exit, void); EXPORT_DECL(void, OSFatal, const char* msg); EXPORT_DECL(void, OSSetExceptionCallback, u8 exceptionType, exception_callback newCallback); @@ -74,7 +66,6 @@ EXPORT_DECL(void, DCFlushRange, const void *addr, u32 length); EXPORT_DECL(void, ICInvalidateRange, const void *addr, u32 length); EXPORT_DECL(void*, OSEffectiveToPhysical, const void*); EXPORT_DECL(int, __os_snprintf, char* s, int n, const char * format, ...); -EXPORT_DECL(int *, __gh_errno_ptr, void); EXPORT_DECL(void, OSScreenInit, void); EXPORT_DECL(unsigned int, OSScreenGetBufferSizeEx, unsigned int bufferNum); @@ -84,6 +75,11 @@ EXPORT_DECL(int, OSScreenFlipBuffersEx, unsigned int bufferNum); EXPORT_DECL(int, OSScreenPutFontEx, unsigned int bufferNum, unsigned int posX, unsigned int posY, const char * buffer); EXPORT_DECL(int, OSScreenEnableEx, unsigned int bufferNum, int enable); +EXPORT_DECL(int, IOS_Ioctl,int fd, unsigned int request, void *input_buffer,unsigned int input_buffer_len, void *output_buffer, unsigned int output_buffer_len); +EXPORT_DECL(int, IOS_IoctlAsync,int fd, unsigned int request, void *input_buffer,unsigned int input_buffer_len, void *output_buffer, unsigned int output_buffer_len, void *cb, void *cbarg); +EXPORT_DECL(int, IOS_Open,char *path, unsigned int mode); +EXPORT_DECL(int, IOS_Close,int fd); + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Memory functions //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -105,70 +101,34 @@ EXPORT_DECL(void, MEMFreeToExpHeap, int heap, void* ptr); //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- EXPORT_DECL(int, MCP_Open, void); EXPORT_DECL(int, MCP_Close, int handle); -EXPORT_DECL(int, MCP_GetOwnTitleInfo, int handle, void * data); - -//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -//! Kernel function addresses -//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -EXPORT_DECL(void, addr_PrepareTitle_hook, void); - -//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -//! Other function addresses -//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -EXPORT_DECL(void, DCInvalidateRange, void *buffer, uint32_t length); //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -//! Energy Saver functions +//! Loader functions (not real rpl) //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -//Burn-in Reduction -EXPORT_DECL(int, IMEnableDim,void); -EXPORT_DECL(int, IMDisableDim,void); -EXPORT_DECL(int, IMIsDimEnabled,int * result); -//Auto power down -EXPORT_DECL(int, IMEnableAPD,void); -EXPORT_DECL(int, IMDisableAPD,void); -EXPORT_DECL(int, IMIsAPDEnabled,int * result); -EXPORT_DECL(int, IMIsAPDEnabledBySysSettings,int * result); +EXPORT_DECL(int, LiWaitIopComplete, int unknown_syscall_arg_r3, int * remaining_bytes); +EXPORT_DECL(int, LiWaitIopCompleteWithInterrupts, int unknown_syscall_arg_r3, int * remaining_bytes); - -EXPORT_DECL(int, IOS_Ioctl,int fd, unsigned int request, void *input_buffer,unsigned int input_buffer_len, void *output_buffer, unsigned int output_buffer_len); -EXPORT_DECL(int, IOS_Open,char *path, unsigned int mode); -EXPORT_DECL(int, IOS_Close,int fd); -void InitAcquireOS(void) +void InitOSFunctionPointers(void) { - //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + unsigned int *funcPointer = 0; + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Lib handle functions //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- EXPORT_FUNC_WRITE(OSDynLoad_Acquire, (int (*)(const char*, unsigned *))OS_SPECIFICS->addr_OSDynLoad_Acquire); EXPORT_FUNC_WRITE(OSDynLoad_FindExport, (int (*)(u32, int, const char *, void *))OS_SPECIFICS->addr_OSDynLoad_FindExport); OSDynLoad_Acquire("coreinit.rpl", &coreinit_handle); -} - -void InitOSFunctionPointers(void) -{ - unsigned int *funcPointer = 0; - - InitAcquireOS(); - //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //! Security functions - //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - OS_FIND_EXPORT(coreinit_handle, OSGetSecurityLevel); - OS_FIND_EXPORT(coreinit_handle, OSForceFullRelaunch); //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! System functions //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- OS_FIND_EXPORT(coreinit_handle, OSFatal); OS_FIND_EXPORT(coreinit_handle, OSGetTitleID); - OS_FIND_EXPORT(coreinit_handle, OSGetArgcArgv); OS_FIND_EXPORT(coreinit_handle, OSSetExceptionCallback); OS_FIND_EXPORT(coreinit_handle, DCFlushRange); OS_FIND_EXPORT(coreinit_handle, ICInvalidateRange); OS_FIND_EXPORT(coreinit_handle, OSEffectiveToPhysical); OS_FIND_EXPORT(coreinit_handle, __os_snprintf); - OS_FIND_EXPORT(coreinit_handle, __gh_errno_ptr); - OSDynLoad_FindExport(coreinit_handle, 0, "_Exit", &__Exit); OS_FIND_EXPORT(coreinit_handle, OSScreenInit); @@ -192,7 +152,6 @@ void InitOSFunctionPointers(void) OS_FIND_EXPORT(coreinit_handle, OSSleepTicks); OS_FIND_EXPORT(coreinit_handle, OSGetTick); OS_FIND_EXPORT(coreinit_handle, OSGetTime); - //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Mutex functions //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -205,7 +164,6 @@ void InitOSFunctionPointers(void) //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- OS_FIND_EXPORT(coreinit_handle, MCP_Open); OS_FIND_EXPORT(coreinit_handle, MCP_Close); - OS_FIND_EXPORT(coreinit_handle, MCP_GetOwnTitleInfo); //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Memory functions @@ -226,22 +184,8 @@ void InitOSFunctionPointers(void) //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Other function addresses //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - OS_FIND_EXPORT(coreinit_handle, DCInvalidateRange); - - //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //! Energy Saver functions - //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //Burn-in Reduction - OS_FIND_EXPORT(coreinit_handle, IMEnableDim); - OS_FIND_EXPORT(coreinit_handle, IMDisableDim); - OS_FIND_EXPORT(coreinit_handle, IMIsDimEnabled); - //Auto power down - OS_FIND_EXPORT(coreinit_handle, IMEnableAPD); - OS_FIND_EXPORT(coreinit_handle, IMDisableAPD); - OS_FIND_EXPORT(coreinit_handle, IMIsAPDEnabled); - OS_FIND_EXPORT(coreinit_handle, IMIsAPDEnabledBySysSettings); - OS_FIND_EXPORT(coreinit_handle, IOS_Ioctl); + OS_FIND_EXPORT(coreinit_handle, IOS_IoctlAsync); OS_FIND_EXPORT(coreinit_handle, IOS_Open); OS_FIND_EXPORT(coreinit_handle, IOS_Close); } diff --git a/src/dynamic_libs/os_functions.h b/src/dynamic_libs/os_functions.h index 02b27cd..9c36643 100644 --- a/src/dynamic_libs/os_functions.h +++ b/src/dynamic_libs/os_functions.h @@ -66,7 +66,6 @@ extern "C" { /* Handle for coreinit */ extern unsigned int coreinit_handle; void InitOSFunctionPointers(void); -void InitAcquireOS(void); //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Lib handle functions @@ -74,12 +73,6 @@ void InitAcquireOS(void); extern int (* OSDynLoad_Acquire)(const char* rpl, u32 *handle); extern int (* OSDynLoad_FindExport)(u32 handle, int isdata, const char *symbol, void *address); -//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -//! Security functions -//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -extern int (* OSGetSecurityLevel)(void); -extern int (* OSForceFullRelaunch)(void); - //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! Thread functions //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -103,18 +96,26 @@ extern void (* OSLockMutex)(void* mutex); extern void (* OSUnlockMutex)(void* mutex); extern int (* OSTryLockMutex)(void* mutex); +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +//! MCP functions +//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +extern int (* MCP_Open)(void); +extern int (* MCP_Close)(int handle); + //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //! System functions //!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- extern u64 (* OSGetTitleID)(void); -extern void (* OSGetArgcArgv)(int* argc, char*** argv); extern void (* __Exit)(void); extern void (* OSFatal)(const char* msg); extern void (* DCFlushRange)(const void *addr, u32 length); extern void (* ICInvalidateRange)(const void *addr, u32 length); extern void* (* OSEffectiveToPhysical)(const void*); extern int (* __os_snprintf)(char* s, int n, const char * format, ...); -extern int * (* __gh_errno_ptr)(void); +extern int (*IOS_Ioctl)(int fd, unsigned int request, void *input_buffer,unsigned int input_buffer_len, void *output_buffer, unsigned int output_buffer_len); +extern int (*IOS_IoctlAsync)(int fd, unsigned int request, void *input_buffer,unsigned int input_buffer_len, void *output_buffer, unsigned int output_buffer_len, void *cb, void *cbarg); +extern int (*IOS_Open)(char *path, unsigned int mode); +extern int (*IOS_Close)(int fd); extern void (*OSScreenInit)(void); extern unsigned int (*OSScreenGetBufferSizeEx)(unsigned int bufferNum); @@ -127,34 +128,9 @@ extern int (*OSScreenEnableEx)(unsigned int bufferNum, int enable); typedef unsigned char (*exception_callback)(void * interruptedContext); extern void (* OSSetExceptionCallback)(u8 exceptionType, exception_callback newCallback); -//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -//! MCP functions -//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -extern int (* MCP_Open)(void); -extern int (* MCP_Close)(int handle); -extern int (* MCP_GetOwnTitleInfo)(int handle, void * data); - -//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -//! Other function addresses -//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -extern void (*DCInvalidateRange)(void *buffer, uint32_t length); +extern int (* LiWaitIopComplete)(int unknown_syscall_arg_r3, int * remaining_bytes); +extern int (* LiWaitIopCompleteWithInterrupts)(int unknown_syscall_arg_r3, int * remaining_bytes); -//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -//! Energy Saver functions -//!---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -////Burn-in Reduction -extern int (*IMEnableDim)(void); -extern int (*IMDisableDim)(void); -extern int (*IMIsDimEnabled)(int * result); -//Auto power down -extern int (*IMEnableAPD)(void); -extern int (*IMDisableAPD)(void); -extern int (*IMIsAPDEnabled)(int * result); -extern int (*IMIsAPDEnabledBySysSettings)(int * result); - -extern int (*IOS_Ioctl)(int fd, unsigned int request, void *input_buffer,unsigned int input_buffer_len, void *output_buffer, unsigned int output_buffer_len); -extern int (*IOS_Open)(char *path, unsigned int mode); -extern int (*IOS_Close)(int fd); #ifdef __cplusplus } diff --git a/src/fs/fs_utils.c b/src/fs/fs_utils.c index efa2e55..613cec6 100644 --- a/src/fs/fs_utils.c +++ b/src/fs/fs_utils.c @@ -95,9 +95,9 @@ int LoadFileToMem(const char *filepath, u8 **inbuffer, u32 *size) *inbuffer = buffer; //! sign is optional input - if(size) + if(size) { *size = filesize; - + } return filesize; } diff --git a/src/main.c b/src/main.c index 8ef445f..02f8d1b 100644 --- a/src/main.c +++ b/src/main.c @@ -3,23 +3,26 @@ #include #include #include +#include #include "dynamic_libs/os_functions.h" #include "dynamic_libs/fs_functions.h" -#include "dynamic_libs/gx2_functions.h" -#include "dynamic_libs/sys_functions.h" -#include "dynamic_libs/vpad_functions.h" -#include "dynamic_libs/padscore_functions.h" -#include "dynamic_libs/socket_functions.h" -#include "dynamic_libs/ax_functions.h" +#include +#include +#include +#include +#include +#include #include "fs/fs_utils.h" #include "fs/sd_fat_devoptab.h" -#include #include +#include +#include #include "system/memory.h" #include "utils/logger.h" #include "utils/utils.h" #include "common/common.h" #include "sd_dumper.h" +#include "virtualpath.h" #define MAX_CONSOLE_LINES_TV 27 #define MAX_CONSOLE_LINES_DRC 18 @@ -127,7 +130,7 @@ void console_printf(int newline, const char *format, ...) return 0; }*/ -int dump_func(const char *mount_path, int selectedItem, int fsaFd, int initScreen, int dump_source) +int dump_func(const char *mount_path, int selectedItem, int fsaFd, int initScreen, int dump_source, int dump_target) { int res = mount_fs("dev", fsaFd, NULL, mount_path); if(res < 0) @@ -141,20 +144,15 @@ int dump_func(const char *mount_path, int selectedItem, int fsaFd, int initScree { strcpy(targetPath, "dev:/"); char sdPath[255] = "sd:/dumpling"; - if (dump_source) { - if (selectedItem == 0) strcpy(sdPath, "sd:/dumpling/games"); - if (selectedItem == 1) strcpy(sdPath, "sd:/dumpling/updates"); - if (selectedItem == 2) strcpy(sdPath, "sd:/dumpling/dlc"); - if (selectedItem == 3) strcpy(sdPath, "sd:/dumpling/saves"); - } else { - if (selectedItem == 0) snprintf(sdPath, sizeof(sdPath), "sd:/dumpling/online_files/%s", mount_path + 13); - if (selectedItem == 1) strcpy(sdPath, "sd:/dumpling/friends_list"); - if (selectedItem == 2) strcpy(sdPath, "sd:/dumpling/games"); - if (selectedItem == 3) strcpy(sdPath, "sd:/dumpling/updates"); - if (selectedItem == 4) strcpy(sdPath, "sd:/dumpling/dlc"); - if (selectedItem == 5) strcpy(sdPath, "sd:/dumpling/saves"); - if (selectedItem == 6) strcpy(sdPath, "sd:/dumpling/nand"); - } + char dumpTo[127] = "dumps"; + if (!dump_source && (selectedItem == 0)) snprintf(dumpTo, sizeof(dumpTo), "online_files/%s", mount_path + 13); + if (!dump_source && (selectedItem == 1)) strcpy(dumpTo, "friends_list"); + if ((!dump_source && (selectedItem == 2)) | (dump_source && (selectedItem == 0))) strcpy(dumpTo, "games"); + if ((!dump_source && (selectedItem == 3)) | (dump_source && (selectedItem == 1))) strcpy(dumpTo, "updates"); + if ((!dump_source && (selectedItem == 4)) | (dump_source && (selectedItem == 2))) strcpy(dumpTo, "dlc"); + if ((!dump_source && (selectedItem == 5)) | (dump_source && (selectedItem == 3))) strcpy(dumpTo, "saves"); + if (!dump_source && (selectedItem == 6)) strcpy(dumpTo, "nand"); + snprintf(sdPath, sizeof(sdPath), "%s:/dumpling/%s", (dump_target) ? "usb" : "sd", dumpTo); DumpDir(targetPath, sdPath); free(targetPath); @@ -167,6 +165,43 @@ int dump_func(const char *mount_path, int selectedItem, int fsaFd, int initScree return initScreen; } +//just to be able to call async +void someFunc(void *arg) +{ + (void)arg; +} + +static int mcp_hook_fd = -1; +int MCPHookOpen() +{ + //take over mcp thread + mcp_hook_fd = MCP_Open(); + if(mcp_hook_fd < 0) + return -1; + IOS_IoctlAsync(mcp_hook_fd, 0x62, (void*)0, 0, (void*)0, 0, someFunc, (void*)0); + //let wupserver start up + sleep(1); + if(IOSUHAX_Open("/dev/mcp") < 0) + { + MCP_Close(mcp_hook_fd); + mcp_hook_fd = -1; + return -1; + } + return 0; +} + +void MCPHookClose() +{ + if(mcp_hook_fd < 0) + return; + //close down wupserver, return control to mcp + IOSUHAX_Close(); + //wait for mcp to return + sleep(1); + MCP_Close(mcp_hook_fd); + mcp_hook_fd = -1; +} + /* Entry point */ int Menu_Main(void) { @@ -226,21 +261,49 @@ int Menu_Main(void) OSScreenFlipBuffersEx(0); OSScreenFlipBuffersEx(1); - int res = IOSUHAX_Open(NULL); - if(res < 0) - { - console_printf(1, "IOSUHAX_open failed - Ensure you are using MochaCFW\n"); - sleep(2); - return 0; - } + int fsaFd = -1; + int iosuhaxMount = 0; - int fsaFd = IOSUHAX_FSA_Open(); - if(fsaFd < 0) - { - console_printf(1, "IOSUHAX_FSA_Open failed\n"); + int res = IOSUHAX_Open(NULL); + if(res < 0) + res = MCPHookOpen(); + if(res < 0) + { + log_printf("IOSUHAX_open failed\nEnsure you are using MochaCFW\n"); sleep(2); - return 0; - } + return 0; + } + else + { + iosuhaxMount = 1; + fatInitDefault(); + + fsaFd = IOSUHAX_FSA_Open(); + if(fsaFd < 0) + { + log_printf("IOSUHAX_FSA_Open failed\n"); + } + + //mount_fs("slccmpt01", fsaFd, "/dev/slccmpt01", "/vol/storage_slccmpt01"); + //mount_fs("storage_odd_tickets", fsaFd, "/dev/odd01", "/vol/storage_odd_tickets"); + //mount_fs("storage_odd_updates", fsaFd, "/dev/odd02", "/vol/storage_odd_updates"); + //mount_fs("storage_odd_content", fsaFd, "/dev/odd03", "/vol/storage_odd_content"); + //mount_fs("storage_odd_content2", fsaFd, "/dev/odd04", "/vol/storage_odd_content2"); + //mount_fs("storage_slc", fsaFd, NULL, "/vol/system"); + //mount_fs("storage_mlc", fsaFd, NULL, "/vol/storage_mlc01"); + //mount_fs("storage_usb", fsaFd, NULL, "/vol/storage_usb01"); + + VirtualMountDevice("sd:/"); + //VirtualMountDevice("slccmpt01:/"); + //VirtualMountDevice("storage_odd_tickets:/"); + //VirtualMountDevice("storage_odd_updates:/"); + //VirtualMountDevice("storage_odd_content:/"); + //VirtualMountDevice("storage_odd_content2:/"); + //VirtualMountDevice("storage_slc:/"); + //VirtualMountDevice("storage_mlc:/"); + //VirtualMountDevice("storage_usb:/"); + VirtualMountDevice("usb:/"); + } int vpadError = -1; VPADData vpad; @@ -288,7 +351,7 @@ int Menu_Main(void) int selectedItem = 0; int dump_source = 0; - //int dump_target = 0; + int dump_target = 0; while(1) { @@ -319,12 +382,11 @@ int Menu_Main(void) OSScreenClearBufferEx(1, 0); - console_print_pos(0, 1, "-- Dumpling v0.2.2 by emiyl --"); - console_print_pos(0, 2, "Source: %s", (dump_source) ? "USB" : "MLC"); - //console_print_pos(0, 2, "Target: %s", (dump_target) ? "USB" : "SD"); + console_print_pos(0, 1, "-- Dumpling v0.3.0 by emiyl --"); + console_print_pos(0, 2, "Source: %s // Target: %s", (dump_source) ? "USB" : "MLC", (dump_target) ? "USB" : "SD"); - console_print_pos(0, 4, "Select what to dump to SD card and press A to start dump."); - console_print_pos(0, 5, "Use L/R to change source.");// and ZL/ZR to change target."); + console_print_pos(0, 4, "Select what to dump to USB storage and press A to start dump."); + console_print_pos(0, 5, "Use L/R to change source and ZL/ZR to change target."); u32 i; for(i = 0; i < (((dump_source) ? sizeof(usb_selection_paths) : sizeof(mlc_selection_paths)) / 4); i++) @@ -378,19 +440,34 @@ int Menu_Main(void) usleep(200000); } + if(vpadError == 0 && ((vpad.btns_d | vpad.btns_h) & (VPAD_BUTTON_ZL))) + { + dump_target = !dump_target; + initScreen = 1; + usleep(200000); + } + + if(vpadError == 0 && ((vpad.btns_d | vpad.btns_h) & (VPAD_BUTTON_ZR))) + { + dump_target = !dump_target; + initScreen = 1; + usleep(200000); + } + if(vpadError == 0 && ((vpad.btns_d | vpad.btns_h) & VPAD_BUTTON_A)) { - if (dump_source | (selectedItem > 1)) initScreen = dump_func(((dump_source) ? usb_selection_paths : mlc_selection_paths)[selectedItem], selectedItem, fsaFd, initScreen, dump_source); + if (dump_source | (selectedItem > 1)) + initScreen = dump_func(((dump_source) ? usb_selection_paths : mlc_selection_paths)[selectedItem], selectedItem, fsaFd, initScreen, dump_source, dump_target); else if (selectedItem == 0) { - initScreen = dump_func("/vol/storage_mlc01/usr/save/system/act/" , selectedItem, fsaFd, initScreen, dump_source); // account.dat - initScreen = dump_func("/vol/storage_mlc01/sys/title/0005001b/10054000/content/ccerts", selectedItem, fsaFd, initScreen, dump_source); // ccerts - initScreen = dump_func("/vol/storage_mlc01/sys/title/0005001b/10054000/content/scerts", selectedItem, fsaFd, initScreen, dump_source); // scerts - initScreen = dump_func("/vol/storage_mlc01/sys/title/0005001b/10056000/" , selectedItem, fsaFd, initScreen, dump_source); // mii data + initScreen = dump_func("/vol/storage_mlc01/usr/save/system/act/" , selectedItem, fsaFd, initScreen, dump_source, dump_target); // account.dat + initScreen = dump_func("/vol/storage_mlc01/sys/title/0005001b/10054000/content/ccerts", selectedItem, fsaFd, initScreen, dump_source, dump_target); // ccerts + initScreen = dump_func("/vol/storage_mlc01/sys/title/0005001b/10054000/content/scerts", selectedItem, fsaFd, initScreen, dump_source, dump_target); // scerts + initScreen = dump_func("/vol/storage_mlc01/sys/title/0005001b/10056000/" , selectedItem, fsaFd, initScreen, dump_source, dump_target); // mii data } else if (selectedItem == 1) { - initScreen = dump_func("/vol/storage_mlc01/sys/title/00050030/1001500A/", selectedItem, fsaFd, initScreen, dump_source); // JP friends list - initScreen = dump_func("/vol/storage_mlc01/sys/title/00050030/1001510A/", selectedItem, fsaFd, initScreen, dump_source); // US friends list - initScreen = dump_func("/vol/storage_mlc01/sys/title/00050030/1001520A/", selectedItem, fsaFd, initScreen, dump_source); // EU friends list + initScreen = dump_func("/vol/storage_mlc01/sys/title/00050030/1001500A/", selectedItem, fsaFd, initScreen, dump_source, dump_target); // JP friends list + initScreen = dump_func("/vol/storage_mlc01/sys/title/00050030/1001510A/", selectedItem, fsaFd, initScreen, dump_source, dump_target); // US friends list + initScreen = dump_func("/vol/storage_mlc01/sys/title/00050030/1001520A/", selectedItem, fsaFd, initScreen, dump_source, dump_target); // EU friends list console_printf(1, "Dump complete"); sleep(1); } @@ -422,7 +499,33 @@ int Menu_Main(void) //!******************************************************************* log_printf("Unmount SD\n"); - unmount_sd_fat("sd"); + if(iosuhaxMount) + { + fatUnmount("sd"); + fatUnmount("usb"); + IOSUHAX_sdio_disc_interface.shutdown(); + IOSUHAX_usb_disc_interface.shutdown(); + + /*unmount_fs("slccmpt01"); + unmount_fs("storage_odd_tickets"); + unmount_fs("storage_odd_updates"); + unmount_fs("storage_odd_content"); + unmount_fs("storage_odd_content2"); + unmount_fs("storage_slc"); + unmount_fs("storage_mlc"); + unmount_fs("storage_usb");*/ + IOSUHAX_FSA_Close(fsaFd); + if(mcp_hook_fd >= 0) + MCPHookClose(); + else + IOSUHAX_Close(); + } + else + { + unmount_sd_fat("sd:/"); + } + + UnmountVirtualPaths(); IOSUHAX_FSA_Close(fsaFd); IOSUHAX_Close(); diff --git a/src/sd_dumper.c b/src/sd_dumper.c index 84ca822..d9d123c 100644 --- a/src/sd_dumper.c +++ b/src/sd_dumper.c @@ -60,7 +60,7 @@ static int DumpFile(char *pPath, const char * output_path) FILE *pWriteFile = fopen(output_path, "wb"); if(!pWriteFile) { - if (detailed_logs) console_printf(1, "Can't open write file %s\n", output_path); + console_printf(1, "Can't open write file %s\n", output_path); fclose(pReadFile); return -3; } diff --git a/src/virtualpath.c b/src/virtualpath.c new file mode 100644 index 0000000..e1b6aec --- /dev/null +++ b/src/virtualpath.c @@ -0,0 +1,125 @@ +/**************************************************************************** +* Copyright (C) 2008 +* Joseph Jordan +* +* Copyright (C) 2010 +* by Dimok +* +* This software is provided 'as-is', without any express or implied +* warranty. In no event will the authors be held liable for any +* damages arising from the use of this software. +* +* Permission is granted to anyone to use this software for any +* purpose, including commercial applications, and to alter it and +* redistribute it freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you +* must not claim that you wrote the original software. If you use +* this software in a product, an acknowledgment in the product +* documentation would be appreciated but is not required. +* +* 2. Altered source versions must be plainly marked as such, and +* must not be misrepresented as being the original software. +* +* 3. This notice may not be removed or altered from any source +* distribution. +* +* for WiiXplorer 2010 +***************************************************************************/ +#include +#include +#include "virtualpath.h" + +u8 MAX_VIRTUAL_PARTITIONS = 0; +VIRTUAL_PARTITION * VIRTUAL_PARTITIONS = NULL; + +void VirtualMountDevice(const char * path) +{ + if(!path) + return; + + int i = 0; + char name[255]; + char alias[255]; + char prefix[255]; + bool namestop = false; + + alias[0] = '/'; + + do + { + if(path[i] == ':') + namestop = true; + + if(!namestop) + { + name[i] = path[i]; + name[i+1] = '\0'; + alias[i+1] = path[i]; + alias[i+2] = '\0'; + } + + prefix[i] = path[i]; + prefix[i+1] = '\0'; + i++; + } + while(path[i-1] != '/'); + + AddVirtualPath(name, alias, prefix); +} + +void AddVirtualPath(const char *name, const char *alias, const char *prefix) +{ + if(!VIRTUAL_PARTITIONS) + VIRTUAL_PARTITIONS = (VIRTUAL_PARTITION *) malloc(sizeof(VIRTUAL_PARTITION)); + + VIRTUAL_PARTITION * tmp = realloc(VIRTUAL_PARTITIONS, sizeof(VIRTUAL_PARTITION)*(MAX_VIRTUAL_PARTITIONS+1)); + if(!tmp) + { + free(VIRTUAL_PARTITIONS); + MAX_VIRTUAL_PARTITIONS = 0; + return; + } + + VIRTUAL_PARTITIONS = tmp; + + VIRTUAL_PARTITIONS[MAX_VIRTUAL_PARTITIONS].name = strdup(name); + VIRTUAL_PARTITIONS[MAX_VIRTUAL_PARTITIONS].alias = strdup(alias); + VIRTUAL_PARTITIONS[MAX_VIRTUAL_PARTITIONS].prefix = strdup(prefix); + VIRTUAL_PARTITIONS[MAX_VIRTUAL_PARTITIONS].inserted = true; + + MAX_VIRTUAL_PARTITIONS++; +} + +void MountVirtualDevices() +{ + VirtualMountDevice("sd:/"); + VirtualMountDevice("slccmpt01:/"); + VirtualMountDevice("storage_odd_tickets:/"); + VirtualMountDevice("storage_odd_updates:/"); + VirtualMountDevice("storage_odd_content:/"); + VirtualMountDevice("storage_odd_content2:/"); + VirtualMountDevice("storage_slc:/"); + VirtualMountDevice("storage_mlc:/"); + VirtualMountDevice("storage_usb:/"); + VirtualMountDevice("usb:/"); +} + +void UnmountVirtualPaths() +{ + u32 i = 0; + for(i = 0; i < MAX_VIRTUAL_PARTITIONS; i++) + { + if(VIRTUAL_PARTITIONS[i].name) + free(VIRTUAL_PARTITIONS[i].name); + if(VIRTUAL_PARTITIONS[i].alias) + free(VIRTUAL_PARTITIONS[i].alias); + if(VIRTUAL_PARTITIONS[i].prefix) + free(VIRTUAL_PARTITIONS[i].prefix); + } + + if(VIRTUAL_PARTITIONS) + free(VIRTUAL_PARTITIONS); + VIRTUAL_PARTITIONS = NULL; + MAX_VIRTUAL_PARTITIONS = 0; +} diff --git a/src/virtualpath.h b/src/virtualpath.h new file mode 100644 index 0000000..12464a2 --- /dev/null +++ b/src/virtualpath.h @@ -0,0 +1,58 @@ +/**************************************************************************** +* Copyright (C) 2010 +* by Dimok +* +* Original VIRTUAL_PART Struct +* Copyright (C) 2008 +* Joseph Jordan +* +* This software is provided 'as-is', without any express or implied +* warranty. In no event will the authors be held liable for any +* damages arising from the use of this software. +* +* Permission is granted to anyone to use this software for any +* purpose, including commercial applications, and to alter it and +* redistribute it freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you +* must not claim that you wrote the original software. If you use +* this software in a product, an acknowledgment in the product +* documentation would be appreciated but is not required. +* +* 2. Altered source versions must be plainly marked as such, and +* must not be misrepresented as being the original software. +* +* 3. This notice may not be removed or altered from any source +* distribution. +* +* for WiiXplorer 2010 +***************************************************************************/ +#ifndef _VIRTUALPATH_H_ +#define _VIRTUALPATH_H_ + +#ifdef __cplusplus +extern "C"{ +#endif + +#include + +typedef struct { + char *name; + char *alias; + char *prefix; + bool inserted; +} VIRTUAL_PARTITION; + +extern VIRTUAL_PARTITION * VIRTUAL_PARTITIONS; +extern u8 MAX_VIRTUAL_PARTITIONS; + +void VirtualMountDevice(const char * devicepath); +void AddVirtualPath(const char *name, const char *alias, const char *prefix); +void MountVirtualDevices(); +void UnmountVirtualPaths(); + +#ifdef __cplusplus +} +#endif + +#endif /* _VIRTUALPART_H_ */