]> glassweightruler.freedombox.rocks Git - Ventoy.git/blobdiff - vtoygpt/vtoygpt.c
Only for VirtualBox.
[Ventoy.git] / vtoygpt / vtoygpt.c
index f9c953a2af968906210d75de9d73af7e95abd736..97e4f0f84578dbe13d7bbc2ea71ed4ad5b5ab0a4 100644 (file)
@@ -244,7 +244,7 @@ int DumpGptInfo(VTOY_GPT_INFO *pGptInfo)
     return 0;
 }
 
-#define VENTOY_EFI_PART_ATTR   0x8000000000000001ULL
+#define VENTOY_EFI_PART_ATTR   0x8000000000000000ULL
 
 int main(int argc, const char **argv)
 {
@@ -291,23 +291,26 @@ int main(int argc, const char **argv)
         Name = pMainGptInfo->PartTbl[1].Name;
         if (Name[0] == 'V' && Name[1] == 'T' && Name[2] == 'O' && Name[3] == 'Y')
         {
-            pMainGptInfo->PartTbl[1].Attr = VENTOY_EFI_PART_ATTR;
-            pMainGptInfo->Head.PartTblCrc = VtoyCrc32(pMainGptInfo->PartTbl, sizeof(pMainGptInfo->PartTbl));
-            pMainGptInfo->Head.Crc = 0;
-            pMainGptInfo->Head.Crc = VtoyCrc32(&pMainGptInfo->Head, pMainGptInfo->Head.Length);
-
-            pBackGptInfo->PartTbl[1].Attr = VENTOY_EFI_PART_ATTR;
-            pBackGptInfo->Head.PartTblCrc = VtoyCrc32(pBackGptInfo->PartTbl, sizeof(pBackGptInfo->PartTbl));
-            pBackGptInfo->Head.Crc = 0;
-            pBackGptInfo->Head.Crc = VtoyCrc32(&pBackGptInfo->Head, pBackGptInfo->Head.Length);
-
-            lseek(fd, 512, SEEK_SET);
-            write(fd, (UINT8 *)pMainGptInfo + 512, sizeof(VTOY_GPT_INFO) - 512);
-
-            lseek(fd, DiskSize - 33 * 512, SEEK_SET);
-            write(fd, pBackGptInfo, sizeof(VTOY_BK_GPT_INFO));
-
-            fsync(fd);
+            if (pMainGptInfo->PartTbl[1].Attr != VENTOY_EFI_PART_ATTR)
+            {                
+                pMainGptInfo->PartTbl[1].Attr = VENTOY_EFI_PART_ATTR;
+                pMainGptInfo->Head.PartTblCrc = VtoyCrc32(pMainGptInfo->PartTbl, sizeof(pMainGptInfo->PartTbl));
+                pMainGptInfo->Head.Crc = 0;
+                pMainGptInfo->Head.Crc = VtoyCrc32(&pMainGptInfo->Head, pMainGptInfo->Head.Length);
+
+                pBackGptInfo->PartTbl[1].Attr = VENTOY_EFI_PART_ATTR;
+                pBackGptInfo->Head.PartTblCrc = VtoyCrc32(pBackGptInfo->PartTbl, sizeof(pBackGptInfo->PartTbl));
+                pBackGptInfo->Head.Crc = 0;
+                pBackGptInfo->Head.Crc = VtoyCrc32(&pBackGptInfo->Head, pBackGptInfo->Head.Length);
+
+                lseek(fd, 512, SEEK_SET);
+                write(fd, (UINT8 *)pMainGptInfo + 512, sizeof(VTOY_GPT_INFO) - 512);
+
+                lseek(fd, DiskSize - 33 * 512, SEEK_SET);
+                write(fd, pBackGptInfo, sizeof(VTOY_BK_GPT_INFO));
+
+                fsync(fd);
+            }
         }
     }