summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@qt.io>2016-10-28 20:10:40 +0200
committerOswald Buddenhagen <oswald.buddenhagen@qt.io>2018-09-14 13:50:13 +0000
commit7eefa1f07bbe5a2482d1d936a190c9b9e9eea4f0 (patch)
treefd77c0c365ff2d5d10b69e098a09c3e56b624a3b
parent3fc48e19ac8f63eb578921cdf0905fad625427dc (diff)
downloadqttools-7eefa1f07bbe5a2482d1d936a190c9b9e9eea4f0.tar.gz
qmake: let QMakeVfs::readFile() report ENOFILE explicitly
when the QFile object is already constructed, querying whether the file exists is actually cheap, so do it right away instead of later on demand. that makes the calling code a bit cleaner. fwiw, that we need to explicitly query the file's existence at all is a result of QFile's completely useless error "codes" (which merely say which function failed, as if the caller would not know). Change-Id: Ifec39d05b1713d8128046f679287e510f10e45dc Reviewed-by: Tobias Hunger <tobias.hunger@qt.io> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io> (cherry picked from qtcreator/5ba32e3484ead2e35cc7732dcd59a97e7459dbfd) Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
-rw-r--r--src/linguist/lupdate/main.cpp2
-rw-r--r--src/linguist/shared/qmakeparser.cpp5
-rw-r--r--src/linguist/shared/qmakevfs.cpp21
-rw-r--r--src/linguist/shared/qmakevfs.h8
4 files changed, 22 insertions, 14 deletions
diff --git a/src/linguist/lupdate/main.cpp b/src/linguist/lupdate/main.cpp
index 6a3043627..dcf65e207 100644
--- a/src/linguist/lupdate/main.cpp
+++ b/src/linguist/lupdate/main.cpp
@@ -406,7 +406,7 @@ static QStringList getResources(const QString &resourceFile, QMakeVfs *vfs)
return QStringList();
QString content;
QString errStr;
- if (!vfs->readFile(resourceFile, &content, &errStr)) {
+ if (vfs->readFile(resourceFile, &content, &errStr) != QMakeVfs::ReadOk) {
printErr(LU::tr("lupdate error: Can not read %1: %2\n").arg(resourceFile, errStr));
return QStringList();
}
diff --git a/src/linguist/shared/qmakeparser.cpp b/src/linguist/shared/qmakeparser.cpp
index ea6377e07..572957ab9 100644
--- a/src/linguist/shared/qmakeparser.cpp
+++ b/src/linguist/shared/qmakeparser.cpp
@@ -254,8 +254,9 @@ bool QMakeParser::read(ProFile *pro, ParseFlags flags)
{
QString content;
QString errStr;
- if (!m_vfs->readFile(pro->fileName(), &content, &errStr)) {
- if (m_handler && ((flags & ParseReportMissing) || m_vfs->exists(pro->fileName())))
+ QMakeVfs::ReadResult result = m_vfs->readFile(pro->fileName(), &content, &errStr);
+ if (result != QMakeVfs::ReadOk) {
+ if (m_handler && ((flags & ParseReportMissing) || result != QMakeVfs::ReadNotFound))
m_handler->message(QMakeParserHandler::ParserIoError,
fL1S("Cannot read %1: %2").arg(pro->fileName(), errStr));
return false;
diff --git a/src/linguist/shared/qmakevfs.cpp b/src/linguist/shared/qmakevfs.cpp
index 1bd610cc0..3c770a60f 100644
--- a/src/linguist/shared/qmakevfs.cpp
+++ b/src/linguist/shared/qmakevfs.cpp
@@ -100,7 +100,7 @@ bool QMakeVfs::writeFile(const QString &fn, QIODevice::OpenMode mode, bool exe,
#endif
}
-bool QMakeVfs::readFile(const QString &fn, QString *contents, QString *errStr)
+QMakeVfs::ReadResult QMakeVfs::readFile(const QString &fn, QString *contents, QString *errStr)
{
#ifndef PROEVALUATOR_FULL
# ifdef PROEVALUATOR_THREAD_SAFE
@@ -110,25 +110,26 @@ bool QMakeVfs::readFile(const QString &fn, QString *contents, QString *errStr)
if (it != m_files.constEnd()) {
if (it->constData() == m_magicMissing.constData()) {
*errStr = fL1S("No such file or directory");
- return false;
+ return ReadNotFound;
}
if (it->constData() != m_magicExisting.constData()) {
*contents = *it;
- return true;
+ return ReadOk;
}
}
#endif
QFile file(fn);
if (!file.open(QIODevice::ReadOnly)) {
+ if (!file.exists()) {
#ifndef PROEVALUATOR_FULL
- if (!IoUtils::exists(fn)) {
m_files[fn] = m_magicMissing;
- *errStr = fL1S("No such file or directory");
- } else
#endif
- *errStr = file.errorString();
- return false;
+ *errStr = fL1S("No such file or directory");
+ return ReadNotFound;
+ }
+ *errStr = file.errorString();
+ return ReadOtherError;
}
#ifndef PROEVALUATOR_FULL
m_files[fn] = m_magicExisting;
@@ -138,10 +139,10 @@ bool QMakeVfs::readFile(const QString &fn, QString *contents, QString *errStr)
if (bcont.startsWith("\xef\xbb\xbf")) {
// UTF-8 BOM will cause subtle errors
*errStr = fL1S("Unexpected UTF-8 BOM");
- return false;
+ return ReadOtherError;
}
*contents = QString::fromLocal8Bit(bcont);
- return true;
+ return ReadOk;
}
bool QMakeVfs::exists(const QString &fn)
diff --git a/src/linguist/shared/qmakevfs.h b/src/linguist/shared/qmakevfs.h
index 848a30550..da4c5b3f1 100644
--- a/src/linguist/shared/qmakevfs.h
+++ b/src/linguist/shared/qmakevfs.h
@@ -45,10 +45,16 @@ QT_BEGIN_NAMESPACE
class QMAKE_EXPORT QMakeVfs
{
public:
+ enum ReadResult {
+ ReadOk,
+ ReadNotFound,
+ ReadOtherError
+ };
+
QMakeVfs();
bool writeFile(const QString &fn, QIODevice::OpenMode mode, bool exe, const QString &contents, QString *errStr);
- bool readFile(const QString &fn, QString *contents, QString *errStr);
+ ReadResult readFile(const QString &fn, QString *contents, QString *errStr);
bool exists(const QString &fn);
#ifndef PROEVALUATOR_FULL