MCPcopy Create free account
hub / github.com/LongSoft/UEFITool / parseBios

Method parseBios

ffsengine.cpp:784–912  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

782}
783
784UINT8 FfsEngine::parseBios(const QByteArray & bios, const QModelIndex & parent)
785{
786 // Search for first volume
787 UINT32 prevVolumeOffset;
788 UINT8 result;
789
790 result = findNextVolume(bios, 0, prevVolumeOffset);
791 if (result)
792 return result;
793
794 // First volume is not at the beginning of BIOS space
795 QString name;
796 QString info;
797 if (prevVolumeOffset > 0) {
798 // Get info
799 QByteArray padding = bios.left(prevVolumeOffset);
800 name = tr("Padding");
801 info = tr("Full size: %1h (%2)")
802 .hexarg(padding.size()).arg(padding.size());
803
804 // Add tree item
805 model->addItem(Types::Padding, getPaddingType(padding), COMPRESSION_ALGORITHM_NONE, name, "", info, QByteArray(), padding, parent);
806 }
807
808 // Search for and parse all volumes
809 UINT32 volumeOffset = prevVolumeOffset;
810 UINT32 prevVolumeSize = 0;
811 UINT32 volumeSize = 0;
812 UINT32 bmVolumeSize = 0;
813
814 while (true)
815 {
816 bool msgAlignmentBitsSet = false;
817 bool msgUnaligned = false;
818 bool msgUnknownRevision = false;
819 bool msgSizeMismach = false;
820
821 // Padding between volumes
822 if (volumeOffset > prevVolumeOffset + prevVolumeSize) {
823 UINT32 paddingSize = volumeOffset - prevVolumeOffset - prevVolumeSize;
824 QByteArray padding = bios.mid(prevVolumeOffset + prevVolumeSize, paddingSize);
825 // Get info
826 name = tr("Padding");
827 info = tr("Full size: %1h (%2)")
828 .hexarg(padding.size()).arg(padding.size());
829 // Add tree item
830 model->addItem(Types::Padding, getPaddingType(padding), COMPRESSION_ALGORITHM_NONE, name, "", info, QByteArray(), padding, parent);
831 }
832
833 // Get volume size
834 result = getVolumeSize(bios, volumeOffset, volumeSize, bmVolumeSize);
835 if (result) {
836 msg(tr("parseBios: getVolumeSize failed with error \"%1\"").arg(errorMessage(result)), parent);
837 return result;
838 }
839
840 // Check that volume is fully present in input
841 if (volumeSize > (UINT32)bios.size() || volumeOffset + volumeSize > (UINT32)bios.size()) {

Callers

nothing calls this directly

Calls 2

errorMessageFunction · 0.85
addItemMethod · 0.80

Tested by

no test coverage detected