mirror of
https://github.com/CTCaer/hekate.git
synced 2024-11-23 02:16:41 +00:00
nyx: make hybrid mbr fixer smarter
Allow usage of FatFS simple gpt parsing for setting the fat partition in case its label is not hos_data. Additionally allow hos_data partition to not be the first one.
This commit is contained in:
parent
6981c59de3
commit
f66ddca100
1 changed files with 21 additions and 8 deletions
|
@ -2077,7 +2077,6 @@ static lv_res_t _action_fix_mbr(lv_obj_t *btn)
|
||||||
part->index = i;
|
part->index = i;
|
||||||
part->lba_start = gpt->entries[i].lba_start;
|
part->lba_start = gpt->entries[i].lba_start;
|
||||||
part->lba_end = gpt->entries[i].lba_end;
|
part->lba_end = gpt->entries[i].lba_end;
|
||||||
part->attrs = gpt.entries[i].attrs;
|
|
||||||
|
|
||||||
// ASCII conversion. Copy only the LSByte of the UTF-16LE name.
|
// ASCII conversion. Copy only the LSByte of the UTF-16LE name.
|
||||||
for (u32 j = 0; j < 36; j++)
|
for (u32 j = 0; j < 36; j++)
|
||||||
|
@ -2088,16 +2087,29 @@ static lv_res_t _action_fix_mbr(lv_obj_t *btn)
|
||||||
}
|
}
|
||||||
free(gpt);
|
free(gpt);
|
||||||
|
|
||||||
u32 mbr_idx = 0;
|
// Set FAT and emuMMC partitions.
|
||||||
|
u32 mbr_idx = 1;
|
||||||
|
bool found_hos_data = false;
|
||||||
LIST_FOREACH_ENTRY(emmc_part_t, part, &gpt_parsed, link)
|
LIST_FOREACH_ENTRY(emmc_part_t, part, &gpt_parsed, link)
|
||||||
{
|
{
|
||||||
if (!strcmp(part->name, "hos_data"))
|
// FatFS simple GPT found a fat partition, set it.
|
||||||
|
if (sd_fs.part_type && !part->index)
|
||||||
{
|
{
|
||||||
mbr[1].partitions[mbr_idx].type = sd_fs.fs_type == FS_EXFAT ? 0x7 : 0xC;
|
mbr[1].partitions[0].type = sd_fs.fs_type == FS_EXFAT ? 0x7 : 0xC;
|
||||||
mbr[1].partitions[mbr_idx].start_sct = part->lba_start;
|
mbr[1].partitions[0].start_sct = part->lba_start;
|
||||||
mbr[1].partitions[mbr_idx].size_sct = (part->lba_end - part->lba_start + 1);
|
mbr[1].partitions[0].size_sct = (part->lba_end - part->lba_start + 1);
|
||||||
mbr_idx++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FatFS simple GPT didn't find a fat partition as the first one.
|
||||||
|
if (!sd_fs.part_type && !found_hos_data && !strcmp(part->name, "hos_data"))
|
||||||
|
{
|
||||||
|
mbr[1].partitions[0].type = 0xC;
|
||||||
|
mbr[1].partitions[0].start_sct = part->lba_start;
|
||||||
|
mbr[1].partitions[0].size_sct = (part->lba_end - part->lba_start + 1);
|
||||||
|
found_hos_data = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set up to max 2 emuMMC partitions.
|
||||||
if (!strcmp(part->name, "emummc") || !strcmp(part->name, "emummc2"))
|
if (!strcmp(part->name, "emummc") || !strcmp(part->name, "emummc2"))
|
||||||
{
|
{
|
||||||
mbr[1].partitions[mbr_idx].type = 0xE0;
|
mbr[1].partitions[mbr_idx].type = 0xE0;
|
||||||
|
@ -2106,7 +2118,8 @@ static lv_res_t _action_fix_mbr(lv_obj_t *btn)
|
||||||
mbr_idx++;
|
mbr_idx++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mbr_idx > 2)
|
// Total reached last slot.
|
||||||
|
if (mbr_idx >= 3)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue