Fix a bug for Linux GUI program when update from old release. (#1590)

This commit is contained in:
longpanda 2022-04-26 14:49:07 +08:00
parent 480afee1a7
commit 9e2e4ec0a9
15 changed files with 18 additions and 2 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -685,6 +685,7 @@ static int ventoy_write_gpt_part_table(int fd, uint64_t disksize, VTOY_GPT_INFO
static void * ventoy_update_thread(void *data) static void * ventoy_update_thread(void *data)
{ {
int fd; int fd;
int updateMBR;
ssize_t len; ssize_t len;
off_t offset; off_t offset;
MBR_HEAD MBR; MBR_HEAD MBR;
@ -742,17 +743,32 @@ static void * ventoy_update_thread(void *data)
len = write(fd, disk->vtoydata.rsvdata, sizeof(disk->vtoydata.rsvdata)); len = write(fd, disk->vtoydata.rsvdata, sizeof(disk->vtoydata.rsvdata));
vlog("Writing reserve data offset:%llu len:%llu ...\n", (_ull)offset, (_ull)len); vlog("Writing reserve data offset:%llu len:%llu ...\n", (_ull)offset, (_ull)len);
updateMBR = 0;
memcpy(&MBR, &(disk->vtoydata.gptinfo.MBR), 512); memcpy(&MBR, &(disk->vtoydata.gptinfo.MBR), 512);
if (disk->vtoydata.partition_style == 0 && MBR.PartTbl[0].Active == 0) if (disk->vtoydata.partition_style == 0 && MBR.PartTbl[0].Active == 0)
{ {
MBR.PartTbl[0].Active = 0x80; MBR.PartTbl[0].Active = 0x80;
MBR.PartTbl[1].Active = 0; MBR.PartTbl[1].Active = 0;
MBR.PartTbl[2].Active = 0; MBR.PartTbl[2].Active = 0;
MBR.PartTbl[3].Active = 0; MBR.PartTbl[3].Active = 0;
updateMBR = 1;
vlog("set MBR partition 1 active flag enabled\n");
}
if (MBR.BootCode[0x190] != 0x56 || MBR.BootCode[0x191] != 0x54)
{
vlog("set VT data %02x %02x\n", MBR.BootCode[0x190], MBR.BootCode[0x191]);
MBR.BootCode[0x190] = 0x56;
MBR.BootCode[0x191] = 0x54;
updateMBR = 1;
}
if (updateMBR)
{
offset = lseek(fd, 0, SEEK_SET); offset = lseek(fd, 0, SEEK_SET);
len = write(fd, &MBR, 512); len = write(fd, &MBR, 512);
vlog("set MBR partition 1 active flag enabled offset:%llu len:%llu\n", (_ull)offset, (_ull)len); vlog("update MBR offset:%llu len:%llu\n", (_ull)offset, (_ull)len);
} }
g_current_progress = PT_SYNC_DATA1; g_current_progress = PT_SYNC_DATA1;