static void * ventoy_update_thread(void *data)
{
int fd;
+ int updateMBR;
ssize_t len;
off_t offset;
MBR_HEAD MBR;
len = write(fd, disk->vtoydata.rsvdata, sizeof(disk->vtoydata.rsvdata));
vlog("Writing reserve data offset:%llu len:%llu ...\n", (_ull)offset, (_ull)len);
+ updateMBR = 0;
memcpy(&MBR, &(disk->vtoydata.gptinfo.MBR), 512);
+
if (disk->vtoydata.partition_style == 0 && MBR.PartTbl[0].Active == 0)
{
MBR.PartTbl[0].Active = 0x80;
MBR.PartTbl[1].Active = 0;
MBR.PartTbl[2].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);
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;