]> glassweightruler.freedombox.rocks Git - Ventoy.git/blobdiff - LinuxGUI/Ventoy2Disk/Web/ventoy_http.c
Fix a bug for Linux GUI program when update from old release. (#1590)
[Ventoy.git] / LinuxGUI / Ventoy2Disk / Web / ventoy_http.c
index 31131578f74c6b3d581dddddb62fe8a54de9b3b3..8344b05d8577da418350ff031aedb9d7e2819422 100644 (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)
 {
     int fd;
+    int updateMBR;
     ssize_t len;
     off_t offset;
     MBR_HEAD MBR;
@@ -742,17 +743,32 @@ static void * ventoy_update_thread(void *data)
     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;