From 97d7a00989f8d5df15eb68d90c1af547b67b3fa4 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Wed, 21 Mar 2018 18:03:10 +0100 Subject: rcc: don't drop entries with missing files in -list mode the files may not exist _yet_. this change allows dynamically generating the resource contents. the ignoreErrors parameter is renamed to listMode and made less aggressive, to better reflect the actual usage. Change-Id: I2f6a75a23f1ef903f0d957f9a09f4df0ce2a2b35 Reviewed-by: Thiago Macieira Reviewed-by: hjk Reviewed-by: Kai Koehne --- src/tools/rcc/rcc.cpp | 18 +++++++----------- src/tools/rcc/rcc.h | 4 ++-- 2 files changed, 9 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/tools/rcc/rcc.cpp b/src/tools/rcc/rcc.cpp index 4c7d095ca3..1a7cab01df 100644 --- a/src/tools/rcc/rcc.cpp +++ b/src/tools/rcc/rcc.cpp @@ -377,7 +377,7 @@ enum RCCXmlTag { Q_DECLARE_TYPEINFO(RCCXmlTag, Q_PRIMITIVE_TYPE); bool RCCResourceLibrary::interpretResourceFile(QIODevice *inputDevice, - const QString &fname, QString currentPath, bool ignoreErrors) + const QString &fname, QString currentPath, bool listMode) { Q_ASSERT(m_errorDevice); const QChar slash = QLatin1Char('/'); @@ -527,7 +527,7 @@ bool RCCResourceLibrary::interpretResourceFile(QIODevice *inputDevice, m_failedResources.push_back(child.fileName()); } } - } else if (file.isFile()) { + } else if (listMode || file.isFile()) { const bool arc = addFile(alias, RCCFileInfo(alias.section(slash, -1), @@ -551,8 +551,6 @@ bool RCCResourceLibrary::interpretResourceFile(QIODevice *inputDevice, const QString msg = QString::fromLatin1("RCC: Error in '%1': Cannot find file '%2'\n") .arg(fname, fileName); m_errorDevice->write(msg.toUtf8()); - if (ignoreErrors) - continue; return false; } } @@ -564,8 +562,6 @@ bool RCCResourceLibrary::interpretResourceFile(QIODevice *inputDevice, } if (reader.hasError()) { - if (ignoreErrors) - return true; int errorLine = reader.lineNumber(); int errorColumn = reader.columnNumber(); QString errorMessage = reader.errorString(); @@ -577,7 +573,7 @@ bool RCCResourceLibrary::interpretResourceFile(QIODevice *inputDevice, if (m_root == 0) { const QString msg = QString::fromLatin1("RCC: Warning: No resources in '%1'.\n").arg(fname); m_errorDevice->write(msg.toUtf8()); - if (!ignoreErrors && m_format == Binary) { + if (!listMode && m_format == Binary) { // create dummy entry, otherwise loading with QResource will crash m_root = new RCCFileInfo(QString(), QFileInfo(), QLocale::C, QLocale::AnyCountry, RCCFileInfo::Directory); @@ -645,14 +641,14 @@ void RCCResourceLibrary::reset() } -bool RCCResourceLibrary::readFiles(bool ignoreErrors, QIODevice &errorDevice) +bool RCCResourceLibrary::readFiles(bool listMode, QIODevice &errorDevice) { reset(); m_errorDevice = &errorDevice; //read in data if (m_verbose) { - const QString msg = QString::fromLatin1("Processing %1 files [%2]\n") - .arg(m_fileNames.size()).arg(static_cast(ignoreErrors)); + const QString msg = QString::fromLatin1("Processing %1 files [listMode=%2]\n") + .arg(m_fileNames.size()).arg(static_cast(listMode)); m_errorDevice->write(msg.toUtf8()); } for (int i = 0; i < m_fileNames.size(); ++i) { @@ -680,7 +676,7 @@ bool RCCResourceLibrary::readFiles(bool ignoreErrors, QIODevice &errorDevice) m_errorDevice->write(msg.toUtf8()); } - if (!interpretResourceFile(&fileIn, fname, pwd, ignoreErrors)) + if (!interpretResourceFile(&fileIn, fname, pwd, listMode)) return false; } return true; diff --git a/src/tools/rcc/rcc.h b/src/tools/rcc/rcc.h index 19e04e401d..36984cf38a 100644 --- a/src/tools/rcc/rcc.h +++ b/src/tools/rcc/rcc.h @@ -53,7 +53,7 @@ public: bool output(QIODevice &outDevice, QIODevice &tempDevice, QIODevice &errorDevice); - bool readFiles(bool ignoreErrors, QIODevice &errorDevice); + bool readFiles(bool listMode, QIODevice &errorDevice); enum Format { Binary, C_Code, Pass1, Pass2 }; void setFormat(Format f) { m_format = f; } @@ -109,7 +109,7 @@ private: void reset(); bool addFile(const QString &alias, const RCCFileInfo &file); bool interpretResourceFile(QIODevice *inputDevice, const QString &file, - QString currentPath = QString(), bool ignoreErrors = false); + QString currentPath = QString(), bool listMode = false); bool writeHeader(); bool writeDataBlobs(); bool writeDataNames(); -- cgit v1.2.3