mirror of
https://github.com/LongSoft/UEFITool.git
synced 2024-11-22 07:58:22 +08:00
Updated code to support newer Qt versions (#237)
This commit is contained in:
parent
d1e47539fc
commit
34c8ad8dcc
2
.gitignore
vendored
2
.gitignore
vendored
@ -248,3 +248,5 @@ DerivedData
|
|||||||
compile_commands.json
|
compile_commands.json
|
||||||
CMakeScripts
|
CMakeScripts
|
||||||
UEFITool/qrc_uefitool.cpp
|
UEFITool/qrc_uefitool.cpp
|
||||||
|
XcodeQT5
|
||||||
|
XcodeQT6
|
||||||
|
@ -29,7 +29,12 @@ USTATUS FfsFinder::findHexPattern(const UModelIndex & index, const UByteArray &
|
|||||||
|
|
||||||
bool hasChildren = (model->rowCount(index) > 0);
|
bool hasChildren = (model->rowCount(index) > 0);
|
||||||
for (int i = 0; i < model->rowCount(index); i++) {
|
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);
|
findHexPattern(index.child(i, index.column()), hexPattern, mode);
|
||||||
|
#else
|
||||||
|
findHexPattern(index.model()->index(i, index.column(), index), hexPattern, mode);
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
UByteArray data;
|
UByteArray data;
|
||||||
@ -49,9 +54,22 @@ USTATUS FfsFinder::findHexPattern(const UModelIndex & index, const UByteArray &
|
|||||||
}
|
}
|
||||||
|
|
||||||
UString hexBody = UString(data.toHex());
|
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);
|
QRegExp regexp = QRegExp(UString(hexPattern), Qt::CaseInsensitive);
|
||||||
|
|
||||||
INT32 offset = regexp.indexIn(hexBody);
|
INT32 offset = regexp.indexIn(hexBody);
|
||||||
|
|
||||||
while (offset >= 0) {
|
while (offset >= 0) {
|
||||||
|
#endif
|
||||||
|
|
||||||
if (offset % 2 == 0) {
|
if (offset % 2 == 0) {
|
||||||
// For patterns that cross header|body boundary, skip patterns entirely located in body, since
|
// For patterns that cross header|body boundary, skip patterns entirely located in body, since
|
||||||
// children search above has already found them.
|
// children search above has already found them.
|
||||||
@ -64,7 +82,12 @@ USTATUS FfsFinder::findHexPattern(const UModelIndex & index, const UByteArray &
|
|||||||
index);
|
index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if QT_VERSION_MAJOR >= 6
|
||||||
|
offset += 1;
|
||||||
|
#else
|
||||||
offset = regexp.indexIn(hexBody, offset + 1);
|
offset = regexp.indexIn(hexBody, offset + 1);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return U_SUCCESS;
|
return U_SUCCESS;
|
||||||
@ -80,7 +103,11 @@ USTATUS FfsFinder::findGuidPattern(const UModelIndex & index, const UByteArray &
|
|||||||
|
|
||||||
bool hasChildren = (model->rowCount(index) > 0);
|
bool hasChildren = (model->rowCount(index) > 0);
|
||||||
for (int i = 0; i < model->rowCount(index); i++) {
|
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);
|
findGuidPattern(index.child(i, index.column()), guidPattern, mode);
|
||||||
|
#else
|
||||||
|
findGuidPattern(index.model()->index(i, index.column(), index), guidPattern, mode);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
UByteArray data;
|
UByteArray data;
|
||||||
@ -121,8 +148,19 @@ USTATUS FfsFinder::findGuidPattern(const UModelIndex & index, const UByteArray &
|
|||||||
if (hexPattern.count('.') == hexPattern.length())
|
if (hexPattern.count('.') == hexPattern.length())
|
||||||
return U_SUCCESS;
|
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);
|
QRegExp regexp(UString(hexPattern), Qt::CaseInsensitive);
|
||||||
|
|
||||||
INT32 offset = regexp.indexIn(hexBody);
|
INT32 offset = regexp.indexIn(hexBody);
|
||||||
|
#endif
|
||||||
|
|
||||||
while (offset >= 0) {
|
while (offset >= 0) {
|
||||||
if (offset % 2 == 0) {
|
if (offset % 2 == 0) {
|
||||||
msg(UString("GUID pattern \"") + UString(guidPattern)
|
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),
|
+ usprintf(" at %s-offset %02Xh", mode == SEARCH_MODE_BODY ? "body" : "header", offset / 2),
|
||||||
index);
|
index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if QT_VERSION_MAJOR >= 6
|
||||||
|
offset = (INT32)hexBody.indexOf(regexp, (qsizetype)offset + 1, ®expmatch);
|
||||||
|
#else
|
||||||
offset = regexp.indexIn(hexBody, offset + 1);
|
offset = regexp.indexIn(hexBody, offset + 1);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return U_SUCCESS;
|
return U_SUCCESS;
|
||||||
@ -148,7 +191,11 @@ USTATUS FfsFinder::findTextPattern(const UModelIndex & index, const UString & pa
|
|||||||
|
|
||||||
bool hasChildren = (model->rowCount(index) > 0);
|
bool hasChildren = (model->rowCount(index) > 0);
|
||||||
for (int i = 0; i < model->rowCount(index); i++) {
|
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);
|
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;
|
UByteArray body;
|
||||||
@ -167,12 +214,16 @@ USTATUS FfsFinder::findTextPattern(const UModelIndex & index, const UString & pa
|
|||||||
|
|
||||||
UString data;
|
UString data;
|
||||||
if (unicode)
|
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
|
else
|
||||||
data = UString::fromLatin1((const char*)body.constData(), body.length());
|
data = UString::fromLatin1((const char*)body.constData(), body.length());
|
||||||
|
|
||||||
int offset = -1;
|
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)
|
msg((unicode ? UString("Unicode") : UString("ASCII")) + UString(" text \"") + UString(pattern)
|
||||||
+ UString("\" in ") + model->name(model->parent(index))
|
+ UString("\" in ") + model->name(model->parent(index))
|
||||||
|
@ -15,7 +15,12 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
#define FFSFINDER_H
|
#define FFSFINDER_H
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#if QT_VERSION_MAJOR >= 6
|
||||||
|
#include <QRegularExpression>
|
||||||
|
#else
|
||||||
#include <QRegExp>
|
#include <QRegExp>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "../common/ubytearray.h"
|
#include "../common/ubytearray.h"
|
||||||
#include "../common/ustring.h"
|
#include "../common/ustring.h"
|
||||||
|
@ -15,7 +15,11 @@
|
|||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
HexSpinBox::HexSpinBox(QWidget *parent) :
|
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}"))
|
QSpinBox(parent), validator(QRegExp("0x([0-9a-fA-F]){1,8}"))
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
this->setRange(INT_MIN, INT_MAX);
|
this->setRange(INT_MIN, INT_MAX);
|
||||||
this->setPrefix("0x");
|
this->setPrefix("0x");
|
||||||
|
@ -15,7 +15,12 @@
|
|||||||
#define HEXSPINBOX_H
|
#define HEXSPINBOX_H
|
||||||
|
|
||||||
#include <QSpinBox>
|
#include <QSpinBox>
|
||||||
|
|
||||||
|
#if QT_VERSION_MAJOR >= 6
|
||||||
|
#include <QRegularExpressionValidator>
|
||||||
|
#else
|
||||||
#include <QRegExpValidator>
|
#include <QRegExpValidator>
|
||||||
|
#endif
|
||||||
|
|
||||||
class HexSpinBox : public QSpinBox
|
class HexSpinBox : public QSpinBox
|
||||||
{
|
{
|
||||||
@ -30,7 +35,11 @@ protected:
|
|||||||
QString textFromValue(int value) const;
|
QString textFromValue(int value) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
#if QT_VERSION_MAJOR >= 6
|
||||||
|
QRegularExpressionValidator validator;
|
||||||
|
#else
|
||||||
QRegExpValidator validator;
|
QRegExpValidator validator;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // HEXSPINBOX_H
|
#endif // HEXSPINBOX_H
|
||||||
|
Binary file not shown.
@ -95,11 +95,11 @@ QByteArray Chunks::data(qint64 pos, qint64 maxSize, QByteArray *highlighted)
|
|||||||
count = maxSize;
|
count = maxSize;
|
||||||
if (count > 0)
|
if (count > 0)
|
||||||
{
|
{
|
||||||
buffer += chunk.data.mid(chunkOfs, (int)count);
|
buffer += chunk.data.mid((int)chunkOfs, (int)count);
|
||||||
maxSize -= count;
|
maxSize -= count;
|
||||||
pos += count;
|
pos += count;
|
||||||
if (highlighted)
|
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)
|
for (qint64 pos=from; (pos < _size) && (result < 0); pos += BUFFER_SIZE)
|
||||||
{
|
{
|
||||||
buffer = data(pos, BUFFER_SIZE + ba.size() - 1);
|
buffer = data(pos, BUFFER_SIZE + ba.size() - 1);
|
||||||
int findPos = buffer.indexOf(ba);
|
int findPos = (int)buffer.indexOf(ba);
|
||||||
if (findPos >= 0)
|
if (findPos >= 0)
|
||||||
result = pos + (qint64)findPos;
|
result = pos + (qint64)findPos;
|
||||||
}
|
}
|
||||||
@ -194,7 +194,7 @@ qint64 Chunks::lastIndexOf(const QByteArray &ba, qint64 from)
|
|||||||
if (sPos < 0)
|
if (sPos < 0)
|
||||||
sPos = 0;
|
sPos = 0;
|
||||||
buffer = data(sPos, pos - sPos);
|
buffer = data(sPos, pos - sPos);
|
||||||
int findPos = buffer.lastIndexOf(ba);
|
int findPos = (int)buffer.lastIndexOf(ba);
|
||||||
if (findPos >= 0)
|
if (findPos >= 0)
|
||||||
result = sPos + (qint64)findPos;
|
result = sPos + (qint64)findPos;
|
||||||
}
|
}
|
||||||
@ -214,8 +214,8 @@ bool Chunks::insert(qint64 pos, char b)
|
|||||||
else
|
else
|
||||||
chunkIdx = getChunkIndex(pos);
|
chunkIdx = getChunkIndex(pos);
|
||||||
qint64 posInBa = pos - _chunks[chunkIdx].absPos;
|
qint64 posInBa = pos - _chunks[chunkIdx].absPos;
|
||||||
_chunks[chunkIdx].data.insert(posInBa, b);
|
_chunks[chunkIdx].data.insert((int)posInBa, b);
|
||||||
_chunks[chunkIdx].dataChanged.insert(posInBa, char(1));
|
_chunks[chunkIdx].dataChanged.insert((int)posInBa, char(1));
|
||||||
for (int idx=chunkIdx+1; idx < _chunks.size(); idx++)
|
for (int idx=chunkIdx+1; idx < _chunks.size(); idx++)
|
||||||
_chunks[idx].absPos += 1;
|
_chunks[idx].absPos += 1;
|
||||||
_size += 1;
|
_size += 1;
|
||||||
@ -241,8 +241,8 @@ bool Chunks::removeAt(qint64 pos)
|
|||||||
return false;
|
return false;
|
||||||
int chunkIdx = getChunkIndex(pos);
|
int chunkIdx = getChunkIndex(pos);
|
||||||
qint64 posInBa = pos - _chunks[chunkIdx].absPos;
|
qint64 posInBa = pos - _chunks[chunkIdx].absPos;
|
||||||
_chunks[chunkIdx].data.remove(posInBa, 1);
|
_chunks[chunkIdx].data.remove((int)posInBa, 1);
|
||||||
_chunks[chunkIdx].dataChanged.remove(posInBa, 1);
|
_chunks[chunkIdx].dataChanged.remove((int)posInBa, 1);
|
||||||
for (int idx=chunkIdx+1; idx < _chunks.size(); idx++)
|
for (int idx=chunkIdx+1; idx < _chunks.size(); idx++)
|
||||||
_chunks[idx].absPos -= 1;
|
_chunks[idx].absPos -= 1;
|
||||||
_size -= 1;
|
_size -= 1;
|
||||||
|
@ -408,7 +408,13 @@ QString QHexEdit::selectionToReadableString()
|
|||||||
void QHexEdit::setFont(const QFont &font)
|
void QHexEdit::setFont(const QFont &font)
|
||||||
{
|
{
|
||||||
QWidget::setFont(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'));
|
_pxCharWidth = fontMetrics().width(QLatin1Char('2'));
|
||||||
|
#endif
|
||||||
|
|
||||||
_pxCharHeight = fontMetrics().height();
|
_pxCharHeight = fontMetrics().height();
|
||||||
_pxGapAdr = _pxCharWidth / 2;
|
_pxGapAdr = _pxCharWidth / 2;
|
||||||
_pxGapAdrHex = _pxCharWidth;
|
_pxGapAdrHex = _pxCharWidth;
|
||||||
@ -573,7 +579,7 @@ void QHexEdit::keyPressEvent(QKeyEvent *event)
|
|||||||
{
|
{
|
||||||
QByteArray ba = _chunks->data(getSelectionBegin(), getSelectionEnd() - getSelectionBegin()).toHex();
|
QByteArray ba = _chunks->data(getSelectionBegin(), getSelectionEnd() - getSelectionBegin()).toHex();
|
||||||
for (qint64 idx = 32; idx < ba.size(); idx +=33)
|
for (qint64 idx = 32; idx < ba.size(); idx +=33)
|
||||||
ba.insert(idx, "\n");
|
ba.insert((int)idx, "\n");
|
||||||
QClipboard *clipboard = QApplication::clipboard();
|
QClipboard *clipboard = QApplication::clipboard();
|
||||||
clipboard->setText(ba);
|
clipboard->setText(ba);
|
||||||
if (_overwriteMode)
|
if (_overwriteMode)
|
||||||
@ -596,7 +602,7 @@ void QHexEdit::keyPressEvent(QKeyEvent *event)
|
|||||||
QByteArray ba = QByteArray().fromHex(clipboard->text().toLatin1());
|
QByteArray ba = QByteArray().fromHex(clipboard->text().toLatin1());
|
||||||
if (_overwriteMode)
|
if (_overwriteMode)
|
||||||
{
|
{
|
||||||
ba = ba.left(std::min<qint64>(ba.size(), (_chunks->size() - _bPosCurrent)));
|
ba = ba.left((int)std::min<qint64>(ba.size(), (_chunks->size() - _bPosCurrent)));
|
||||||
replace(_bPosCurrent, ba.size(), ba);
|
replace(_bPosCurrent, ba.size(), ba);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -746,7 +752,7 @@ void QHexEdit::keyPressEvent(QKeyEvent *event)
|
|||||||
{
|
{
|
||||||
QByteArray ba = _chunks->data(getSelectionBegin(), getSelectionEnd() - getSelectionBegin()).toHex();
|
QByteArray ba = _chunks->data(getSelectionBegin(), getSelectionEnd() - getSelectionBegin()).toHex();
|
||||||
for (qint64 idx = 32; idx < ba.size(); idx += 33)
|
for (qint64 idx = 32; idx < ba.size(); idx += 33)
|
||||||
ba.insert(idx, "\n");
|
ba.insert((int)idx, "\n");
|
||||||
if(_upperCase)
|
if(_upperCase)
|
||||||
ba = ba.toUpper();
|
ba = ba.toUpper();
|
||||||
QClipboard *clipboard = QApplication::clipboard();
|
QClipboard *clipboard = QApplication::clipboard();
|
||||||
@ -875,7 +881,7 @@ void QHexEdit::paintEvent(QPaintEvent *event)
|
|||||||
else
|
else
|
||||||
r.setRect(pxPosX - _pxCharWidth, pxPosY - _pxCharHeight + _pxSelectionSub, 3*_pxCharWidth, _pxCharHeight);
|
r.setRect(pxPosX - _pxCharWidth, pxPosY - _pxCharHeight + _pxSelectionSub, 3*_pxCharWidth, _pxCharHeight);
|
||||||
painter.fillRect(r, c);
|
painter.fillRect(r, c);
|
||||||
hex = _hexDataShown.mid((bPosLine + colIdx) * 2, 2);
|
hex = _hexDataShown.mid((int)((bPosLine + colIdx) * 2), 2);
|
||||||
|
|
||||||
// upper or lower case
|
// upper or lower case
|
||||||
if (_upperCase)
|
if (_upperCase)
|
||||||
@ -887,7 +893,7 @@ void QHexEdit::paintEvent(QPaintEvent *event)
|
|||||||
// render ascii value
|
// render ascii value
|
||||||
if (_asciiArea)
|
if (_asciiArea)
|
||||||
{
|
{
|
||||||
int ch = (uchar)_dataShown.at(bPosLine + colIdx);
|
int ch = (uchar)_dataShown.at((int)(bPosLine + colIdx));
|
||||||
if ( ch < 0x20 )
|
if ( ch < 0x20 )
|
||||||
ch = '.';
|
ch = '.';
|
||||||
r.setRect(pxPosAsciiX2, pxPosY - _pxCharHeight + _pxSelectionSub, _pxCharWidth, _pxCharHeight);
|
r.setRect(pxPosAsciiX2, pxPosY - _pxCharHeight + _pxSelectionSub, _pxCharWidth, _pxCharHeight);
|
||||||
@ -977,12 +983,12 @@ void QHexEdit::setSelection(qint64 pos)
|
|||||||
|
|
||||||
int QHexEdit::getSelectionBegin()
|
int QHexEdit::getSelectionBegin()
|
||||||
{
|
{
|
||||||
return _bSelectionBegin;
|
return (int)_bSelectionBegin;
|
||||||
}
|
}
|
||||||
|
|
||||||
int QHexEdit::getSelectionEnd()
|
int QHexEdit::getSelectionEnd()
|
||||||
{
|
{
|
||||||
return _bSelectionEnd;
|
return (int)_bSelectionEnd;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ********************************************************************** Private utility functions
|
// ********************************************************************** Private utility functions
|
||||||
|
@ -16,8 +16,13 @@
|
|||||||
SearchDialog::SearchDialog(QWidget *parent) :
|
SearchDialog::SearchDialog(QWidget *parent) :
|
||||||
QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint),
|
QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint),
|
||||||
ui(new Ui::SearchDialog),
|
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\\. ])*")),
|
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}"))
|
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
|
// Create UI
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
@ -15,7 +15,13 @@
|
|||||||
#define SEARCHDIALOG_H
|
#define SEARCHDIALOG_H
|
||||||
|
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
|
|
||||||
|
#if QT_VERSION_MAJOR >= 6
|
||||||
|
#include <QRegularExpressionValidator>
|
||||||
|
#else
|
||||||
#include <QRegExpValidator>
|
#include <QRegExpValidator>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "ui_searchdialog.h"
|
#include "ui_searchdialog.h"
|
||||||
|
|
||||||
class SearchDialog : public QDialog
|
class SearchDialog : public QDialog
|
||||||
@ -31,8 +37,13 @@ private slots:
|
|||||||
void setEditFocus(int index);
|
void setEditFocus(int index);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
#if QT_VERSION_MAJOR >= 6
|
||||||
|
QRegularExpressionValidator hexValidator;
|
||||||
|
QRegularExpressionValidator guidValidator;
|
||||||
|
#else
|
||||||
QRegExpValidator hexValidator;
|
QRegExpValidator hexValidator;
|
||||||
QRegExpValidator guidValidator;
|
QRegExpValidator guidValidator;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SEARCHDIALOG_H
|
#endif // SEARCHDIALOG_H
|
||||||
|
@ -390,7 +390,12 @@ void UEFITool::goToData()
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (int j = i + 1; j < model->rowCount(parent); j++) {
|
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);
|
QModelIndex currentIndex = parent.child(j, 0);
|
||||||
|
#else
|
||||||
|
QModelIndex currentIndex = parent.model()->index(j, 0, parent);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (model->hasEmptyParsingData(currentIndex))
|
if (model->hasEmptyParsingData(currentIndex))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -788,8 +793,14 @@ void UEFITool::showParserMessages()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
std::vector<std::pair<QString, QModelIndex> > messages = ffsParser->getMessages();
|
std::vector<std::pair<QString, QModelIndex> > messages = ffsParser->getMessages();
|
||||||
|
|
||||||
|
#if QT_VERSION_MAJOR < 6
|
||||||
std::pair<QString, QModelIndex> msg;
|
std::pair<QString, QModelIndex> msg;
|
||||||
|
|
||||||
foreach (msg, messages) {
|
foreach (msg, messages) {
|
||||||
|
#else
|
||||||
|
for (const auto &msg : messages) {
|
||||||
|
#endif
|
||||||
QListWidgetItem* item = new QListWidgetItem(msg.first, NULL, 0);
|
QListWidgetItem* item = new QListWidgetItem(msg.first, NULL, 0);
|
||||||
item->setData(Qt::UserRole, QByteArray((const char*)&msg.second, sizeof(msg.second)));
|
item->setData(Qt::UserRole, QByteArray((const char*)&msg.second, sizeof(msg.second)));
|
||||||
ui->parserMessagesListWidget->addItem(item);
|
ui->parserMessagesListWidget->addItem(item);
|
||||||
@ -806,8 +817,14 @@ void UEFITool::showFinderMessages()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
std::vector<std::pair<QString, QModelIndex> > messages = ffsFinder->getMessages();
|
std::vector<std::pair<QString, QModelIndex> > messages = ffsFinder->getMessages();
|
||||||
|
|
||||||
|
#if QT_VERSION_MAJOR < 6
|
||||||
std::pair<QString, QModelIndex> msg;
|
std::pair<QString, QModelIndex> msg;
|
||||||
|
|
||||||
foreach (msg, messages) {
|
foreach (msg, messages) {
|
||||||
|
#else
|
||||||
|
for (const auto &msg : messages) {
|
||||||
|
#endif
|
||||||
QListWidgetItem* item = new QListWidgetItem(msg.first, NULL, 0);
|
QListWidgetItem* item = new QListWidgetItem(msg.first, NULL, 0);
|
||||||
item->setData(Qt::UserRole, QByteArray((const char*)&msg.second, sizeof(msg.second)));;
|
item->setData(Qt::UserRole, QByteArray((const char*)&msg.second, sizeof(msg.second)));;
|
||||||
ui->finderMessagesListWidget->addItem(item);
|
ui->finderMessagesListWidget->addItem(item);
|
||||||
@ -825,8 +842,14 @@ void UEFITool::showBuilderMessages()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
std::vector<std::pair<QString, QModelIndex> > messages = ffsBuilder->getMessages();
|
std::vector<std::pair<QString, QModelIndex> > messages = ffsBuilder->getMessages();
|
||||||
|
|
||||||
|
#if QT_VERSION_MAJOR < 6
|
||||||
std::pair<QString, QModelIndex> msg;
|
std::pair<QString, QModelIndex> msg;
|
||||||
|
|
||||||
foreach (msg, messages) {
|
foreach (msg, messages) {
|
||||||
|
#else
|
||||||
|
for (const auto &msg : messages) {
|
||||||
|
#endif
|
||||||
QListWidgetItem* item = new QListWidgetItem(msg.first, NULL, 0);
|
QListWidgetItem* item = new QListWidgetItem(msg.first, NULL, 0);
|
||||||
item->setData(Qt::UserRole, QByteArray((const char*)&msg.second, sizeof(msg.second)));
|
item->setData(Qt::UserRole, QByteArray((const char*)&msg.second, sizeof(msg.second)));
|
||||||
ui->builderMessagesListWidget->addItem(item);
|
ui->builderMessagesListWidget->addItem(item);
|
||||||
|
20
UEFITool/uefitool.entitlements
Normal file
20
UEFITool/uefitool.entitlements
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>com.apple.security.app-sandbox</key>
|
||||||
|
<true/>
|
||||||
|
<key>com.apple.security.assets.movies.read-write</key>
|
||||||
|
<true/>
|
||||||
|
<key>com.apple.security.assets.music.read-write</key>
|
||||||
|
<true/>
|
||||||
|
<key>com.apple.security.assets.pictures.read-write</key>
|
||||||
|
<true/>
|
||||||
|
<key>com.apple.security.files.downloads.read-write</key>
|
||||||
|
<true/>
|
||||||
|
<key>com.apple.security.files.user-selected.read-write</key>
|
||||||
|
<true/>
|
||||||
|
<key>com.apple.security.print</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
@ -697,9 +697,9 @@ int CBString::find (const CBString& b, int pos) const {
|
|||||||
int CBString::find (const char * b, int pos) const {
|
int CBString::find (const char * b, int pos) const {
|
||||||
int ii, j;
|
int ii, j;
|
||||||
unsigned char c0;
|
unsigned char c0;
|
||||||
register int i, l;
|
int i, l;
|
||||||
register unsigned char cx;
|
unsigned char cx;
|
||||||
register unsigned char * pdata;
|
unsigned char * pdata;
|
||||||
|
|
||||||
if (NULL == b) {
|
if (NULL == b) {
|
||||||
#ifdef BSTRLIB_THROWS_EXCEPTIONS
|
#ifdef BSTRLIB_THROWS_EXCEPTIONS
|
||||||
|
@ -92,7 +92,12 @@ USTATUS FfsBuilder::buildCapsule(const UModelIndex & index, UByteArray & capsule
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Build image
|
// Build image
|
||||||
|
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
|
||||||
UModelIndex imageIndex = index.child(0, 0);
|
UModelIndex imageIndex = index.child(0, 0);
|
||||||
|
#else
|
||||||
|
UModelIndex imageIndex = index.model()->index(0, 0, index);
|
||||||
|
#endif
|
||||||
|
|
||||||
UByteArray imageData;
|
UByteArray imageData;
|
||||||
|
|
||||||
// Check image type
|
// 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
|
// Check size of reconstructed capsule body, it must remain the same
|
||||||
UINT32 newSize = capsule.size();
|
UINT32 newSize = (UINT32)capsule.size();
|
||||||
UINT32 oldSize = model->body(index).size();
|
UINT32 oldSize = (UINT32)model->body(index).size();
|
||||||
if (newSize > oldSize) {
|
if (newSize > oldSize) {
|
||||||
msg(usprintf("buildCapsule: new capsule size %Xh (%u) is bigger than the original %Xh (%u)", newSize, newSize, oldSize, oldSize), index);
|
msg(usprintf("buildCapsule: new capsule size %Xh (%u) is bigger than the original %Xh (%u)", newSize, newSize, oldSize, oldSize), index);
|
||||||
return U_INVALID_CAPSULE;
|
return U_INVALID_CAPSULE;
|
||||||
@ -165,11 +170,19 @@ USTATUS FfsBuilder::buildIntelImage(const UModelIndex & index, UByteArray & inte
|
|||||||
// Rebuild
|
// Rebuild
|
||||||
else if (model->action(index) == Actions::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
|
// 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));
|
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
|
// Process other regions
|
||||||
for (int i = 1; i < model->rowCount(index); i++) {
|
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);
|
UModelIndex currentRegion = index.child(i, 0);
|
||||||
|
#else
|
||||||
|
UModelIndex currentRegion = index.model()->index(i, 0, index);
|
||||||
|
#endif
|
||||||
|
|
||||||
// Skip regions with Remove action
|
// Skip regions with Remove action
|
||||||
if (model->action(currentRegion) == Actions::Remove)
|
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
|
// Check size of new image, it must be same as old one
|
||||||
UINT32 newSize = intelImage.size();
|
UINT32 newSize = (UINT32)intelImage.size();
|
||||||
UINT32 oldSize = model->body(index).size();
|
UINT32 oldSize = (UINT32)model->body(index).size();
|
||||||
if (newSize > oldSize) {
|
if (newSize > oldSize) {
|
||||||
msg(usprintf("buildIntelImage: new image size %Xh (%u) is bigger than the original %Xh (%u)", newSize, newSize, oldSize, oldSize), index);
|
msg(usprintf("buildIntelImage: new image size %Xh (%u) is bigger than the original %Xh (%u)", newSize, newSize, oldSize, oldSize), index);
|
||||||
return U_INVALID_IMAGE;
|
return U_INVALID_IMAGE;
|
||||||
@ -269,7 +282,13 @@ USTATUS FfsBuilder::buildRawArea(const UModelIndex & index, UByteArray & rawArea
|
|||||||
// Build children
|
// Build children
|
||||||
for (int i = 0; i < model->rowCount(index); i++) {
|
for (int i = 0; i < model->rowCount(index); i++) {
|
||||||
USTATUS result = U_SUCCESS;
|
USTATUS result = U_SUCCESS;
|
||||||
|
|
||||||
|
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
|
||||||
UModelIndex currentChild = index.child(i, 0);
|
UModelIndex currentChild = index.child(i, 0);
|
||||||
|
#else
|
||||||
|
UModelIndex currentChild = index.model()->index(i, 0, index);
|
||||||
|
#endif
|
||||||
|
|
||||||
UByteArray currentData;
|
UByteArray currentData;
|
||||||
// Check child type
|
// Check child type
|
||||||
if (model->type(currentChild) == Types::Volume) {
|
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
|
// Check size of new raw area, it must be same as original one
|
||||||
UINT32 newSize = rawArea.size();
|
UINT32 newSize = (UINT32)rawArea.size();
|
||||||
UINT32 oldSize = model->body(index).size();
|
UINT32 oldSize = (UINT32)model->body(index).size();
|
||||||
if (newSize > oldSize) {
|
if (newSize > oldSize) {
|
||||||
msg(usprintf("buildRawArea: new area size %Xh (%u) is bigger than the original %Xh (%u)", newSize, newSize, oldSize, oldSize), index);
|
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;
|
return U_INVALID_RAW_AREA;
|
||||||
|
@ -44,8 +44,13 @@ USTATUS FfsOperations::extract(const UModelIndex & index, UString & name, UByteA
|
|||||||
extracted.clear();
|
extracted.clear();
|
||||||
// There is no need to redo decompression, we can use child items
|
// There is no need to redo decompression, we can use child items
|
||||||
for (int i = 0; i < model->rowCount(index); i++) {
|
for (int i = 0; i < model->rowCount(index); i++) {
|
||||||
UModelIndex childIndex = index.child(i, 0);
|
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
|
||||||
// Ensure 4-byte alignment of current section
|
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');
|
extracted += UByteArray(ALIGN4((UINT32)extracted.size()) - (UINT32)extracted.size(), '\x00');
|
||||||
// Add current section header, body and tail
|
// Add current section header, body and tail
|
||||||
extracted += model->header(childIndex);
|
extracted += model->header(childIndex);
|
||||||
|
@ -478,7 +478,7 @@ USTATUS FfsParser::parseIntelImage(const UByteArray & intelImage, const UINT32 l
|
|||||||
// Check for padding after the last region
|
// Check for padding after the last region
|
||||||
if ((UINT64)regions.back().offset + (UINT64)regions.back().length < (UINT64)intelImage.size()) {
|
if ((UINT64)regions.back().offset + (UINT64)regions.back().length < (UINT64)intelImage.size()) {
|
||||||
region.offset = regions.back().offset + regions.back().length;
|
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.data = intelImage.mid(region.offset, region.length);
|
||||||
region.type = getPaddingType(region.data);
|
region.type = getPaddingType(region.data);
|
||||||
regions.push_back(region);
|
regions.push_back(region);
|
||||||
@ -718,10 +718,10 @@ USTATUS FfsParser::parseMeRegion(const UByteArray & me, const UINT32 localOffset
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Search for new signature
|
// 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
|
if (versionOffset < 0){ // New signature not found
|
||||||
// Search for old signature
|
// Search for old signature
|
||||||
versionOffset = me.indexOf(ME_VERSION_SIGNATURE);
|
versionOffset = (INT32)me.indexOf(ME_VERSION_SIGNATURE);
|
||||||
if (versionOffset < 0){
|
if (versionOffset < 0){
|
||||||
info += ("\nVersion: unknown");
|
info += ("\nVersion: unknown");
|
||||||
versionFound = false;
|
versionFound = false;
|
||||||
@ -848,7 +848,7 @@ USTATUS FfsParser::parseRawArea(const UModelIndex & index)
|
|||||||
|
|
||||||
// Get item data
|
// Get item data
|
||||||
UByteArray data = model->body(index);
|
UByteArray data = model->body(index);
|
||||||
UINT32 headerSize = model->header(index).size();
|
UINT32 headerSize = (UINT32)model->header(index).size();
|
||||||
|
|
||||||
USTATUS result;
|
USTATUS result;
|
||||||
UString name;
|
UString name;
|
||||||
@ -919,7 +919,7 @@ USTATUS FfsParser::parseRawArea(const UModelIndex & index)
|
|||||||
|
|
||||||
// Update variables
|
// Update variables
|
||||||
prevItemOffset = itemOffset;
|
prevItemOffset = itemOffset;
|
||||||
prevItemSize = padding.size();
|
prevItemSize = (UINT32)padding.size();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -992,7 +992,12 @@ USTATUS FfsParser::parseRawArea(const UModelIndex & index)
|
|||||||
|
|
||||||
// Parse bodies
|
// Parse bodies
|
||||||
for (int i = 0; i < model->rowCount(index); i++) {
|
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);
|
UModelIndex current = index.child(i, 0);
|
||||||
|
#else
|
||||||
|
UModelIndex current = index.model()->index(i, 0, index);
|
||||||
|
#endif
|
||||||
|
|
||||||
switch (model->type(current)) {
|
switch (model->type(current)) {
|
||||||
case Types::Volume:
|
case Types::Volume:
|
||||||
parseVolumeBody(current);
|
parseVolumeBody(current);
|
||||||
@ -1122,7 +1127,7 @@ USTATUS FfsParser::parseVolumeHeader(const UByteArray & volume, const UINT32 loc
|
|||||||
|
|
||||||
// Check for AppleCRC32 and UsedSpace in ZeroVector
|
// Check for AppleCRC32 and UsedSpace in ZeroVector
|
||||||
bool hasAppleCrc32 = false;
|
bool hasAppleCrc32 = false;
|
||||||
UINT32 volumeSize = volume.size();
|
UINT32 volumeSize = (UINT32)volume.size();
|
||||||
UINT32 appleCrc32 = *(UINT32*)(volume.constData() + 8);
|
UINT32 appleCrc32 = *(UINT32*)(volume.constData() + 8);
|
||||||
UINT32 usedSpace = *(UINT32*)(volume.constData() + 12);
|
UINT32 usedSpace = *(UINT32*)(volume.constData() + 12);
|
||||||
if (appleCrc32 != 0) {
|
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)
|
USTATUS FfsParser::findNextRawAreaItem(const UModelIndex & index, const UINT32 localOffset, UINT8 & nextItemType, UINT32 & nextItemOffset, UINT32 & nextItemSize, UINT32 & nextItemAlternativeSize)
|
||||||
{
|
{
|
||||||
UByteArray data = model->body(index);
|
UByteArray data = model->body(index);
|
||||||
UINT32 dataSize = data.size();
|
UINT32 dataSize = (UINT32)data.size();
|
||||||
|
|
||||||
if (dataSize < sizeof(UINT32))
|
if (dataSize < sizeof(UINT32))
|
||||||
return U_STORES_NOT_FOUND;
|
return U_STORES_NOT_FOUND;
|
||||||
@ -1435,7 +1440,7 @@ USTATUS FfsParser::parseVolumeBody(const UModelIndex & index)
|
|||||||
|
|
||||||
// Get volume header size and body
|
// Get volume header size and body
|
||||||
UByteArray volumeBody = model->body(index);
|
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
|
// Parse VSS NVRAM volumes with a dedicated function
|
||||||
if (model->subtype(index) == Subtypes::NvramVolume) {
|
if (model->subtype(index) == Subtypes::NvramVolume) {
|
||||||
@ -1466,7 +1471,7 @@ USTATUS FfsParser::parseVolumeBody(const UModelIndex & index)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Search for and parse all files
|
// Search for and parse all files
|
||||||
UINT32 volumeBodySize = volumeBody.size();
|
UINT32 volumeBodySize = (UINT32)volumeBody.size();
|
||||||
UINT32 fileOffset = 0;
|
UINT32 fileOffset = 0;
|
||||||
|
|
||||||
while (fileOffset < volumeBodySize) {
|
while (fileOffset < volumeBodySize) {
|
||||||
@ -1496,7 +1501,7 @@ USTATUS FfsParser::parseVolumeBody(const UModelIndex & index)
|
|||||||
if (freeSpace.count(emptyByte) != freeSpace.size()) {
|
if (freeSpace.count(emptyByte) != freeSpace.size()) {
|
||||||
// Search for the first non-empty byte
|
// Search for the first non-empty byte
|
||||||
UINT32 i;
|
UINT32 i;
|
||||||
UINT32 size = freeSpace.size();
|
UINT32 size = (UINT32)freeSpace.size();
|
||||||
const UINT8* current = (UINT8*)freeSpace.constData();
|
const UINT8* current = (UINT8*)freeSpace.constData();
|
||||||
for (i = 0; i < size; i++) {
|
for (i = 0; i < size; i++) {
|
||||||
if (*current++ != emptyByte) {
|
if (*current++ != emptyByte) {
|
||||||
@ -1559,7 +1564,12 @@ USTATUS FfsParser::parseVolumeBody(const UModelIndex & index)
|
|||||||
|
|
||||||
// Check for duplicate GUIDs
|
// Check for duplicate GUIDs
|
||||||
for (int i = 0; i < model->rowCount(index); i++) {
|
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);
|
UModelIndex current = index.child(i, 0);
|
||||||
|
#else
|
||||||
|
UModelIndex current = index.model()->index(i, 0, index);
|
||||||
|
#endif
|
||||||
|
|
||||||
// Skip non-file entries and pad files
|
// Skip non-file entries and pad files
|
||||||
if (model->type(current) != Types::File || model->subtype(current) == EFI_FV_FILETYPE_PAD) {
|
if (model->type(current) != Types::File || model->subtype(current) == EFI_FV_FILETYPE_PAD) {
|
||||||
continue;
|
continue;
|
||||||
@ -1570,7 +1580,11 @@ USTATUS FfsParser::parseVolumeBody(const UModelIndex & index)
|
|||||||
|
|
||||||
// Check files after current for having an equal GUID
|
// Check files after current for having an equal GUID
|
||||||
for (int j = i + 1; j < model->rowCount(index); j++) {
|
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);
|
UModelIndex another = index.child(j, 0);
|
||||||
|
#else
|
||||||
|
UModelIndex another = index.model()->index(j, 0, index);
|
||||||
|
#endif
|
||||||
|
|
||||||
// Skip non-file entries
|
// Skip non-file entries
|
||||||
if (model->type(another) != Types::File) {
|
if (model->type(another) != Types::File) {
|
||||||
@ -1589,7 +1603,12 @@ USTATUS FfsParser::parseVolumeBody(const UModelIndex & index)
|
|||||||
|
|
||||||
// Parse bodies
|
// Parse bodies
|
||||||
for (int i = 0; i < model->rowCount(index); i++) {
|
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);
|
UModelIndex current = index.child(i, 0);
|
||||||
|
#else
|
||||||
|
UModelIndex current = index.model()->index(i, 0, index);
|
||||||
|
#endif
|
||||||
|
|
||||||
switch (model->type(current)) {
|
switch (model->type(current)) {
|
||||||
case Types::File:
|
case Types::File:
|
||||||
parseFileBody(current);
|
parseFileBody(current);
|
||||||
@ -1704,7 +1723,7 @@ USTATUS FfsParser::parseFileHeader(const UByteArray & file, const UINT32 localOf
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check header checksum
|
// 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;
|
bool msgInvalidHeaderChecksum = false;
|
||||||
if (fileHeader->IntegrityCheck.Checksum.Header != calculatedHeader) {
|
if (fileHeader->IntegrityCheck.Checksum.Header != calculatedHeader) {
|
||||||
msgInvalidHeaderChecksum = true;
|
msgInvalidHeaderChecksum = true;
|
||||||
@ -1715,7 +1734,7 @@ USTATUS FfsParser::parseFileHeader(const UByteArray & file, const UINT32 localOf
|
|||||||
bool msgInvalidDataChecksum = false;
|
bool msgInvalidDataChecksum = false;
|
||||||
UINT8 calculatedData = 0;
|
UINT8 calculatedData = 0;
|
||||||
if (fileHeader->Attributes & FFS_ATTRIB_CHECKSUM) {
|
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
|
// Data checksum must be one of predefined values
|
||||||
else if (volumeRevision == 1) {
|
else if (volumeRevision == 1) {
|
||||||
@ -1907,7 +1926,7 @@ USTATUS FfsParser::parsePadFileBody(const UModelIndex & index)
|
|||||||
|
|
||||||
// Search for the first non-empty byte
|
// Search for the first non-empty byte
|
||||||
UINT32 nonEmptyByteOffset;
|
UINT32 nonEmptyByteOffset;
|
||||||
UINT32 size = body.size();
|
UINT32 size = (UINT32)body.size();
|
||||||
const UINT8* current = (const UINT8*)body.constData();
|
const UINT8* current = (const UINT8*)body.constData();
|
||||||
for (nonEmptyByteOffset = 0; nonEmptyByteOffset < size; nonEmptyByteOffset++) {
|
for (nonEmptyByteOffset = 0; nonEmptyByteOffset < size; nonEmptyByteOffset++) {
|
||||||
if (*current++ != emptyByte)
|
if (*current++ != emptyByte)
|
||||||
@ -1915,7 +1934,7 @@ USTATUS FfsParser::parsePadFileBody(const UModelIndex & index)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add all bytes before as free space...
|
// Add all bytes before as free space...
|
||||||
UINT32 headerSize = model->header(index).size();
|
UINT32 headerSize = (UINT32)model->header(index).size();
|
||||||
if (nonEmptyByteOffset >= 8) {
|
if (nonEmptyByteOffset >= 8) {
|
||||||
// Align free space to 8 bytes boundary
|
// Align free space to 8 bytes boundary
|
||||||
if (nonEmptyByteOffset != ALIGN8(nonEmptyByteOffset))
|
if (nonEmptyByteOffset != ALIGN8(nonEmptyByteOffset))
|
||||||
@ -1959,8 +1978,8 @@ USTATUS FfsParser::parseSections(const UByteArray & sections, const UModelIndex
|
|||||||
return U_INVALID_PARAMETER;
|
return U_INVALID_PARAMETER;
|
||||||
|
|
||||||
// Search for and parse all sections
|
// Search for and parse all sections
|
||||||
UINT32 bodySize = sections.size();
|
UINT32 bodySize = (UINT32)sections.size();
|
||||||
UINT32 headerSize = model->header(index).size();
|
UINT32 headerSize = (UINT32)model->header(index).size();
|
||||||
UINT32 sectionOffset = 0;
|
UINT32 sectionOffset = 0;
|
||||||
USTATUS result = U_SUCCESS;
|
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
|
// Parse bodies, will be skipped if insertIntoTree is not required
|
||||||
for (int i = 0; i < model->rowCount(index); i++) {
|
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);
|
UModelIndex current = index.child(i, 0);
|
||||||
|
#else
|
||||||
|
UModelIndex current = index.model()->index(i, 0, index);
|
||||||
|
#endif
|
||||||
|
|
||||||
switch (model->type(current)) {
|
switch (model->type(current)) {
|
||||||
case Types::Section:
|
case Types::Section:
|
||||||
parseSectionBody(current);
|
parseSectionBody(current);
|
||||||
@ -2278,7 +2302,7 @@ USTATUS FfsParser::parseGuidedSectionHeader(const UByteArray & section, const UI
|
|||||||
UINT32 crc = *(UINT32*)(section.constData() + headerSize);
|
UINT32 crc = *(UINT32*)(section.constData() + headerSize);
|
||||||
additionalInfo += UString("\nChecksum type: CRC32");
|
additionalInfo += UString("\nChecksum type: CRC32");
|
||||||
// Calculate CRC32 of section data
|
// 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) {
|
if (crc == calculated) {
|
||||||
additionalInfo += usprintf("\nChecksum: %08Xh, valid", crc);
|
additionalInfo += usprintf("\nChecksum: %08Xh, valid", crc);
|
||||||
}
|
}
|
||||||
@ -2656,7 +2680,7 @@ USTATUS FfsParser::parseCompressedSectionBody(const UModelIndex & index)
|
|||||||
|
|
||||||
// Obtain required information from parsing data
|
// Obtain required information from parsing data
|
||||||
UINT8 compressionType = EFI_NOT_COMPRESSED;
|
UINT8 compressionType = EFI_NOT_COMPRESSED;
|
||||||
UINT32 uncompressedSize = model->body(index).size();
|
UINT32 uncompressedSize = (UINT32)model->body(index).size();
|
||||||
if (model->hasEmptyParsingData(index) == false) {
|
if (model->hasEmptyParsingData(index) == false) {
|
||||||
UByteArray data = model->parsingData(index);
|
UByteArray data = model->parsingData(index);
|
||||||
const COMPRESSED_SECTION_PARSING_DATA* pdata = (const COMPRESSED_SECTION_PARSING_DATA*)data.constData();
|
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;
|
return U_INVALID_PARAMETER;
|
||||||
|
|
||||||
// Add info
|
// 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()));
|
model->addInfo(index, UString("\nVersion string: ") + UString::fromUtf16((const CHAR16*)model->body(index).constData()));
|
||||||
|
#endif
|
||||||
|
|
||||||
return U_SUCCESS;
|
return U_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -2981,7 +3009,11 @@ USTATUS FfsParser::parseUiSectionBody(const UModelIndex & index)
|
|||||||
if (!index.isValid())
|
if (!index.isValid())
|
||||||
return U_INVALID_PARAMETER;
|
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());
|
UString text = UString::fromUtf16((const CHAR16*)model->body(index).constData());
|
||||||
|
#endif
|
||||||
|
|
||||||
// Add info
|
// Add info
|
||||||
model->addInfo(index, UString("\nText: ") + text);
|
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__));
|
msg(usprintf("%s: apriori file has size is not a multiple of 16", __FUNCTION__));
|
||||||
}
|
}
|
||||||
parsed.clear();
|
parsed.clear();
|
||||||
UINT32 count = body.size() / sizeof(EFI_GUID);
|
UINT32 count = (UINT32)(body.size() / sizeof(EFI_GUID));
|
||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
for (UINT32 i = 0; i < count; i++) {
|
for (UINT32 i = 0; i < count; i++) {
|
||||||
const EFI_GUID* guid = (const EFI_GUID*)body.constData() + i;
|
const EFI_GUID* guid = (const EFI_GUID*)body.constData() + i;
|
||||||
@ -3207,7 +3239,7 @@ USTATUS FfsParser::performSecondPass(const UModelIndex & index)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Calculate address difference
|
// 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;
|
addressDiff = 0xFFFFFFFFULL - model->base(lastVtf) - vtfSize + 1;
|
||||||
|
|
||||||
// Parse reset vector data
|
// Parse reset vector data
|
||||||
@ -3280,7 +3312,7 @@ USTATUS FfsParser::checkTeImageBase(const UModelIndex & index)
|
|||||||
if (originalImageBase != 0 || adjustedImageBase != 0) {
|
if (originalImageBase != 0 || adjustedImageBase != 0) {
|
||||||
// Check data memory address to be equal to either OriginalImageBase or AdjustedImageBase
|
// Check data memory address to be equal to either OriginalImageBase or AdjustedImageBase
|
||||||
UINT64 address = addressDiff + model->base(index);
|
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) {
|
if (originalImageBase == base) {
|
||||||
imageBaseType = EFI_IMAGE_TE_BASE_ORIGINAL;
|
imageBaseType = EFI_IMAGE_TE_BASE_ORIGINAL;
|
||||||
@ -3318,7 +3350,11 @@ USTATUS FfsParser::checkTeImageBase(const UModelIndex & index)
|
|||||||
|
|
||||||
// Process child items
|
// Process child items
|
||||||
for (int i = 0; i < model->rowCount(index); i++) {
|
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));
|
checkTeImageBase(index.child(i, 0));
|
||||||
|
#else
|
||||||
|
checkTeImageBase(index.model()->index(i, 0, index));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return U_SUCCESS;
|
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
|
// Add physical address of the whole item or it's header and data portions separately
|
||||||
UINT64 address = addressDiff + model->base(index);
|
UINT64 address = addressDiff + model->base(index);
|
||||||
if (address <= 0xFFFFFFFFUL) {
|
if (address <= 0xFFFFFFFFUL) {
|
||||||
UINT32 headerSize = model->header(index).size();
|
UINT32 headerSize = (UINT32)model->header(index).size();
|
||||||
if (headerSize) {
|
if (headerSize) {
|
||||||
model->addInfo(index, usprintf("Data address: %08Xh\n", address + headerSize),false);
|
model->addInfo(index, usprintf("Data address: %08Xh\n", address + headerSize),false);
|
||||||
model->addInfo(index, usprintf("Header address: %08Xh\n", address), false);
|
model->addInfo(index, usprintf("Header address: %08Xh\n", address), false);
|
||||||
@ -3355,7 +3391,11 @@ USTATUS FfsParser::addInfoRecursive(const UModelIndex & index)
|
|||||||
|
|
||||||
// Process child items
|
// Process child items
|
||||||
for (int i = 0; i < model->rowCount(index); i++) {
|
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));
|
addInfoRecursive(index.child(i, 0));
|
||||||
|
#else
|
||||||
|
addInfoRecursive(index.model()->index(i, 0, index));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return U_SUCCESS;
|
return U_SUCCESS;
|
||||||
@ -3443,7 +3483,7 @@ USTATUS FfsParser::checkProtectedRanges(const UModelIndex & index)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
bgProtectedRanges[i].Offset = model->base(dxeRootVolumeIndex);
|
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);
|
protectedParts = openedImage.mid(bgProtectedRanges[i].Offset, bgProtectedRanges[i].Size);
|
||||||
|
|
||||||
UByteArray digest(SHA256_DIGEST_SIZE, '\x00');
|
UByteArray digest(SHA256_DIGEST_SIZE, '\x00');
|
||||||
@ -3534,7 +3574,7 @@ USTATUS FfsParser::markProtectedRangeRecursive(const UModelIndex & index, const
|
|||||||
// Mark normal items
|
// Mark normal items
|
||||||
else {
|
else {
|
||||||
UINT32 currentOffset = model->base(index);
|
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 (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
|
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++) {
|
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);
|
markProtectedRangeRecursive(index.child(i, 0), range);
|
||||||
|
#else
|
||||||
|
markProtectedRangeRecursive(index.model()->index(i, 0, index), range);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return U_SUCCESS;
|
return U_SUCCESS;
|
||||||
@ -3856,7 +3900,12 @@ void FfsParser::findFitRecursive(const UModelIndex & index, UModelIndex & found,
|
|||||||
|
|
||||||
// Process child items
|
// Process child items
|
||||||
for (int i = 0; i < model->rowCount(index); i++) {
|
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);
|
findFitRecursive(index.child(i, 0), found, fitOffset);
|
||||||
|
#else
|
||||||
|
findFitRecursive(index.model()->index(i, 0, index), found, fitOffset);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (found.isValid())
|
if (found.isValid())
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -3864,11 +3913,11 @@ void FfsParser::findFitRecursive(const UModelIndex & index, UModelIndex & found,
|
|||||||
// Check for all FIT signatures in item's body
|
// Check for all FIT signatures in item's body
|
||||||
UByteArray lastVtfBody = model->body(lastVtf);
|
UByteArray lastVtfBody = model->body(lastVtf);
|
||||||
UINT32 storedFitAddress = *(const UINT32*)(lastVtfBody.constData() + lastVtfBody.size() - FIT_POINTER_OFFSET);
|
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 >= 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
|
// 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
|
// Check FIT address to be stored in the last VTF
|
||||||
if (fitAddress == storedFitAddress) {
|
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)
|
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)) {
|
if (dataSize < sizeof(UINT64)) {
|
||||||
return U_ELEMENTS_NOT_FOUND;
|
return U_ELEMENTS_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,7 @@ USTATUS FfsReport::generateRecursive(std::vector<UString> & report, const UModel
|
|||||||
|
|
||||||
// Calculate item CRC32
|
// Calculate item CRC32
|
||||||
UByteArray data = model->header(index) + model->body(index) + model->tail(index);
|
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
|
// Information on current item
|
||||||
UString text = model->text(index);
|
UString text = model->text(index);
|
||||||
@ -68,7 +68,11 @@ USTATUS FfsReport::generateRecursive(std::vector<UString> & report, const UModel
|
|||||||
|
|
||||||
// Information on child items
|
// Information on child items
|
||||||
for (int i = 0; i < model->rowCount(index); i++) {
|
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);
|
generateRecursive(report, index.child(i,0), level + 1);
|
||||||
|
#else
|
||||||
|
generateRecursive(report, index.model()->index(i,0,index), level + 1);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return U_SUCCESS;
|
return U_SUCCESS;
|
||||||
|
@ -40,7 +40,12 @@ USTATUS findFileRecursive(TreeModel *model, const UModelIndex index, const UStri
|
|||||||
|
|
||||||
bool hasChildren = (model->rowCount(index) > 0);
|
bool hasChildren = (model->rowCount(index) > 0);
|
||||||
for (int i = 0; i < model->rowCount(index); i++) {
|
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);
|
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;
|
UByteArray data;
|
||||||
|
@ -116,7 +116,12 @@ GuidDatabase guidDatabaseFromTreeRecursive(TreeModel * model, const UModelIndex
|
|||||||
return db;
|
return db;
|
||||||
|
|
||||||
for (int i = 0; i < model->rowCount(index); i++) {
|
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()));
|
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());
|
db.insert(tmpDb.begin(), tmpDb.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -165,7 +165,7 @@ USTATUS MeParser::parseFptRegion(const UByteArray & region, const UModelIndex &
|
|||||||
|
|
||||||
// Add partition table entries
|
// Add partition table entries
|
||||||
std::vector<FPT_PARTITION_INFO> partitions;
|
std::vector<FPT_PARTITION_INFO> partitions;
|
||||||
UINT32 offset = header.size();
|
UINT32 offset = (UINT32)header.size();
|
||||||
const FPT_HEADER_ENTRY* firstPtEntry = (const FPT_HEADER_ENTRY*)(region.constData() + offset);
|
const FPT_HEADER_ENTRY* firstPtEntry = (const FPT_HEADER_ENTRY*)(region.constData() + offset);
|
||||||
for (UINT8 i = 0; i < ptHeader->NumEntries; i++) {
|
for (UINT8 i = 0; i < ptHeader->NumEntries; i++) {
|
||||||
// Populate entry header
|
// Populate entry header
|
||||||
@ -265,7 +265,7 @@ make_partition_table_consistent:
|
|||||||
// Check for padding after the last region
|
// Check for padding after the last region
|
||||||
if ((UINT32)partitions.back().ptEntry.Offset + (UINT32)partitions.back().ptEntry.Size < (UINT32)region.size()) {
|
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.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;
|
padding.type = Types::Padding;
|
||||||
partitions.push_back(padding);
|
partitions.push_back(padding);
|
||||||
}
|
}
|
||||||
@ -422,7 +422,7 @@ make_partition_table_consistent:
|
|||||||
// Check for padding after the last region
|
// Check for padding after the last region
|
||||||
if ((UINT32)partitions.back().ptEntry.Offset + (UINT32)partitions.back().ptEntry.Size < (UINT32)region.size()) {
|
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.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;
|
padding.type = Types::Padding;
|
||||||
partitions.push_back(padding);
|
partitions.push_back(padding);
|
||||||
}
|
}
|
||||||
@ -604,7 +604,7 @@ make_partition_table_consistent:
|
|||||||
// Check for padding after the last region
|
// Check for padding after the last region
|
||||||
if ((UINT32)partitions.back().ptEntry.Offset + (UINT32)partitions.back().ptEntry.Size < (UINT32)region.size()) {
|
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.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;
|
padding.type = Types::Padding;
|
||||||
partitions.push_back(padding);
|
partitions.push_back(padding);
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,7 @@ USTATUS NvramParser::parseNvarStore(const UModelIndex & index)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get local offset
|
// Get local offset
|
||||||
UINT32 localOffset = model->header(index).size();
|
UINT32 localOffset = (UINT32)model->header(index).size();
|
||||||
|
|
||||||
// Get item data
|
// Get item data
|
||||||
const UByteArray data = model->body(index);
|
const UByteArray data = model->body(index);
|
||||||
@ -121,7 +121,7 @@ USTATUS NvramParser::parseNvarStore(const UModelIndex & index)
|
|||||||
guidArea.size(), guidArea.size(),
|
guidArea.size(), guidArea.size(),
|
||||||
guidsInStore);
|
guidsInStore);
|
||||||
// Add tree item
|
// 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;
|
return U_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -230,7 +230,12 @@ USTATUS NvramParser::parseNvarStore(const UModelIndex & index)
|
|||||||
// Search previously added entries for a link to this variable
|
// Search previously added entries for a link to this variable
|
||||||
// WARNING: O(n^2), may be very slow
|
// WARNING: O(n^2), may be very slow
|
||||||
for (int i = model->rowCount(index) - 1; i >= 0; i--) {
|
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);
|
nvarIndex = index.child(i, 0);
|
||||||
|
#else
|
||||||
|
nvarIndex = index.model()->index(i, 0, index);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (model->hasEmptyParsingData(nvarIndex) == false) {
|
if (model->hasEmptyParsingData(nvarIndex) == false) {
|
||||||
UByteArray nvarData = model->parsingData(nvarIndex);
|
UByteArray nvarData = model->parsingData(nvarIndex);
|
||||||
const NVAR_ENTRY_PARSING_DATA nvarPdata = readUnaligned((const NVAR_ENTRY_PARSING_DATA*)nvarData.constData());
|
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;
|
UINT32 nameSize = 0;
|
||||||
if (entryHeader->Attributes & NVRAM_NVAR_ENTRY_ASCII_NAME) { // Name is stored as ASCII string of CHAR8s
|
if (entryHeader->Attributes & NVRAM_NVAR_ENTRY_ASCII_NAME) { // Name is stored as ASCII string of CHAR8s
|
||||||
text = UString(namePtr);
|
text = UString(namePtr);
|
||||||
nameSize = text.length() + 1;
|
nameSize = (UINT32)(text.length() + 1);
|
||||||
}
|
}
|
||||||
else { // Name is stored as UCS2 string of CHAR16s
|
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);
|
text = UString::fromUtf16((CHAR16*)namePtr);
|
||||||
nameSize = (text.length() + 1) * 2;
|
#endif
|
||||||
|
|
||||||
|
nameSize = (UINT32)((text.length() + 1) * 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get entry GUID
|
// Get entry GUID
|
||||||
@ -388,7 +398,7 @@ USTATUS NvramParser::parseNvramVolumeBody(const UModelIndex & index)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get local offset
|
// Get local offset
|
||||||
UINT32 localOffset = model->header(index).size();
|
UINT32 localOffset = (UINT32)model->header(index).size();
|
||||||
|
|
||||||
// Get item data
|
// Get item data
|
||||||
UByteArray data = model->body(index);
|
UByteArray data = model->body(index);
|
||||||
@ -455,7 +465,7 @@ USTATUS NvramParser::parseNvramVolumeBody(const UModelIndex & index)
|
|||||||
|
|
||||||
// Update variables
|
// Update variables
|
||||||
prevStoreOffset = storeOffset;
|
prevStoreOffset = storeOffset;
|
||||||
prevStoreSize = padding.size();
|
prevStoreSize = (UINT32)padding.size();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -497,7 +507,12 @@ USTATUS NvramParser::parseNvramVolumeBody(const UModelIndex & index)
|
|||||||
|
|
||||||
// Parse bodies
|
// Parse bodies
|
||||||
for (int i = 0; i < model->rowCount(index); i++) {
|
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);
|
UModelIndex current = index.child(i, 0);
|
||||||
|
#else
|
||||||
|
UModelIndex current = index.model()->index(i, 0, index);
|
||||||
|
#endif
|
||||||
|
|
||||||
switch (model->type(current)) {
|
switch (model->type(current)) {
|
||||||
case Types::FdcStore:
|
case Types::FdcStore:
|
||||||
parseFdcStoreBody(current);
|
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)
|
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))
|
if (dataSize < sizeof(UINT32))
|
||||||
return U_STORES_NOT_FOUND;
|
return U_STORES_NOT_FOUND;
|
||||||
@ -1286,7 +1301,7 @@ USTATUS NvramParser::parseFdcStoreBody(const UModelIndex & index)
|
|||||||
const UByteArray data = model->body(index);
|
const UByteArray data = model->body(index);
|
||||||
|
|
||||||
// Get local offset
|
// 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
|
// The body is a firmware volume with either a VSS or VSS2 store
|
||||||
UModelIndex volumeIndex;
|
UModelIndex volumeIndex;
|
||||||
@ -1300,14 +1315,14 @@ USTATUS NvramParser::parseFdcStoreBody(const UModelIndex & index)
|
|||||||
UByteArray store = model->body(volumeIndex);
|
UByteArray store = model->body(volumeIndex);
|
||||||
if ((UINT32)store.size() >= sizeof(UINT32) && *(const UINT32*)store.constData() == NVRAM_VSS_STORE_SIGNATURE) {
|
if ((UINT32)store.size() >= sizeof(UINT32) && *(const UINT32*)store.constData() == NVRAM_VSS_STORE_SIGNATURE) {
|
||||||
UModelIndex vssIndex;
|
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)
|
if (status)
|
||||||
return status;
|
return status;
|
||||||
return parseVssStoreBody(vssIndex, 0);
|
return parseVssStoreBody(vssIndex, 0);
|
||||||
}
|
}
|
||||||
else if ((UINT32)store.size() >= sizeof(EFI_GUID) && store.left(sizeof(EFI_GUID)) == NVRAM_FDC_STORE_GUID) {
|
else if ((UINT32)store.size() >= sizeof(EFI_GUID) && store.left(sizeof(EFI_GUID)) == NVRAM_FDC_STORE_GUID) {
|
||||||
UModelIndex vss2Index;
|
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)
|
if (status)
|
||||||
return status;
|
return status;
|
||||||
return parseVssStoreBody(vss2Index, 0);
|
return parseVssStoreBody(vss2Index, 0);
|
||||||
@ -1335,7 +1350,7 @@ USTATUS NvramParser::parseVssStoreBody(const UModelIndex & index, UINT8 alignmen
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get local offset
|
// Get local offset
|
||||||
UINT32 localOffset = model->header(index).size();
|
UINT32 localOffset = (UINT32)model->header(index).size();
|
||||||
|
|
||||||
// Get item data
|
// Get item data
|
||||||
const UByteArray data = model->body(index);
|
const UByteArray data = model->body(index);
|
||||||
@ -1396,7 +1411,7 @@ USTATUS NvramParser::parseVssStoreBody(const UModelIndex & index, UINT8 alignmen
|
|||||||
|
|
||||||
// Calculate CRC32 of the variable data
|
// Calculate CRC32 of the variable data
|
||||||
storedCrc32 = appleVariableHeader->DataCrc32;
|
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
|
else { // Add GUID and text for valid variables
|
||||||
name = guidToUString(readUnaligned(variableGuid));
|
name = guidToUString(readUnaligned(variableGuid));
|
||||||
info += UString("Variable GUID: ") + guidToUString(readUnaligned(variableGuid), false) + UString("\n");
|
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);
|
text = UString::fromUtf16(variableName);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add info
|
// Add info
|
||||||
@ -1555,7 +1575,7 @@ USTATUS NvramParser::parseFsysStoreBody(const UModelIndex & index)
|
|||||||
return U_INVALID_PARAMETER;
|
return U_INVALID_PARAMETER;
|
||||||
|
|
||||||
// Get local offset
|
// Get local offset
|
||||||
UINT32 localOffset = model->header(index).size();
|
UINT32 localOffset = (UINT32)model->header(index).size();
|
||||||
|
|
||||||
// Get item data
|
// Get item data
|
||||||
const UByteArray data = model->body(index);
|
const UByteArray data = model->body(index);
|
||||||
@ -1658,7 +1678,7 @@ USTATUS NvramParser::parseEvsaStoreBody(const UModelIndex & index)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get local offset
|
// Get local offset
|
||||||
UINT32 localOffset = model->header(index).size();
|
UINT32 localOffset = (UINT32)model->header(index).size();
|
||||||
|
|
||||||
// Get item data
|
// Get item data
|
||||||
const UByteArray data = model->body(index);
|
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;
|
const EVSA_NAME_ENTRY* nameHeader = (const EVSA_NAME_ENTRY*)entryHeader;
|
||||||
header = data.mid(offset, sizeof(EVSA_NAME_ENTRY));
|
header = data.mid(offset, sizeof(EVSA_NAME_ENTRY));
|
||||||
body = data.mid(offset + sizeof(EVSA_NAME_ENTRY), nameHeader->Header.Size - 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());
|
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",
|
info = UString("Name: ") + name + usprintf("\nFull size: %Xh (%u)\nHeader size %Xh (%u)\nBody size: %Xh (%u)\nType: %02Xh\nChecksum: %02Xh",
|
||||||
variableSize, variableSize,
|
variableSize, variableSize,
|
||||||
header.size(), header.size(),
|
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
|
// 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++) {
|
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);
|
UModelIndex current = index.child(i, 0);
|
||||||
|
#else
|
||||||
|
UModelIndex current = index.model()->index(i, 0, index);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (model->subtype(current) == Subtypes::DataEvsaEntry) {
|
if (model->subtype(current) == Subtypes::DataEvsaEntry) {
|
||||||
UByteArray header = model->header(current);
|
UByteArray header = model->header(current);
|
||||||
const EVSA_DATA_ENTRY* dataHeader = (const EVSA_DATA_ENTRY*)header.constData();
|
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;
|
return U_INVALID_PARAMETER;
|
||||||
|
|
||||||
// Get parsing data for the current item
|
// 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);
|
const UByteArray data = model->body(index);
|
||||||
|
|
||||||
|
|
||||||
|
@ -109,8 +109,8 @@ static void sha256_compress(struct sha256_state *md, unsigned char *buf)
|
|||||||
}
|
}
|
||||||
/* Compress */
|
/* Compress */
|
||||||
#define RND(a,b,c,d,e,f,g,h,i) \
|
#define RND(a,b,c,d,e,f,g,h,i) \
|
||||||
t0 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i]; \
|
t0 = (uint32_t)(h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i]); \
|
||||||
t1 = Sigma0(a) + Maj(a, b, c); \
|
t1 = (uint32_t)(Sigma0(a) + Maj(a, b, c)); \
|
||||||
d += t0; \
|
d += t0; \
|
||||||
h = t0 + t1;
|
h = t0 + t1;
|
||||||
for (i = 0; i < 64; ++i) {
|
for (i = 0; i < 64; ++i) {
|
||||||
|
@ -43,7 +43,7 @@ QVariant TreeModel::data(const UModelIndex &index, int role) const
|
|||||||
Qt::ItemFlags TreeModel::flags(const UModelIndex &index) const
|
Qt::ItemFlags TreeModel::flags(const UModelIndex &index) const
|
||||||
{
|
{
|
||||||
if (!index.isValid())
|
if (!index.isValid())
|
||||||
return 0;
|
return Qt::NoItemFlags;
|
||||||
|
|
||||||
return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
|
return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
|
||||||
}
|
}
|
||||||
@ -559,9 +559,14 @@ UModelIndex TreeModel::findByBase(UINT32 base) const
|
|||||||
goDeeper:
|
goDeeper:
|
||||||
int n = rowCount(parentIndex);
|
int n = rowCount(parentIndex);
|
||||||
for (int i = 0; i < n; i++) {
|
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);
|
UModelIndex currentIndex = parentIndex.child(i, 0);
|
||||||
|
#else
|
||||||
|
UModelIndex currentIndex = parentIndex.model()->index(i, 0, parentIndex);
|
||||||
|
#endif
|
||||||
|
|
||||||
UINT32 currentBase = this->base(currentIndex);
|
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
|
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)
|
&& currentBase <= base && base < currentBase + fullSize) { // Base must be in range [currentBase, currentBase + fullSize)
|
||||||
// Found a better candidate
|
// Found a better candidate
|
||||||
|
@ -86,7 +86,6 @@ private:
|
|||||||
#if defined(QT_CORE_LIB)
|
#if defined(QT_CORE_LIB)
|
||||||
class TreeModel : public QAbstractItemModel
|
class TreeModel : public QAbstractItemModel
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
|
||||||
private:
|
private:
|
||||||
TreeItem *rootItem;
|
TreeItem *rootItem;
|
||||||
bool markingEnabledFlag;
|
bool markingEnabledFlag;
|
||||||
|
@ -45,14 +45,14 @@ public:
|
|||||||
UByteArray toUpper() { std::basic_string<char> s = d; std::transform(s.begin(), s.end(), s.begin(), ::toupper); return UByteArray(s); }
|
UByteArray toUpper() { std::basic_string<char> 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); }
|
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 size() const { return (int32_t)d.size(); }
|
||||||
int32_t count(char ch) const { return std::count(d.begin(), d.end(), ch); }
|
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 at(uint32_t i) const { return d.at(i); }
|
||||||
char operator[](uint32_t i) const { return d[i]; }
|
char operator[](uint32_t i) const { return d[i]; }
|
||||||
char& operator[](uint32_t i) { return d[i]; }
|
char& operator[](uint32_t i) { return d[i]; }
|
||||||
|
|
||||||
bool startsWith(const UByteArray & ba) const { return 0 == d.find(ba.d, 0); }
|
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 {
|
int lastIndexOf(const UByteArray & ba, int from = 0) const {
|
||||||
size_t old_index = d.npos;
|
size_t old_index = d.npos;
|
||||||
size_t index = d.find(ba.d, from);
|
size_t index = d.find(ba.d, from);
|
||||||
@ -60,7 +60,7 @@ public:
|
|||||||
old_index = index;
|
old_index = index;
|
||||||
index = d.find(ba.d, index + 1);
|
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); }
|
UByteArray left(int32_t len) const { return d.substr(0, len); }
|
||||||
|
@ -19,7 +19,13 @@ UString usprintf(const char* fmt, ...)
|
|||||||
UString msg;
|
UString msg;
|
||||||
va_list vl;
|
va_list vl;
|
||||||
va_start(vl, fmt);
|
va_start(vl, fmt);
|
||||||
|
|
||||||
|
#if ((QT_VERSION_MAJOR == 5) && (QT_VERSION_MINOR < 6)) || (QT_VERSION_MAJOR < 5)
|
||||||
msg.vsprintf(fmt, vl);
|
msg.vsprintf(fmt, vl);
|
||||||
|
#else
|
||||||
|
msg = msg.vasprintf(fmt, vl);
|
||||||
|
#endif
|
||||||
|
|
||||||
va_end(vl);
|
va_end(vl);
|
||||||
return msg;
|
return msg;
|
||||||
};
|
};
|
||||||
|
@ -102,7 +102,7 @@ UString uniqueItemName(const UModelIndex & index)
|
|||||||
'<', '>', ':', '\"', '\\', '|', '?', '*', // Banned in Windows
|
'<', '>', ':', '\"', '\\', '|', '?', '*', // Banned in Windows
|
||||||
' ' // Provides better readability
|
' ' // 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 (int i = 0; i < nameLength; i++) {
|
||||||
for (size_t j = 0; j < sizeof(table); j++) {
|
for (size_t j = 0; j < sizeof(table); j++) {
|
||||||
if (name[i] == table[j]) {
|
if (name[i] == table[j]) {
|
||||||
@ -200,7 +200,7 @@ USTATUS decompress(const UByteArray & compressedData, const UINT8 compressionTyp
|
|||||||
|
|
||||||
// Get buffer sizes
|
// Get buffer sizes
|
||||||
data = (UINT8*)compressedData.data();
|
data = (UINT8*)compressedData.data();
|
||||||
dataSize = compressedData.size();
|
dataSize = (UINT32)compressedData.size();
|
||||||
|
|
||||||
// Check header to be valid
|
// Check header to be valid
|
||||||
header = (const EFI_TIANO_HEADER*)data;
|
header = (const EFI_TIANO_HEADER*)data;
|
||||||
@ -260,7 +260,7 @@ USTATUS decompress(const UByteArray & compressedData, const UINT8 compressionTyp
|
|||||||
|
|
||||||
// Get buffer sizes
|
// Get buffer sizes
|
||||||
data = (const UINT8*)compressedData.constData();
|
data = (const UINT8*)compressedData.constData();
|
||||||
dataSize = compressedData.size();
|
dataSize = (UINT32)compressedData.size();
|
||||||
|
|
||||||
// Get info as normal LZMA section
|
// Get info as normal LZMA section
|
||||||
if (U_SUCCESS != LzmaGetInfo(data, dataSize, &decompressedSize)) {
|
if (U_SUCCESS != LzmaGetInfo(data, dataSize, &decompressedSize)) {
|
||||||
@ -305,7 +305,7 @@ USTATUS decompress(const UByteArray & compressedData, const UINT8 compressionTyp
|
|||||||
|
|
||||||
// Get buffer sizes
|
// Get buffer sizes
|
||||||
data = (const UINT8*)compressedData.constData();
|
data = (const UINT8*)compressedData.constData();
|
||||||
dataSize = compressedData.size();
|
dataSize = (UINT32)compressedData.size();
|
||||||
|
|
||||||
// Get info as normal LZMA section
|
// Get info as normal LZMA section
|
||||||
if (U_SUCCESS != LzmaGetInfo(data, dataSize, &decompressedSize)) {
|
if (U_SUCCESS != LzmaGetInfo(data, dataSize, &decompressedSize)) {
|
||||||
@ -498,7 +498,7 @@ USTATUS gzipDecompress(const UByteArray & input, UByteArray & output)
|
|||||||
|
|
||||||
z_stream stream;
|
z_stream stream;
|
||||||
stream.next_in = (z_const Bytef *)input.data();
|
stream.next_in = (z_const Bytef *)input.data();
|
||||||
stream.avail_in = input.size();
|
stream.avail_in = (uInt)input.size();
|
||||||
stream.zalloc = Z_NULL;
|
stream.zalloc = Z_NULL;
|
||||||
stream.zfree = Z_NULL;
|
stream.zfree = Z_NULL;
|
||||||
stream.opaque = Z_NULL;
|
stream.opaque = Z_NULL;
|
||||||
|
@ -14,6 +14,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
#ifndef VERSION_H
|
#ifndef VERSION_H
|
||||||
#define VERSION_H
|
#define VERSION_H
|
||||||
|
|
||||||
#define PROGRAM_VERSION "NE alpha 58" " (" __DATE__ ")"
|
#define PROGRAM_VERSION "NE alpha 59" " (" __DATE__ ")"
|
||||||
|
|
||||||
#endif // VERSION_H
|
#endif // VERSION_H
|
||||||
|
Loading…
Reference in New Issue
Block a user