diff --git a/.gitignore b/.gitignore index 0281ad4..1f89459 100644 --- a/.gitignore +++ b/.gitignore @@ -248,3 +248,5 @@ DerivedData compile_commands.json CMakeScripts UEFITool/qrc_uefitool.cpp +XcodeQT5 +XcodeQT6 diff --git a/UEFITool/ffsfinder.cpp b/UEFITool/ffsfinder.cpp index ceb4a06..19b9653 100644 --- a/UEFITool/ffsfinder.cpp +++ b/UEFITool/ffsfinder.cpp @@ -29,7 +29,12 @@ USTATUS FfsFinder::findHexPattern(const UModelIndex & index, const UByteArray & bool hasChildren = (model->rowCount(index) > 0); for (int i = 0; i < model->rowCount(index); i++) { +#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5) findHexPattern(index.child(i, index.column()), hexPattern, mode); +#else + findHexPattern(index.model()->index(i, index.column(), index), hexPattern, mode); +#endif + } UByteArray data; @@ -49,9 +54,22 @@ USTATUS FfsFinder::findHexPattern(const UModelIndex & index, const UByteArray & } UString hexBody = UString(data.toHex()); +#if QT_VERSION_MAJOR >= 6 + QRegularExpression regexp = QRegularExpression(UString(hexPattern)); + regexp.setPatternOptions((QRegularExpression::PatternOptions)0x1); + QRegularExpressionMatch regexpmatch; + + INT32 offset = 0; + while ((offset = (INT32)hexBody.indexOf(regexp, (qsizetype)offset, ®expmatch)) != -1) + { +#else QRegExp regexp = QRegExp(UString(hexPattern), Qt::CaseInsensitive); + INT32 offset = regexp.indexIn(hexBody); + while (offset >= 0) { +#endif + if (offset % 2 == 0) { // For patterns that cross header|body boundary, skip patterns entirely located in body, since // children search above has already found them. @@ -64,7 +82,12 @@ USTATUS FfsFinder::findHexPattern(const UModelIndex & index, const UByteArray & index); } } + +#if QT_VERSION_MAJOR >= 6 + offset += 1; +#else offset = regexp.indexIn(hexBody, offset + 1); +#endif } return U_SUCCESS; @@ -80,7 +103,11 @@ USTATUS FfsFinder::findGuidPattern(const UModelIndex & index, const UByteArray & bool hasChildren = (model->rowCount(index) > 0); for (int i = 0; i < model->rowCount(index); i++) { +#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5) findGuidPattern(index.child(i, index.column()), guidPattern, mode); +#else + findGuidPattern(index.model()->index(i, index.column(), index), guidPattern, mode); +#endif } UByteArray data; @@ -121,8 +148,19 @@ USTATUS FfsFinder::findGuidPattern(const UModelIndex & index, const UByteArray & if (hexPattern.count('.') == hexPattern.length()) return U_SUCCESS; +#if QT_VERSION_MAJOR >= 6 + QRegularExpression regexp((QString)UString(hexPattern)); + regexp.setPatternOptions((QRegularExpression::PatternOptions)0x1); + QRegularExpressionMatch regexpmatch; + + INT32 offset = 0; + offset = (INT32)hexBody.indexOf(regexp, (qsizetype)offset, ®expmatch); +#else QRegExp regexp(UString(hexPattern), Qt::CaseInsensitive); + INT32 offset = regexp.indexIn(hexBody); +#endif + while (offset >= 0) { if (offset % 2 == 0) { msg(UString("GUID pattern \"") + UString(guidPattern) @@ -132,7 +170,12 @@ USTATUS FfsFinder::findGuidPattern(const UModelIndex & index, const UByteArray & + usprintf(" at %s-offset %02Xh", mode == SEARCH_MODE_BODY ? "body" : "header", offset / 2), index); } + +#if QT_VERSION_MAJOR >= 6 + offset = (INT32)hexBody.indexOf(regexp, (qsizetype)offset + 1, ®expmatch); +#else offset = regexp.indexIn(hexBody, offset + 1); +#endif } return U_SUCCESS; @@ -148,7 +191,11 @@ USTATUS FfsFinder::findTextPattern(const UModelIndex & index, const UString & pa bool hasChildren = (model->rowCount(index) > 0); for (int i = 0; i < model->rowCount(index); i++) { +#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5) findTextPattern(index.child(i, index.column()), pattern, mode, unicode, caseSensitive); +#else + findTextPattern(index.model()->index(i, index.column(), index), pattern, mode, unicode, caseSensitive); +#endif } UByteArray body; @@ -167,12 +214,16 @@ USTATUS FfsFinder::findTextPattern(const UModelIndex & index, const UString & pa UString data; if (unicode) - data = UString::fromUtf16((const ushort*)body.constData(), body.length() / 2); +#if QT_VERSION_MAJOR >= 6 + data = UString::fromUtf16((const char16_t*)body.constData(), (int)(body.length() / 2)); +#else + data = UString::fromUtf16((const ushort*)body.constData(), (int)(body.length() / 2)); +#endif else data = UString::fromLatin1((const char*)body.constData(), body.length()); int offset = -1; - while ((offset = data.indexOf(pattern, offset + 1, caseSensitive)) >= 0) { + while ((offset = (int)data.indexOf(pattern, (int)(offset + 1), caseSensitive)) >= 0) { msg((unicode ? UString("Unicode") : UString("ASCII")) + UString(" text \"") + UString(pattern) + UString("\" in ") + model->name(model->parent(index)) diff --git a/UEFITool/ffsfinder.h b/UEFITool/ffsfinder.h index b88866b..652cc76 100644 --- a/UEFITool/ffsfinder.h +++ b/UEFITool/ffsfinder.h @@ -15,7 +15,12 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #define FFSFINDER_H #include + +#if QT_VERSION_MAJOR >= 6 +#include +#else #include +#endif #include "../common/ubytearray.h" #include "../common/ustring.h" diff --git a/UEFITool/hexspinbox.cpp b/UEFITool/hexspinbox.cpp index bb409b8..587ce30 100644 --- a/UEFITool/hexspinbox.cpp +++ b/UEFITool/hexspinbox.cpp @@ -15,7 +15,11 @@ #include HexSpinBox::HexSpinBox(QWidget *parent) : +#if QT_VERSION_MAJOR >= 6 +QSpinBox(parent), validator(QRegularExpression("0x([0-9a-fA-F]){1,8}")) +#else QSpinBox(parent), validator(QRegExp("0x([0-9a-fA-F]){1,8}")) +#endif { this->setRange(INT_MIN, INT_MAX); this->setPrefix("0x"); diff --git a/UEFITool/hexspinbox.h b/UEFITool/hexspinbox.h index 1304e88..51a4180 100644 --- a/UEFITool/hexspinbox.h +++ b/UEFITool/hexspinbox.h @@ -15,7 +15,12 @@ #define HEXSPINBOX_H #include + +#if QT_VERSION_MAJOR >= 6 +#include +#else #include +#endif class HexSpinBox : public QSpinBox { @@ -30,7 +35,11 @@ protected: QString textFromValue(int value) const; private: +#if QT_VERSION_MAJOR >= 6 + QRegularExpressionValidator validator; +#else QRegExpValidator validator; +#endif }; #endif // HEXSPINBOX_H diff --git a/UEFITool/icons/uefitool.icns b/UEFITool/icons/uefitool.icns index a332b70..5bd61f4 100644 Binary files a/UEFITool/icons/uefitool.icns and b/UEFITool/icons/uefitool.icns differ diff --git a/UEFITool/qhexedit2/chunks.cpp b/UEFITool/qhexedit2/chunks.cpp index a4e420b..80d3d86 100644 --- a/UEFITool/qhexedit2/chunks.cpp +++ b/UEFITool/qhexedit2/chunks.cpp @@ -95,11 +95,11 @@ QByteArray Chunks::data(qint64 pos, qint64 maxSize, QByteArray *highlighted) count = maxSize; if (count > 0) { - buffer += chunk.data.mid(chunkOfs, (int)count); + buffer += chunk.data.mid((int)chunkOfs, (int)count); maxSize -= count; pos += count; if (highlighted) - *highlighted += chunk.dataChanged.mid(chunkOfs, (int)count); + *highlighted += chunk.dataChanged.mid((int)chunkOfs, (int)count); } } } @@ -176,7 +176,7 @@ qint64 Chunks::indexOf(const QByteArray &ba, qint64 from) for (qint64 pos=from; (pos < _size) && (result < 0); pos += BUFFER_SIZE) { buffer = data(pos, BUFFER_SIZE + ba.size() - 1); - int findPos = buffer.indexOf(ba); + int findPos = (int)buffer.indexOf(ba); if (findPos >= 0) result = pos + (qint64)findPos; } @@ -194,7 +194,7 @@ qint64 Chunks::lastIndexOf(const QByteArray &ba, qint64 from) if (sPos < 0) sPos = 0; buffer = data(sPos, pos - sPos); - int findPos = buffer.lastIndexOf(ba); + int findPos = (int)buffer.lastIndexOf(ba); if (findPos >= 0) result = sPos + (qint64)findPos; } @@ -214,8 +214,8 @@ bool Chunks::insert(qint64 pos, char b) else chunkIdx = getChunkIndex(pos); qint64 posInBa = pos - _chunks[chunkIdx].absPos; - _chunks[chunkIdx].data.insert(posInBa, b); - _chunks[chunkIdx].dataChanged.insert(posInBa, char(1)); + _chunks[chunkIdx].data.insert((int)posInBa, b); + _chunks[chunkIdx].dataChanged.insert((int)posInBa, char(1)); for (int idx=chunkIdx+1; idx < _chunks.size(); idx++) _chunks[idx].absPos += 1; _size += 1; @@ -241,8 +241,8 @@ bool Chunks::removeAt(qint64 pos) return false; int chunkIdx = getChunkIndex(pos); qint64 posInBa = pos - _chunks[chunkIdx].absPos; - _chunks[chunkIdx].data.remove(posInBa, 1); - _chunks[chunkIdx].dataChanged.remove(posInBa, 1); + _chunks[chunkIdx].data.remove((int)posInBa, 1); + _chunks[chunkIdx].dataChanged.remove((int)posInBa, 1); for (int idx=chunkIdx+1; idx < _chunks.size(); idx++) _chunks[idx].absPos -= 1; _size -= 1; diff --git a/UEFITool/qhexedit2/qhexedit.cpp b/UEFITool/qhexedit2/qhexedit.cpp index 9ce21a0..bc1612a 100644 --- a/UEFITool/qhexedit2/qhexedit.cpp +++ b/UEFITool/qhexedit2/qhexedit.cpp @@ -408,7 +408,13 @@ QString QHexEdit::selectionToReadableString() void QHexEdit::setFont(const QFont &font) { QWidget::setFont(font); + +#if ((QT_VERSION_MINOR >= 11) && (QT_VERSION_MAJOR == 5)) || (QT_VERSION_MAJOR >= 6) + _pxCharWidth = fontMetrics().horizontalAdvance('2'); +#else _pxCharWidth = fontMetrics().width(QLatin1Char('2')); +#endif + _pxCharHeight = fontMetrics().height(); _pxGapAdr = _pxCharWidth / 2; _pxGapAdrHex = _pxCharWidth; @@ -573,7 +579,7 @@ void QHexEdit::keyPressEvent(QKeyEvent *event) { QByteArray ba = _chunks->data(getSelectionBegin(), getSelectionEnd() - getSelectionBegin()).toHex(); for (qint64 idx = 32; idx < ba.size(); idx +=33) - ba.insert(idx, "\n"); + ba.insert((int)idx, "\n"); QClipboard *clipboard = QApplication::clipboard(); clipboard->setText(ba); if (_overwriteMode) @@ -596,7 +602,7 @@ void QHexEdit::keyPressEvent(QKeyEvent *event) QByteArray ba = QByteArray().fromHex(clipboard->text().toLatin1()); if (_overwriteMode) { - ba = ba.left(std::min(ba.size(), (_chunks->size() - _bPosCurrent))); + ba = ba.left((int)std::min(ba.size(), (_chunks->size() - _bPosCurrent))); replace(_bPosCurrent, ba.size(), ba); } else @@ -746,7 +752,7 @@ void QHexEdit::keyPressEvent(QKeyEvent *event) { QByteArray ba = _chunks->data(getSelectionBegin(), getSelectionEnd() - getSelectionBegin()).toHex(); for (qint64 idx = 32; idx < ba.size(); idx += 33) - ba.insert(idx, "\n"); + ba.insert((int)idx, "\n"); if(_upperCase) ba = ba.toUpper(); QClipboard *clipboard = QApplication::clipboard(); @@ -875,7 +881,7 @@ void QHexEdit::paintEvent(QPaintEvent *event) else r.setRect(pxPosX - _pxCharWidth, pxPosY - _pxCharHeight + _pxSelectionSub, 3*_pxCharWidth, _pxCharHeight); painter.fillRect(r, c); - hex = _hexDataShown.mid((bPosLine + colIdx) * 2, 2); + hex = _hexDataShown.mid((int)((bPosLine + colIdx) * 2), 2); // upper or lower case if (_upperCase) @@ -887,7 +893,7 @@ void QHexEdit::paintEvent(QPaintEvent *event) // render ascii value if (_asciiArea) { - int ch = (uchar)_dataShown.at(bPosLine + colIdx); + int ch = (uchar)_dataShown.at((int)(bPosLine + colIdx)); if ( ch < 0x20 ) ch = '.'; r.setRect(pxPosAsciiX2, pxPosY - _pxCharHeight + _pxSelectionSub, _pxCharWidth, _pxCharHeight); @@ -977,12 +983,12 @@ void QHexEdit::setSelection(qint64 pos) int QHexEdit::getSelectionBegin() { - return _bSelectionBegin; + return (int)_bSelectionBegin; } int QHexEdit::getSelectionEnd() { - return _bSelectionEnd; + return (int)_bSelectionEnd; } // ********************************************************************** Private utility functions diff --git a/UEFITool/searchdialog.cpp b/UEFITool/searchdialog.cpp index 74f37b9..a0f74df 100644 --- a/UEFITool/searchdialog.cpp +++ b/UEFITool/searchdialog.cpp @@ -16,8 +16,13 @@ SearchDialog::SearchDialog(QWidget *parent) : QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint), ui(new Ui::SearchDialog), +#if QT_VERSION_MAJOR >= 6 +hexValidator(QRegularExpression("([0-9a-fA-F\\. ])*")), +guidValidator(QRegularExpression("[0-9a-fA-F\\.]{8}-[0-9a-fA-F\\.]{4}-[0-9a-fA-F\\.]{4}-[0-9a-fA-F\\.]{4}-[0-9a-fA-F\\.]{12}")) +#else hexValidator(QRegExp("([0-9a-fA-F\\. ])*")), guidValidator(QRegExp("[0-9a-fA-F\\.]{8}-[0-9a-fA-F\\.]{4}-[0-9a-fA-F\\.]{4}-[0-9a-fA-F\\.]{4}-[0-9a-fA-F\\.]{12}")) +#endif { // Create UI ui->setupUi(this); @@ -46,4 +51,4 @@ void SearchDialog::setEditFocus(int index) } else if (index == 2) // Text ui->textEdit->setFocus(); -} \ No newline at end of file +} diff --git a/UEFITool/searchdialog.h b/UEFITool/searchdialog.h index 56a673c..6698506 100644 --- a/UEFITool/searchdialog.h +++ b/UEFITool/searchdialog.h @@ -15,7 +15,13 @@ #define SEARCHDIALOG_H #include + +#if QT_VERSION_MAJOR >= 6 +#include +#else #include +#endif + #include "ui_searchdialog.h" class SearchDialog : public QDialog @@ -31,8 +37,13 @@ private slots: void setEditFocus(int index); private: +#if QT_VERSION_MAJOR >= 6 + QRegularExpressionValidator hexValidator; + QRegularExpressionValidator guidValidator; +#else QRegExpValidator hexValidator; QRegExpValidator guidValidator; +#endif }; #endif // SEARCHDIALOG_H diff --git a/UEFITool/uefitool.cpp b/UEFITool/uefitool.cpp index ec22558..0f35f56 100644 --- a/UEFITool/uefitool.cpp +++ b/UEFITool/uefitool.cpp @@ -390,7 +390,12 @@ void UEFITool::goToData() } for (int j = i + 1; j < model->rowCount(parent); j++) { +#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5) QModelIndex currentIndex = parent.child(j, 0); +#else + QModelIndex currentIndex = parent.model()->index(j, 0, parent); +#endif + if (model->hasEmptyParsingData(currentIndex)) continue; @@ -788,8 +793,14 @@ void UEFITool::showParserMessages() return; std::vector > messages = ffsParser->getMessages(); + +#if QT_VERSION_MAJOR < 6 std::pair msg; + foreach (msg, messages) { +#else + for (const auto &msg : messages) { +#endif QListWidgetItem* item = new QListWidgetItem(msg.first, NULL, 0); item->setData(Qt::UserRole, QByteArray((const char*)&msg.second, sizeof(msg.second))); ui->parserMessagesListWidget->addItem(item); @@ -806,8 +817,14 @@ void UEFITool::showFinderMessages() return; std::vector > messages = ffsFinder->getMessages(); + +#if QT_VERSION_MAJOR < 6 std::pair msg; + foreach (msg, messages) { +#else + for (const auto &msg : messages) { +#endif QListWidgetItem* item = new QListWidgetItem(msg.first, NULL, 0); item->setData(Qt::UserRole, QByteArray((const char*)&msg.second, sizeof(msg.second)));; ui->finderMessagesListWidget->addItem(item); @@ -825,8 +842,14 @@ void UEFITool::showBuilderMessages() return; std::vector > messages = ffsBuilder->getMessages(); + +#if QT_VERSION_MAJOR < 6 std::pair msg; + foreach (msg, messages) { +#else + for (const auto &msg : messages) { +#endif QListWidgetItem* item = new QListWidgetItem(msg.first, NULL, 0); item->setData(Qt::UserRole, QByteArray((const char*)&msg.second, sizeof(msg.second))); ui->builderMessagesListWidget->addItem(item); diff --git a/UEFITool/uefitool.entitlements b/UEFITool/uefitool.entitlements new file mode 100644 index 0000000..6b54693 --- /dev/null +++ b/UEFITool/uefitool.entitlements @@ -0,0 +1,20 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.assets.movies.read-write + + com.apple.security.assets.music.read-write + + com.apple.security.assets.pictures.read-write + + com.apple.security.files.downloads.read-write + + com.apple.security.files.user-selected.read-write + + com.apple.security.print + + + diff --git a/common/bstrlib/bstrwrap.cpp b/common/bstrlib/bstrwrap.cpp index e1673fd..1f119ce 100644 --- a/common/bstrlib/bstrwrap.cpp +++ b/common/bstrlib/bstrwrap.cpp @@ -697,9 +697,9 @@ int CBString::find (const CBString& b, int pos) const { int CBString::find (const char * b, int pos) const { int ii, j; unsigned char c0; -register int i, l; -register unsigned char cx; -register unsigned char * pdata; +int i, l; +unsigned char cx; +unsigned char * pdata; if (NULL == b) { #ifdef BSTRLIB_THROWS_EXCEPTIONS diff --git a/common/ffsbuilder.cpp b/common/ffsbuilder.cpp index d61fb45..b74e23c 100644 --- a/common/ffsbuilder.cpp +++ b/common/ffsbuilder.cpp @@ -90,9 +90,14 @@ USTATUS FfsBuilder::buildCapsule(const UModelIndex & index, UByteArray & capsule msg(usprintf("buildCapsule: building of capsules with %d items is not yet supported", model->rowCount(index)), index); return U_NOT_IMPLEMENTED; } - + // Build image +#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5) UModelIndex imageIndex = index.child(0, 0); +#else + UModelIndex imageIndex = index.model()->index(0, 0, index); +#endif + UByteArray imageData; // Check image type @@ -123,8 +128,8 @@ USTATUS FfsBuilder::buildCapsule(const UModelIndex & index, UByteArray & capsule } // Check size of reconstructed capsule body, it must remain the same - UINT32 newSize = capsule.size(); - UINT32 oldSize = model->body(index).size(); + UINT32 newSize = (UINT32)capsule.size(); + UINT32 oldSize = (UINT32)model->body(index).size(); if (newSize > oldSize) { msg(usprintf("buildCapsule: new capsule size %Xh (%u) is bigger than the original %Xh (%u)", newSize, newSize, oldSize, oldSize), index); return U_INVALID_CAPSULE; @@ -165,11 +170,19 @@ USTATUS FfsBuilder::buildIntelImage(const UModelIndex & index, UByteArray & inte // Rebuild else if (model->action(index) == Actions::Rebuild) { // First child will always be descriptor for this type of image, and it's read only for now +#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5) intelImage = model->header(index.child(0, 0)) + model->body(index.child(0, 0)) + model->tail(index.child(0, 0)); - +#else + intelImage = model->header(index.model()->index(0, 0, index)) + model->body(index.model()->index(0, 0, index)) + model->tail(index.model()->index(0, 0, index)); +#endif + // Process other regions for (int i = 1; i < model->rowCount(index); i++) { +#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5) UModelIndex currentRegion = index.child(i, 0); +#else + UModelIndex currentRegion = index.model()->index(i, 0, index); +#endif // Skip regions with Remove action if (model->action(currentRegion) == Actions::Remove) @@ -222,8 +235,8 @@ USTATUS FfsBuilder::buildIntelImage(const UModelIndex & index, UByteArray & inte } // Check size of new image, it must be same as old one - UINT32 newSize = intelImage.size(); - UINT32 oldSize = model->body(index).size(); + UINT32 newSize = (UINT32)intelImage.size(); + UINT32 oldSize = (UINT32)model->body(index).size(); if (newSize > oldSize) { msg(usprintf("buildIntelImage: new image size %Xh (%u) is bigger than the original %Xh (%u)", newSize, newSize, oldSize, oldSize), index); return U_INVALID_IMAGE; @@ -269,7 +282,13 @@ USTATUS FfsBuilder::buildRawArea(const UModelIndex & index, UByteArray & rawArea // Build children for (int i = 0; i < model->rowCount(index); i++) { USTATUS result = U_SUCCESS; + +#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5) UModelIndex currentChild = index.child(i, 0); +#else + UModelIndex currentChild = index.model()->index(i, 0, index); +#endif + UByteArray currentData; // Check child type if (model->type(currentChild) == Types::Volume) { @@ -292,8 +311,8 @@ USTATUS FfsBuilder::buildRawArea(const UModelIndex & index, UByteArray & rawArea } // Check size of new raw area, it must be same as original one - UINT32 newSize = rawArea.size(); - UINT32 oldSize = model->body(index).size(); + UINT32 newSize = (UINT32)rawArea.size(); + UINT32 oldSize = (UINT32)model->body(index).size(); if (newSize > oldSize) { msg(usprintf("buildRawArea: new area size %Xh (%u) is bigger than the original %Xh (%u)", newSize, newSize, oldSize, oldSize), index); return U_INVALID_RAW_AREA; diff --git a/common/ffsops.cpp b/common/ffsops.cpp index 160519e..a2eb09f 100644 --- a/common/ffsops.cpp +++ b/common/ffsops.cpp @@ -44,8 +44,13 @@ USTATUS FfsOperations::extract(const UModelIndex & index, UString & name, UByteA extracted.clear(); // There is no need to redo decompression, we can use child items for (int i = 0; i < model->rowCount(index); i++) { - UModelIndex childIndex = index.child(i, 0); - // Ensure 4-byte alignment of current section +#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5) + UModelIndex childIndex = index.child(i, 0); +#else + UModelIndex childIndex = index.model()->index(i, 0, index); +#endif + + // Ensure 4-byte alignment of current section extracted += UByteArray(ALIGN4((UINT32)extracted.size()) - (UINT32)extracted.size(), '\x00'); // Add current section header, body and tail extracted += model->header(childIndex); diff --git a/common/ffsparser.cpp b/common/ffsparser.cpp index c4a8ac5..6fd690f 100644 --- a/common/ffsparser.cpp +++ b/common/ffsparser.cpp @@ -478,7 +478,7 @@ USTATUS FfsParser::parseIntelImage(const UByteArray & intelImage, const UINT32 l // Check for padding after the last region if ((UINT64)regions.back().offset + (UINT64)regions.back().length < (UINT64)intelImage.size()) { region.offset = regions.back().offset + regions.back().length; - region.length = intelImage.size() - region.offset; + region.length = (UINT32)(intelImage.size() - region.offset); region.data = intelImage.mid(region.offset, region.length); region.type = getPaddingType(region.data); regions.push_back(region); @@ -718,10 +718,10 @@ USTATUS FfsParser::parseMeRegion(const UByteArray & me, const UINT32 localOffset } else { // Search for new signature - INT32 versionOffset = me.indexOf(ME_VERSION_SIGNATURE2); + INT32 versionOffset = (INT32)me.indexOf(ME_VERSION_SIGNATURE2); if (versionOffset < 0){ // New signature not found // Search for old signature - versionOffset = me.indexOf(ME_VERSION_SIGNATURE); + versionOffset = (INT32)me.indexOf(ME_VERSION_SIGNATURE); if (versionOffset < 0){ info += ("\nVersion: unknown"); versionFound = false; @@ -848,7 +848,7 @@ USTATUS FfsParser::parseRawArea(const UModelIndex & index) // Get item data UByteArray data = model->body(index); - UINT32 headerSize = model->header(index).size(); + UINT32 headerSize = (UINT32)model->header(index).size(); USTATUS result; UString name; @@ -919,7 +919,7 @@ USTATUS FfsParser::parseRawArea(const UModelIndex & index) // Update variables prevItemOffset = itemOffset; - prevItemSize = padding.size(); + prevItemSize = (UINT32)padding.size(); break; } @@ -992,7 +992,12 @@ USTATUS FfsParser::parseRawArea(const UModelIndex & index) // Parse bodies for (int i = 0; i < model->rowCount(index); i++) { +#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5) UModelIndex current = index.child(i, 0); +#else + UModelIndex current = index.model()->index(i, 0, index); +#endif + switch (model->type(current)) { case Types::Volume: parseVolumeBody(current); @@ -1122,7 +1127,7 @@ USTATUS FfsParser::parseVolumeHeader(const UByteArray & volume, const UINT32 loc // Check for AppleCRC32 and UsedSpace in ZeroVector bool hasAppleCrc32 = false; - UINT32 volumeSize = volume.size(); + UINT32 volumeSize = (UINT32)volume.size(); UINT32 appleCrc32 = *(UINT32*)(volume.constData() + 8); UINT32 usedSpace = *(UINT32*)(volume.constData() + 12); if (appleCrc32 != 0) { @@ -1295,7 +1300,7 @@ BOOLEAN FfsParser::microcodeHeaderValid(const INTEL_MICROCODE_HEADER* ucodeHeade USTATUS FfsParser::findNextRawAreaItem(const UModelIndex & index, const UINT32 localOffset, UINT8 & nextItemType, UINT32 & nextItemOffset, UINT32 & nextItemSize, UINT32 & nextItemAlternativeSize) { UByteArray data = model->body(index); - UINT32 dataSize = data.size(); + UINT32 dataSize = (UINT32)data.size(); if (dataSize < sizeof(UINT32)) return U_STORES_NOT_FOUND; @@ -1435,7 +1440,7 @@ USTATUS FfsParser::parseVolumeBody(const UModelIndex & index) // Get volume header size and body UByteArray volumeBody = model->body(index); - UINT32 volumeHeaderSize = model->header(index).size(); + UINT32 volumeHeaderSize = (UINT32)model->header(index).size(); // Parse VSS NVRAM volumes with a dedicated function if (model->subtype(index) == Subtypes::NvramVolume) { @@ -1466,7 +1471,7 @@ USTATUS FfsParser::parseVolumeBody(const UModelIndex & index) } // Search for and parse all files - UINT32 volumeBodySize = volumeBody.size(); + UINT32 volumeBodySize = (UINT32)volumeBody.size(); UINT32 fileOffset = 0; while (fileOffset < volumeBodySize) { @@ -1496,7 +1501,7 @@ USTATUS FfsParser::parseVolumeBody(const UModelIndex & index) if (freeSpace.count(emptyByte) != freeSpace.size()) { // Search for the first non-empty byte UINT32 i; - UINT32 size = freeSpace.size(); + UINT32 size = (UINT32)freeSpace.size(); const UINT8* current = (UINT8*)freeSpace.constData(); for (i = 0; i < size; i++) { if (*current++ != emptyByte) { @@ -1559,7 +1564,12 @@ USTATUS FfsParser::parseVolumeBody(const UModelIndex & index) // Check for duplicate GUIDs for (int i = 0; i < model->rowCount(index); i++) { +#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5) UModelIndex current = index.child(i, 0); +#else + UModelIndex current = index.model()->index(i, 0, index); +#endif + // Skip non-file entries and pad files if (model->type(current) != Types::File || model->subtype(current) == EFI_FV_FILETYPE_PAD) { continue; @@ -1570,7 +1580,11 @@ USTATUS FfsParser::parseVolumeBody(const UModelIndex & index) // Check files after current for having an equal GUID for (int j = i + 1; j < model->rowCount(index); j++) { +#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5) UModelIndex another = index.child(j, 0); +#else + UModelIndex another = index.model()->index(j, 0, index); +#endif // Skip non-file entries if (model->type(another) != Types::File) { @@ -1589,7 +1603,12 @@ USTATUS FfsParser::parseVolumeBody(const UModelIndex & index) // Parse bodies for (int i = 0; i < model->rowCount(index); i++) { +#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5) UModelIndex current = index.child(i, 0); +#else + UModelIndex current = index.model()->index(i, 0, index); +#endif + switch (model->type(current)) { case Types::File: parseFileBody(current); @@ -1704,7 +1723,7 @@ USTATUS FfsParser::parseFileHeader(const UByteArray & file, const UINT32 localOf } // Check header checksum - UINT8 calculatedHeader = 0x100 - (calculateSum8((const UINT8*)header.constData(), header.size()) - fileHeader->IntegrityCheck.Checksum.Header - fileHeader->IntegrityCheck.Checksum.File - fileHeader->State); + UINT8 calculatedHeader = 0x100 - (calculateSum8((const UINT8*)header.constData(), (UINT32)header.size()) - fileHeader->IntegrityCheck.Checksum.Header - fileHeader->IntegrityCheck.Checksum.File - fileHeader->State); bool msgInvalidHeaderChecksum = false; if (fileHeader->IntegrityCheck.Checksum.Header != calculatedHeader) { msgInvalidHeaderChecksum = true; @@ -1715,7 +1734,7 @@ USTATUS FfsParser::parseFileHeader(const UByteArray & file, const UINT32 localOf bool msgInvalidDataChecksum = false; UINT8 calculatedData = 0; if (fileHeader->Attributes & FFS_ATTRIB_CHECKSUM) { - calculatedData = calculateChecksum8((const UINT8*)body.constData(), body.size()); + calculatedData = calculateChecksum8((const UINT8*)body.constData(), (UINT32)body.size()); } // Data checksum must be one of predefined values else if (volumeRevision == 1) { @@ -1907,7 +1926,7 @@ USTATUS FfsParser::parsePadFileBody(const UModelIndex & index) // Search for the first non-empty byte UINT32 nonEmptyByteOffset; - UINT32 size = body.size(); + UINT32 size = (UINT32)body.size(); const UINT8* current = (const UINT8*)body.constData(); for (nonEmptyByteOffset = 0; nonEmptyByteOffset < size; nonEmptyByteOffset++) { if (*current++ != emptyByte) @@ -1915,7 +1934,7 @@ USTATUS FfsParser::parsePadFileBody(const UModelIndex & index) } // Add all bytes before as free space... - UINT32 headerSize = model->header(index).size(); + UINT32 headerSize = (UINT32)model->header(index).size(); if (nonEmptyByteOffset >= 8) { // Align free space to 8 bytes boundary if (nonEmptyByteOffset != ALIGN8(nonEmptyByteOffset)) @@ -1959,8 +1978,8 @@ USTATUS FfsParser::parseSections(const UByteArray & sections, const UModelIndex return U_INVALID_PARAMETER; // Search for and parse all sections - UINT32 bodySize = sections.size(); - UINT32 headerSize = model->header(index).size(); + UINT32 bodySize = (UINT32)sections.size(); + UINT32 headerSize = (UINT32)model->header(index).size(); UINT32 sectionOffset = 0; USTATUS result = U_SUCCESS; @@ -2019,7 +2038,12 @@ USTATUS FfsParser::parseSections(const UByteArray & sections, const UModelIndex // Parse bodies, will be skipped if insertIntoTree is not required for (int i = 0; i < model->rowCount(index); i++) { +#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5) UModelIndex current = index.child(i, 0); +#else + UModelIndex current = index.model()->index(i, 0, index); +#endif + switch (model->type(current)) { case Types::Section: parseSectionBody(current); @@ -2278,7 +2302,7 @@ USTATUS FfsParser::parseGuidedSectionHeader(const UByteArray & section, const UI UINT32 crc = *(UINT32*)(section.constData() + headerSize); additionalInfo += UString("\nChecksum type: CRC32"); // Calculate CRC32 of section data - UINT32 calculated = (UINT32)crc32(0, (const UINT8*)section.constData() + dataOffset, section.size() - dataOffset); + UINT32 calculated = (UINT32)crc32(0, (const UINT8*)section.constData() + dataOffset, (uInt)(section.size() - dataOffset)); if (crc == calculated) { additionalInfo += usprintf("\nChecksum: %08Xh, valid", crc); } @@ -2656,7 +2680,7 @@ USTATUS FfsParser::parseCompressedSectionBody(const UModelIndex & index) // Obtain required information from parsing data UINT8 compressionType = EFI_NOT_COMPRESSED; - UINT32 uncompressedSize = model->body(index).size(); + UINT32 uncompressedSize = (UINT32)model->body(index).size(); if (model->hasEmptyParsingData(index) == false) { UByteArray data = model->parsingData(index); const COMPRESSED_SECTION_PARSING_DATA* pdata = (const COMPRESSED_SECTION_PARSING_DATA*)data.constData(); @@ -2846,7 +2870,11 @@ USTATUS FfsParser::parseVersionSectionBody(const UModelIndex & index) return U_INVALID_PARAMETER; // Add info +#if QT_VERSION_MAJOR >= 6 + model->addInfo(index, UString("\nVersion string: ") + UString::fromUtf16((const char16_t*)model->body(index).constData())); +#else model->addInfo(index, UString("\nVersion string: ") + UString::fromUtf16((const CHAR16*)model->body(index).constData())); +#endif return U_SUCCESS; } @@ -2981,7 +3009,11 @@ USTATUS FfsParser::parseUiSectionBody(const UModelIndex & index) if (!index.isValid()) return U_INVALID_PARAMETER; +#if QT_VERSION_MAJOR >= 6 + UString text = UString::fromUtf16((const char16_t*)model->body(index).constData()); +#else UString text = UString::fromUtf16((const CHAR16*)model->body(index).constData()); +#endif // Add info model->addInfo(index, UString("\nText: ") + text); @@ -2999,7 +3031,7 @@ USTATUS FfsParser::parseAprioriRawSection(const UByteArray & body, UString & par msg(usprintf("%s: apriori file has size is not a multiple of 16", __FUNCTION__)); } parsed.clear(); - UINT32 count = body.size() / sizeof(EFI_GUID); + UINT32 count = (UINT32)(body.size() / sizeof(EFI_GUID)); if (count > 0) { for (UINT32 i = 0; i < count; i++) { const EFI_GUID* guid = (const EFI_GUID*)body.constData() + i; @@ -3207,7 +3239,7 @@ USTATUS FfsParser::performSecondPass(const UModelIndex & index) } // Calculate address difference - const UINT32 vtfSize = model->header(lastVtf).size() + model->body(lastVtf).size() + model->tail(lastVtf).size(); + const UINT32 vtfSize = (const UINT32)(model->header(lastVtf).size() + model->body(lastVtf).size() + model->tail(lastVtf).size()); addressDiff = 0xFFFFFFFFULL - model->base(lastVtf) - vtfSize + 1; // Parse reset vector data @@ -3280,7 +3312,7 @@ USTATUS FfsParser::checkTeImageBase(const UModelIndex & index) if (originalImageBase != 0 || adjustedImageBase != 0) { // Check data memory address to be equal to either OriginalImageBase or AdjustedImageBase UINT64 address = addressDiff + model->base(index); - UINT32 base = (UINT32)address + model->header(index).size(); + UINT32 base = (UINT32)(address + model->header(index).size()); if (originalImageBase == base) { imageBaseType = EFI_IMAGE_TE_BASE_ORIGINAL; @@ -3318,7 +3350,11 @@ USTATUS FfsParser::checkTeImageBase(const UModelIndex & index) // Process child items for (int i = 0; i < model->rowCount(index); i++) { +#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5) checkTeImageBase(index.child(i, 0)); +#else + checkTeImageBase(index.model()->index(i, 0, index)); +#endif } return U_SUCCESS; @@ -3339,7 +3375,7 @@ USTATUS FfsParser::addInfoRecursive(const UModelIndex & index) // Add physical address of the whole item or it's header and data portions separately UINT64 address = addressDiff + model->base(index); if (address <= 0xFFFFFFFFUL) { - UINT32 headerSize = model->header(index).size(); + UINT32 headerSize = (UINT32)model->header(index).size(); if (headerSize) { model->addInfo(index, usprintf("Data address: %08Xh\n", address + headerSize),false); model->addInfo(index, usprintf("Header address: %08Xh\n", address), false); @@ -3355,7 +3391,11 @@ USTATUS FfsParser::addInfoRecursive(const UModelIndex & index) // Process child items for (int i = 0; i < model->rowCount(index); i++) { +#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5) addInfoRecursive(index.child(i, 0)); +#else + addInfoRecursive(index.model()->index(i, 0, index)); +#endif } return U_SUCCESS; @@ -3443,7 +3483,7 @@ USTATUS FfsParser::checkProtectedRanges(const UModelIndex & index) else { bgProtectedRanges[i].Offset = model->base(dxeRootVolumeIndex); - bgProtectedRanges[i].Size = model->header(dxeRootVolumeIndex).size() + model->body(dxeRootVolumeIndex).size() + model->tail(dxeRootVolumeIndex).size(); + bgProtectedRanges[i].Size = (UINT32)(model->header(dxeRootVolumeIndex).size() + model->body(dxeRootVolumeIndex).size() + model->tail(dxeRootVolumeIndex).size()); protectedParts = openedImage.mid(bgProtectedRanges[i].Offset, bgProtectedRanges[i].Size); UByteArray digest(SHA256_DIGEST_SIZE, '\x00'); @@ -3534,7 +3574,7 @@ USTATUS FfsParser::markProtectedRangeRecursive(const UModelIndex & index, const // Mark normal items else { UINT32 currentOffset = model->base(index); - UINT32 currentSize = model->header(index).size() + model->body(index).size() + model->tail(index).size(); + UINT32 currentSize = (UINT32)(model->header(index).size() + model->body(index).size() + model->tail(index).size()); if (std::min(currentOffset + currentSize, range.Offset + range.Size) > std::max(currentOffset, range.Offset)) { if (range.Offset <= currentOffset && currentOffset + currentSize <= range.Offset + range.Size) { // Mark as fully in range @@ -3552,7 +3592,11 @@ USTATUS FfsParser::markProtectedRangeRecursive(const UModelIndex & index, const } for (int i = 0; i < model->rowCount(index); i++) { +#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5) markProtectedRangeRecursive(index.child(i, 0), range); +#else + markProtectedRangeRecursive(index.model()->index(i, 0, index), range); +#endif } return U_SUCCESS; @@ -3856,7 +3900,12 @@ void FfsParser::findFitRecursive(const UModelIndex & index, UModelIndex & found, // Process child items for (int i = 0; i < model->rowCount(index); i++) { +#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5) findFitRecursive(index.child(i, 0), found, fitOffset); +#else + findFitRecursive(index.model()->index(i, 0, index), found, fitOffset); +#endif + if (found.isValid()) return; } @@ -3864,11 +3913,11 @@ void FfsParser::findFitRecursive(const UModelIndex & index, UModelIndex & found, // Check for all FIT signatures in item's body UByteArray lastVtfBody = model->body(lastVtf); UINT32 storedFitAddress = *(const UINT32*)(lastVtfBody.constData() + lastVtfBody.size() - FIT_POINTER_OFFSET); - for (INT32 offset = model->body(index).indexOf(FIT_SIGNATURE); + for (INT32 offset = (INT32)model->body(index).indexOf(FIT_SIGNATURE); offset >= 0; - offset = model->body(index).indexOf(FIT_SIGNATURE, offset + 1)) { + offset = (INT32)model->body(index).indexOf(FIT_SIGNATURE, offset + 1)) { // FIT candidate found, calculate it's physical address - UINT32 fitAddress = model->base(index) + (UINT32)addressDiff + model->header(index).size() + (UINT32)offset; + UINT32 fitAddress = (UINT32)(model->base(index) + (UINT32)addressDiff + model->header(index).size() + (UINT32)offset); // Check FIT address to be stored in the last VTF if (fitAddress == storedFitAddress) { @@ -4062,7 +4111,7 @@ USTATUS FfsParser::parseFitEntryBootGuardKeyManifest(const UByteArray & keyManif USTATUS FfsParser::findNextBootGuardBootPolicyElement(const UByteArray & bootPolicy, const UINT32 elementOffset, UINT32 & nextElementOffset, UINT32 & nextElementSize) { - UINT32 dataSize = bootPolicy.size(); + UINT32 dataSize = (UINT32)bootPolicy.size(); if (dataSize < sizeof(UINT64)) { return U_ELEMENTS_NOT_FOUND; } diff --git a/common/ffsreport.cpp b/common/ffsreport.cpp index 6f06745..8685352 100644 --- a/common/ffsreport.cpp +++ b/common/ffsreport.cpp @@ -49,7 +49,7 @@ USTATUS FfsReport::generateRecursive(std::vector & report, const UModel // Calculate item CRC32 UByteArray data = model->header(index) + model->body(index) + model->tail(index); - UINT32 crc = (UINT32)crc32(0, (const UINT8*)data.constData(), data.size()); + UINT32 crc = (UINT32)crc32(0, (const UINT8*)data.constData(), (uInt)data.size()); // Information on current item UString text = model->text(index); @@ -68,7 +68,11 @@ USTATUS FfsReport::generateRecursive(std::vector & report, const UModel // Information on child items for (int i = 0; i < model->rowCount(index); i++) { +#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5) generateRecursive(report, index.child(i,0), level + 1); +#else + generateRecursive(report, index.model()->index(i,0,index), level + 1); +#endif } return U_SUCCESS; diff --git a/common/ffsutils.cpp b/common/ffsutils.cpp index 45315f2..c9c67a7 100644 --- a/common/ffsutils.cpp +++ b/common/ffsutils.cpp @@ -40,7 +40,12 @@ USTATUS findFileRecursive(TreeModel *model, const UModelIndex index, const UStri bool hasChildren = (model->rowCount(index) > 0); for (int i = 0; i < model->rowCount(index); i++) { +#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5) findFileRecursive(model, index.child(i, index.column()), hexPattern, mode, files); +#else + findFileRecursive(model, index.model()->index(i, index.column(), index), hexPattern, mode, files); +#endif + } UByteArray data; diff --git a/common/guiddatabase.cpp b/common/guiddatabase.cpp index a914821..ee56bc6 100644 --- a/common/guiddatabase.cpp +++ b/common/guiddatabase.cpp @@ -116,7 +116,12 @@ GuidDatabase guidDatabaseFromTreeRecursive(TreeModel * model, const UModelIndex return db; for (int i = 0; i < model->rowCount(index); i++) { +#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5) GuidDatabase tmpDb = guidDatabaseFromTreeRecursive(model, index.child(i, index.column())); +#else + GuidDatabase tmpDb = guidDatabaseFromTreeRecursive(model, index.model()->index(i, index.column(), index)); +#endif + db.insert(tmpDb.begin(), tmpDb.end()); } diff --git a/common/meparser.cpp b/common/meparser.cpp index 7ce0153..a42de39 100755 --- a/common/meparser.cpp +++ b/common/meparser.cpp @@ -165,7 +165,7 @@ USTATUS MeParser::parseFptRegion(const UByteArray & region, const UModelIndex & // Add partition table entries std::vector partitions; - UINT32 offset = header.size(); + UINT32 offset = (UINT32)header.size(); const FPT_HEADER_ENTRY* firstPtEntry = (const FPT_HEADER_ENTRY*)(region.constData() + offset); for (UINT8 i = 0; i < ptHeader->NumEntries; i++) { // Populate entry header @@ -265,7 +265,7 @@ make_partition_table_consistent: // Check for padding after the last region if ((UINT32)partitions.back().ptEntry.Offset + (UINT32)partitions.back().ptEntry.Size < (UINT32)region.size()) { padding.ptEntry.Offset = partitions.back().ptEntry.Offset + partitions.back().ptEntry.Size; - padding.ptEntry.Size = region.size() - padding.ptEntry.Offset; + padding.ptEntry.Size = (UINT32)(region.size() - padding.ptEntry.Offset); padding.type = Types::Padding; partitions.push_back(padding); } @@ -422,7 +422,7 @@ make_partition_table_consistent: // Check for padding after the last region if ((UINT32)partitions.back().ptEntry.Offset + (UINT32)partitions.back().ptEntry.Size < (UINT32)region.size()) { padding.ptEntry.Offset = partitions.back().ptEntry.Offset + partitions.back().ptEntry.Size; - padding.ptEntry.Size = region.size() - padding.ptEntry.Offset; + padding.ptEntry.Size = (UINT32)(region.size() - padding.ptEntry.Offset); padding.type = Types::Padding; partitions.push_back(padding); } @@ -604,7 +604,7 @@ make_partition_table_consistent: // Check for padding after the last region if ((UINT32)partitions.back().ptEntry.Offset + (UINT32)partitions.back().ptEntry.Size < (UINT32)region.size()) { padding.ptEntry.Offset = partitions.back().ptEntry.Offset + partitions.back().ptEntry.Size; - padding.ptEntry.Size = region.size() - padding.ptEntry.Offset; + padding.ptEntry.Size = (UINT32)(region.size() - padding.ptEntry.Offset); padding.type = Types::Padding; partitions.push_back(padding); } diff --git a/common/nvramparser.cpp b/common/nvramparser.cpp index 7fd684e..275b790 100755 --- a/common/nvramparser.cpp +++ b/common/nvramparser.cpp @@ -45,7 +45,7 @@ USTATUS NvramParser::parseNvarStore(const UModelIndex & index) } // Get local offset - UINT32 localOffset = model->header(index).size(); + UINT32 localOffset = (UINT32)model->header(index).size(); // Get item data const UByteArray data = model->body(index); @@ -121,7 +121,7 @@ USTATUS NvramParser::parseNvarStore(const UModelIndex & index) guidArea.size(), guidArea.size(), guidsInStore); // Add tree item - model->addItem(localOffset + offset + padding.size(), Types::Padding, getPaddingType(guidArea), name, UString(), info, UByteArray(), guidArea, UByteArray(), Fixed, index); + model->addItem((UINT32)(localOffset + offset + padding.size()), Types::Padding, getPaddingType(guidArea), name, UString(), info, UByteArray(), guidArea, UByteArray(), Fixed, index); return U_SUCCESS; } @@ -230,7 +230,12 @@ USTATUS NvramParser::parseNvarStore(const UModelIndex & index) // Search previously added entries for a link to this variable // WARNING: O(n^2), may be very slow for (int i = model->rowCount(index) - 1; i >= 0; i--) { +#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5) nvarIndex = index.child(i, 0); +#else + nvarIndex = index.model()->index(i, 0, index); +#endif + if (model->hasEmptyParsingData(nvarIndex) == false) { UByteArray nvarData = model->parsingData(nvarIndex); const NVAR_ENTRY_PARSING_DATA nvarPdata = readUnaligned((const NVAR_ENTRY_PARSING_DATA*)nvarData.constData()); @@ -261,11 +266,16 @@ USTATUS NvramParser::parseNvarStore(const UModelIndex & index) UINT32 nameSize = 0; if (entryHeader->Attributes & NVRAM_NVAR_ENTRY_ASCII_NAME) { // Name is stored as ASCII string of CHAR8s text = UString(namePtr); - nameSize = text.length() + 1; + nameSize = (UINT32)(text.length() + 1); } else { // Name is stored as UCS2 string of CHAR16s +#if QT_VERSION_MAJOR >= 6 + text = UString::fromUtf16((char16_t*)namePtr); +#else text = UString::fromUtf16((CHAR16*)namePtr); - nameSize = (text.length() + 1) * 2; +#endif + + nameSize = (UINT32)((text.length() + 1) * 2); } // Get entry GUID @@ -388,7 +398,7 @@ USTATUS NvramParser::parseNvramVolumeBody(const UModelIndex & index) } // Get local offset - UINT32 localOffset = model->header(index).size(); + UINT32 localOffset = (UINT32)model->header(index).size(); // Get item data UByteArray data = model->body(index); @@ -455,7 +465,7 @@ USTATUS NvramParser::parseNvramVolumeBody(const UModelIndex & index) // Update variables prevStoreOffset = storeOffset; - prevStoreSize = padding.size(); + prevStoreSize = (UINT32)padding.size(); break; } @@ -497,7 +507,12 @@ USTATUS NvramParser::parseNvramVolumeBody(const UModelIndex & index) // Parse bodies for (int i = 0; i < model->rowCount(index); i++) { +#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5) UModelIndex current = index.child(i, 0); +#else + UModelIndex current = index.model()->index(i, 0, index); +#endif + switch (model->type(current)) { case Types::FdcStore: parseFdcStoreBody(current); @@ -528,7 +543,7 @@ USTATUS NvramParser::parseNvramVolumeBody(const UModelIndex & index) USTATUS NvramParser::findNextStore(const UModelIndex & index, const UByteArray & volume, const UINT32 localOffset, const UINT32 storeOffset, UINT32 & nextStoreOffset) { - UINT32 dataSize = volume.size(); + UINT32 dataSize = (UINT32)volume.size(); if (dataSize < sizeof(UINT32)) return U_STORES_NOT_FOUND; @@ -1286,7 +1301,7 @@ USTATUS NvramParser::parseFdcStoreBody(const UModelIndex & index) const UByteArray data = model->body(index); // Get local offset - UINT32 localOffset = model->header(index).size(); + UINT32 localOffset = (UINT32)model->header(index).size(); // The body is a firmware volume with either a VSS or VSS2 store UModelIndex volumeIndex; @@ -1300,14 +1315,14 @@ USTATUS NvramParser::parseFdcStoreBody(const UModelIndex & index) UByteArray store = model->body(volumeIndex); if ((UINT32)store.size() >= sizeof(UINT32) && *(const UINT32*)store.constData() == NVRAM_VSS_STORE_SIGNATURE) { UModelIndex vssIndex; - status = parseVssStoreHeader(store, localOffset + model->header(volumeIndex).size(), true, volumeIndex, vssIndex); + status = parseVssStoreHeader(store, (UINT32)(localOffset + model->header(volumeIndex).size()), true, volumeIndex, vssIndex); if (status) return status; return parseVssStoreBody(vssIndex, 0); } else if ((UINT32)store.size() >= sizeof(EFI_GUID) && store.left(sizeof(EFI_GUID)) == NVRAM_FDC_STORE_GUID) { UModelIndex vss2Index; - status = parseVss2StoreHeader(store, localOffset + model->header(volumeIndex).size(), true, volumeIndex, vss2Index); + status = parseVss2StoreHeader(store, (UINT32)(localOffset + model->header(volumeIndex).size()), true, volumeIndex, vss2Index); if (status) return status; return parseVssStoreBody(vss2Index, 0); @@ -1335,7 +1350,7 @@ USTATUS NvramParser::parseVssStoreBody(const UModelIndex & index, UINT8 alignmen } // Get local offset - UINT32 localOffset = model->header(index).size(); + UINT32 localOffset = (UINT32)model->header(index).size(); // Get item data const UByteArray data = model->body(index); @@ -1396,7 +1411,7 @@ USTATUS NvramParser::parseVssStoreBody(const UModelIndex & index, UINT8 alignmen // Calculate CRC32 of the variable data storedCrc32 = appleVariableHeader->DataCrc32; - calculatedCrc32 = (UINT32)crc32(0, (const UINT8*)body.constData(), body.size()); + calculatedCrc32 = (UINT32)crc32(0, (const UINT8*)body.constData(), (uInt)body.size()); } } @@ -1501,7 +1516,12 @@ USTATUS NvramParser::parseVssStoreBody(const UModelIndex & index, UINT8 alignmen else { // Add GUID and text for valid variables name = guidToUString(readUnaligned(variableGuid)); info += UString("Variable GUID: ") + guidToUString(readUnaligned(variableGuid), false) + UString("\n"); + +#if QT_VERSION_MAJOR >= 6 + text = UString::fromUtf16((char16_t *)variableName); +#else text = UString::fromUtf16(variableName); +#endif } // Add info @@ -1555,7 +1575,7 @@ USTATUS NvramParser::parseFsysStoreBody(const UModelIndex & index) return U_INVALID_PARAMETER; // Get local offset - UINT32 localOffset = model->header(index).size(); + UINT32 localOffset = (UINT32)model->header(index).size(); // Get item data const UByteArray data = model->body(index); @@ -1658,7 +1678,7 @@ USTATUS NvramParser::parseEvsaStoreBody(const UModelIndex & index) } // Get local offset - UINT32 localOffset = model->header(index).size(); + UINT32 localOffset = (UINT32)model->header(index).size(); // Get item data const UByteArray data = model->body(index); @@ -1732,7 +1752,13 @@ USTATUS NvramParser::parseEvsaStoreBody(const UModelIndex & index) const EVSA_NAME_ENTRY* nameHeader = (const EVSA_NAME_ENTRY*)entryHeader; header = data.mid(offset, sizeof(EVSA_NAME_ENTRY)); body = data.mid(offset + sizeof(EVSA_NAME_ENTRY), nameHeader->Header.Size - sizeof(EVSA_NAME_ENTRY)); + +#if QT_VERSION_MAJOR >= 6 + name = UString::fromUtf16((const char16_t *)body.constData()); +#else name = UString::fromUtf16((const CHAR16*)body.constData()); +#endif + info = UString("Name: ") + name + usprintf("\nFull size: %Xh (%u)\nHeader size %Xh (%u)\nBody size: %Xh (%u)\nType: %02Xh\nChecksum: %02Xh", variableSize, variableSize, header.size(), header.size(), @@ -1805,7 +1831,12 @@ USTATUS NvramParser::parseEvsaStoreBody(const UModelIndex & index) // Reparse all data variables to detect invalid ones and assign name and test to valid ones for (int i = 0; i < model->rowCount(index); i++) { +#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5) UModelIndex current = index.child(i, 0); +#else + UModelIndex current = index.model()->index(i, 0, index); +#endif + if (model->subtype(current) == Subtypes::DataEvsaEntry) { UByteArray header = model->header(current); const EVSA_DATA_ENTRY* dataHeader = (const EVSA_DATA_ENTRY*)header.constData(); @@ -1857,7 +1888,7 @@ USTATUS NvramParser::parseFlashMapBody(const UModelIndex & index) return U_INVALID_PARAMETER; // Get parsing data for the current item - UINT32 localOffset = model->header(index).size(); + UINT32 localOffset = (UINT32)model->header(index).size(); const UByteArray data = model->body(index); diff --git a/common/sha256.c b/common/sha256.c index 9177f45..cd269b1 100644 --- a/common/sha256.c +++ b/common/sha256.c @@ -109,8 +109,8 @@ static void sha256_compress(struct sha256_state *md, unsigned char *buf) } /* Compress */ #define RND(a,b,c,d,e,f,g,h,i) \ -t0 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i]; \ -t1 = Sigma0(a) + Maj(a, b, c); \ +t0 = (uint32_t)(h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i]); \ +t1 = (uint32_t)(Sigma0(a) + Maj(a, b, c)); \ d += t0; \ h = t0 + t1; for (i = 0; i < 64; ++i) { diff --git a/common/treemodel.cpp b/common/treemodel.cpp index 60b29b1..99b0442 100644 --- a/common/treemodel.cpp +++ b/common/treemodel.cpp @@ -43,7 +43,7 @@ QVariant TreeModel::data(const UModelIndex &index, int role) const Qt::ItemFlags TreeModel::flags(const UModelIndex &index) const { if (!index.isValid()) - return 0; + return Qt::NoItemFlags; return Qt::ItemIsEnabled | Qt::ItemIsSelectable; } @@ -559,9 +559,14 @@ UModelIndex TreeModel::findByBase(UINT32 base) const goDeeper: int n = rowCount(parentIndex); for (int i = 0; i < n; i++) { +#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5) UModelIndex currentIndex = parentIndex.child(i, 0); +#else + UModelIndex currentIndex = parentIndex.model()->index(i, 0, parentIndex); +#endif + UINT32 currentBase = this->base(currentIndex); - UINT32 fullSize = header(currentIndex).size() + body(currentIndex).size() + tail(currentIndex).size(); + UINT32 fullSize = (UINT32)(header(currentIndex).size() + body(currentIndex).size() + tail(currentIndex).size()); if ((compressed(currentIndex) == false || (compressed(currentIndex) == true && compressed(currentIndex.parent()) == false)) // Base is meaningful only for true uncompressed items && currentBase <= base && base < currentBase + fullSize) { // Base must be in range [currentBase, currentBase + fullSize) // Found a better candidate diff --git a/common/treemodel.h b/common/treemodel.h index b1ef19e..5e90dd9 100644 --- a/common/treemodel.h +++ b/common/treemodel.h @@ -86,7 +86,6 @@ private: #if defined(QT_CORE_LIB) class TreeModel : public QAbstractItemModel { - Q_OBJECT private: TreeItem *rootItem; bool markingEnabledFlag; diff --git a/common/ubytearray.h b/common/ubytearray.h index 6cf2710..143b850 100644 --- a/common/ubytearray.h +++ b/common/ubytearray.h @@ -45,14 +45,14 @@ public: UByteArray toUpper() { std::basic_string s = d; std::transform(s.begin(), s.end(), s.begin(), ::toupper); return UByteArray(s); } uint32_t toUInt(bool* ok = NULL, const uint8_t base = 10) { return (uint32_t)strtoul(d.c_str(), NULL, base); } - int32_t size() const { return d.size(); } - int32_t count(char ch) const { return std::count(d.begin(), d.end(), ch); } + int32_t size() const { return (int32_t)d.size(); } + int32_t count(char ch) const { return (int32_t)std::count(d.begin(), d.end(), ch); } char at(uint32_t i) const { return d.at(i); } char operator[](uint32_t i) const { return d[i]; } char& operator[](uint32_t i) { return d[i]; } bool startsWith(const UByteArray & ba) const { return 0 == d.find(ba.d, 0); } - int indexOf(const UByteArray & ba, int from = 0) const { return d.find(ba.d, from); } + int indexOf(const UByteArray & ba, int from = 0) const { return (int)d.find(ba.d, from); } int lastIndexOf(const UByteArray & ba, int from = 0) const { size_t old_index = d.npos; size_t index = d.find(ba.d, from); @@ -60,7 +60,7 @@ public: old_index = index; index = d.find(ba.d, index + 1); } - return old_index; + return (int)old_index; } UByteArray left(int32_t len) const { return d.substr(0, len); } diff --git a/common/ustring.cpp b/common/ustring.cpp index 89cfe36..d9d7bd4 100644 --- a/common/ustring.cpp +++ b/common/ustring.cpp @@ -19,7 +19,13 @@ UString usprintf(const char* fmt, ...) UString msg; va_list vl; va_start(vl, fmt); + +#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5) msg.vsprintf(fmt, vl); +#else + msg = msg.vasprintf(fmt, vl); +#endif + va_end(vl); return msg; }; diff --git a/common/utility.cpp b/common/utility.cpp index 3e9f418..0cfd203 100755 --- a/common/utility.cpp +++ b/common/utility.cpp @@ -102,7 +102,7 @@ UString uniqueItemName(const UModelIndex & index) '<', '>', ':', '\"', '\\', '|', '?', '*', // Banned in Windows ' ' // Provides better readability }; - int nameLength = name.length(); // Note: Qt uses int for whatever reason. + int nameLength = (int)name.length(); // Note: Qt uses int for whatever reason. for (int i = 0; i < nameLength; i++) { for (size_t j = 0; j < sizeof(table); j++) { if (name[i] == table[j]) { @@ -200,7 +200,7 @@ USTATUS decompress(const UByteArray & compressedData, const UINT8 compressionTyp // Get buffer sizes data = (UINT8*)compressedData.data(); - dataSize = compressedData.size(); + dataSize = (UINT32)compressedData.size(); // Check header to be valid header = (const EFI_TIANO_HEADER*)data; @@ -260,7 +260,7 @@ USTATUS decompress(const UByteArray & compressedData, const UINT8 compressionTyp // Get buffer sizes data = (const UINT8*)compressedData.constData(); - dataSize = compressedData.size(); + dataSize = (UINT32)compressedData.size(); // Get info as normal LZMA section if (U_SUCCESS != LzmaGetInfo(data, dataSize, &decompressedSize)) { @@ -305,7 +305,7 @@ USTATUS decompress(const UByteArray & compressedData, const UINT8 compressionTyp // Get buffer sizes data = (const UINT8*)compressedData.constData(); - dataSize = compressedData.size(); + dataSize = (UINT32)compressedData.size(); // Get info as normal LZMA section if (U_SUCCESS != LzmaGetInfo(data, dataSize, &decompressedSize)) { @@ -498,7 +498,7 @@ USTATUS gzipDecompress(const UByteArray & input, UByteArray & output) z_stream stream; stream.next_in = (z_const Bytef *)input.data(); - stream.avail_in = input.size(); + stream.avail_in = (uInt)input.size(); stream.zalloc = Z_NULL; stream.zfree = Z_NULL; stream.opaque = Z_NULL; diff --git a/version.h b/version.h index 0b43aa8..711b3c4 100644 --- a/version.h +++ b/version.h @@ -14,6 +14,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #ifndef VERSION_H #define VERSION_H -#define PROGRAM_VERSION "NE alpha 58" " (" __DATE__ ")" +#define PROGRAM_VERSION "NE alpha 59" " (" __DATE__ ")" #endif // VERSION_H