Changeset 55906 in vbox
- Timestamp:
- May 18, 2015 12:23:31 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VBoxManage/VBoxInternalManage.cpp
r55020 r55906 761 761 762 762 rc = RTFileReadAt(File, 0, &aBuffer, sizeof(aBuffer), NULL); 763 764 763 if (RT_FAILURE(rc)) 765 764 return rc; … … 777 776 { 778 777 const char* l_ppth = (char*)partitionTableHeader; 779 rc = strncmp(l_ppth, "EFI PART", 8); 780 if (RT_FAILURE(rc)) 778 if (strncmp(l_ppth, "EFI PART", 8)) 781 779 return VERR_INVALID_PARAMETER; 782 780 … … 813 811 814 812 uint32_t currentEntry = 0; 815 while(currentEntry<partitionsNumber) 816 { 817 uint8_t partitionEntry[128]; 818 819 /*partition entries begin from LBA2*/ 820 rc = RTFileReadAt(File, 1024 + currentEntry*partitionEntrySize, &partitionEntry, partitionEntrySize, NULL); 821 822 uint64_t start = RT_MAKE_U64_FROM_U8( partitionEntry[32], 823 partitionEntry[33], 824 partitionEntry[34], 825 partitionEntry[35], 826 partitionEntry[36], 827 partitionEntry[37], 828 partitionEntry[38], 829 partitionEntry[39] 830 ); 831 uint64_t end = RT_MAKE_U64_FROM_U8( partitionEntry[40], 832 partitionEntry[41], 833 partitionEntry[42], 834 partitionEntry[43], 835 partitionEntry[44], 836 partitionEntry[45], 837 partitionEntry[46], 838 partitionEntry[47] 839 ); 813 814 if (partitionEntrySize * partitionsNumber > 4 * _1M) 815 { 816 RTMsgError("The GPT header seems corrupt because it contains too many entries"); 817 return VERR_INVALID_PARAMETER; 818 } 819 820 uint8_t *pbPartTable = (uint8_t *)RTMemAllocZ(RT_ALIGN_Z(partitionEntrySize * partitionsNumber, 512)); 821 if (!pbPartTable) 822 { 823 RTMsgError("Allocating memory for the GPT partitions entries failed"); 824 return VERR_NO_MEMORY; 825 } 826 827 /* partition entries begin from LBA2 */ 828 /** @todo r=aeichner: Reading from LBA 2 is not always correct, the header will contain the starting LBA. */ 829 rc = RTFileReadAt(File, 1024, pbPartTable, RT_ALIGN_Z(partitionEntrySize * partitionsNumber, 512), NULL); 830 if (RT_FAILURE(rc)) 831 { 832 RTMsgError("Reading the partition table failed"); 833 RTMemFree(pbPartTable); 834 return rc; 835 } 836 837 while (currentEntry < partitionsNumber) 838 { 839 uint8_t *partitionEntry = pbPartTable + currentEntry * partitionEntrySize; 840 841 uint64_t start = RT_MAKE_U64_FROM_U8(partitionEntry[32], partitionEntry[33], partitionEntry[34], partitionEntry[35], 842 partitionEntry[36], partitionEntry[37], partitionEntry[38], partitionEntry[39]); 843 uint64_t end = RT_MAKE_U64_FROM_U8(partitionEntry[40], partitionEntry[41], partitionEntry[42], partitionEntry[43], 844 partitionEntry[44], partitionEntry[45], partitionEntry[46], partitionEntry[47]); 840 845 841 846 PHOSTPARTITION pCP = &pPart->aPartitions[pPart->cPartitions++]; … … 864 869 ++currentEntry; 865 870 } 871 872 RTMemFree(pbPartTable); 866 873 } 867 874 }
Note:
See TracChangeset
for help on using the changeset viewer.

