mirror of
https://github.com/CTCaer/hekate.git
synced 2024-11-26 11:42:09 +00:00
nyx: Support multiple backup based emuMMC
This commit is contained in:
parent
87ce09f4b1
commit
3d00a1be21
3 changed files with 47 additions and 24 deletions
|
@ -119,7 +119,7 @@ void save_emummc_cfg(u32 part_idx, u32 sector_start, const char *path)
|
||||||
f_close(&fp);
|
f_close(&fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _update_emummc_base_folder(char *outFilename, u32 sdPathLen, u32 currPartIdx)
|
void update_emummc_base_folder(char *outFilename, u32 sdPathLen, u32 currPartIdx)
|
||||||
{
|
{
|
||||||
if (currPartIdx < 10)
|
if (currPartIdx < 10)
|
||||||
{
|
{
|
||||||
|
@ -170,7 +170,7 @@ static int _dump_emummc_file_part(emmc_tool_gui_t *gui, char *sd_path, sdmmc_sto
|
||||||
numSplitParts = (totalSectors + multipartSplitSectors - 1) / multipartSplitSectors;
|
numSplitParts = (totalSectors + multipartSplitSectors - 1) / multipartSplitSectors;
|
||||||
|
|
||||||
// Continue from where we left, if Partial Backup in progress.
|
// Continue from where we left, if Partial Backup in progress.
|
||||||
_update_emummc_base_folder(outFilename, sdPathLen, 0);
|
update_emummc_base_folder(outFilename, sdPathLen, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
FIL fp;
|
FIL fp;
|
||||||
|
@ -217,7 +217,7 @@ static int _dump_emummc_file_part(emmc_tool_gui_t *gui, char *sd_path, sdmmc_sto
|
||||||
memset(&fp, 0, sizeof(fp));
|
memset(&fp, 0, sizeof(fp));
|
||||||
currPartIdx++;
|
currPartIdx++;
|
||||||
|
|
||||||
_update_emummc_base_folder(outFilename, sdPathLen, currPartIdx);
|
update_emummc_base_folder(outFilename, sdPathLen, currPartIdx);
|
||||||
|
|
||||||
// Create next part.
|
// Create next part.
|
||||||
s_printf(gui->txt_buf, "%s#", outFilename + strlen(gui->base_path));
|
s_printf(gui->txt_buf, "%s#", outFilename + strlen(gui->base_path));
|
||||||
|
@ -386,7 +386,7 @@ void dump_emummc_file(emmc_tool_gui_t *gui)
|
||||||
|
|
||||||
for (int j = 0; j < 100; j++)
|
for (int j = 0; j < 100; j++)
|
||||||
{
|
{
|
||||||
_update_emummc_base_folder(sdPath, base_len, j);
|
update_emummc_base_folder(sdPath, base_len, j);
|
||||||
if(f_stat(sdPath, NULL) == FR_NO_FILE)
|
if(f_stat(sdPath, NULL) == FR_NO_FILE)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,5 +33,6 @@ void load_emummc_cfg(emummc_cfg_t *emu_info);
|
||||||
void save_emummc_cfg(u32 part_idx, u32 sector_start, const char *path);
|
void save_emummc_cfg(u32 part_idx, u32 sector_start, const char *path);
|
||||||
void dump_emummc_file(emmc_tool_gui_t *gui);
|
void dump_emummc_file(emmc_tool_gui_t *gui);
|
||||||
void dump_emummc_raw(emmc_tool_gui_t *gui, int part_idx, u32 sector_start);
|
void dump_emummc_raw(emmc_tool_gui_t *gui, int part_idx, u32 sector_start);
|
||||||
|
void update_emummc_base_folder(char *outFilename, u32 sdPathLen, u32 currPartIdx);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -447,49 +447,71 @@ static void _migrate_sd_file_based()
|
||||||
|
|
||||||
static void _migrate_sd_backup_file_based()
|
static void _migrate_sd_backup_file_based()
|
||||||
{
|
{
|
||||||
|
char *emu_path = (char *)malloc(128);
|
||||||
|
char *parts_path = (char *)malloc(128);
|
||||||
|
char *backup_path = (char *)malloc(128);
|
||||||
|
char *backup_file_path = (char *)malloc(128);
|
||||||
|
|
||||||
sd_mount();
|
sd_mount();
|
||||||
f_mkdir("emuMMC");
|
f_mkdir("emuMMC");
|
||||||
f_mkdir("emuMMC/BK00");
|
|
||||||
f_mkdir("emuMMC/BK00/eMMC");
|
strcpy(emu_path, "emuMMC/BK");
|
||||||
|
u32 base_len = strlen(emu_path);
|
||||||
|
|
||||||
|
for (int j = 0; j < 100; j++)
|
||||||
|
{
|
||||||
|
update_emummc_base_folder(emu_path, base_len, j);
|
||||||
|
if(f_stat(emu_path, NULL) == FR_NO_FILE)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
base_len = strlen(emu_path);
|
||||||
|
|
||||||
|
f_mkdir(emu_path);
|
||||||
|
strcat(emu_path, "/eMMC");
|
||||||
|
f_mkdir(emu_path);
|
||||||
|
|
||||||
FIL fp;
|
FIL fp;
|
||||||
|
strcpy(emu_path + base_len, "/file_based");
|
||||||
f_open(&fp, "emuMMC/BK00/file_based", FA_CREATE_ALWAYS | FA_WRITE);
|
f_open(&fp, "emuMMC/BK00/file_based", FA_CREATE_ALWAYS | FA_WRITE);
|
||||||
f_close(&fp);
|
f_close(&fp);
|
||||||
|
|
||||||
char *path = (char *)malloc(128);
|
emmcsn_path_impl(backup_path, "", "", NULL);
|
||||||
char *path2 = (char *)malloc(128);
|
|
||||||
char *path3 = (char *)malloc(128);
|
|
||||||
|
|
||||||
emmcsn_path_impl(path, "", "", NULL);
|
s_printf(backup_file_path, "%s/BOOT0", backup_path);
|
||||||
|
strcpy(emu_path + base_len, "/eMMC/BOOT0");
|
||||||
|
f_rename(backup_file_path, emu_path);
|
||||||
|
|
||||||
s_printf(path2, "%s/BOOT0", path);
|
s_printf(backup_file_path, "%s/BOOT1", backup_path);
|
||||||
f_rename(path2, "emuMMC/BK00/eMMC/BOOT0");
|
strcpy(emu_path + base_len, "/eMMC/BOOT1");
|
||||||
|
f_rename(backup_file_path, emu_path);
|
||||||
s_printf(path2, "%s/BOOT1", path);
|
|
||||||
f_rename(path2, "emuMMC/BK00/eMMC/BOOT1");
|
|
||||||
|
|
||||||
bool multipart = false;
|
bool multipart = false;
|
||||||
s_printf(path2, "%s/rawnand.bin", path);
|
s_printf(backup_file_path, "%s/rawnand.bin", backup_path);
|
||||||
|
|
||||||
if(f_stat(path2, NULL))
|
if(f_stat(backup_file_path, NULL))
|
||||||
multipart = true;
|
multipart = true;
|
||||||
|
|
||||||
if (!multipart)
|
if (!multipart)
|
||||||
f_rename(path2, "emuMMC/BK00/eMMC/00");
|
{
|
||||||
|
strcpy(emu_path + base_len, "/eMMC/00");
|
||||||
|
f_rename(backup_file_path, emu_path);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
emu_path[base_len] = 0;
|
||||||
for (int i = 0; i < 32; i++)
|
for (int i = 0; i < 32; i++)
|
||||||
{
|
{
|
||||||
s_printf(path2, "%s/rawnand.bin.%02d", path, i);
|
s_printf(backup_file_path, "%s/rawnand.bin.%02d", backup_path, i);
|
||||||
s_printf(path3, "emuMMC/BK00/eMMC/%02d", i);
|
s_printf(parts_path, "%s/eMMC/%02d", emu_path, i);
|
||||||
if (f_rename(path2, path3))
|
if (f_rename(backup_file_path, parts_path))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
free(path);
|
free(emu_path);
|
||||||
free(path2);
|
free(parts_path);
|
||||||
free(path3);
|
free(backup_path);
|
||||||
|
free(backup_file_path);
|
||||||
|
|
||||||
save_emummc_cfg(0, 0, "emuMMC/BK00");
|
save_emummc_cfg(0, 0, "emuMMC/BK00");
|
||||||
sd_unmount();
|
sd_unmount();
|
||||||
|
|
Loading…
Reference in a new issue