Move processOpenModeFlags out of QFSFileEngine
The same logic is needed for QWinRTFileEngine. To be able to reuse the code, it was moved out of the class. Task-number: QTBUG-77095 Change-Id: If52b2fc8a0f3056d32fc693775565a1c3803b7d4 Reviewed-by: André de la Rocha <andre.rocha@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>bb10
parent
3fbb6a9572
commit
56b1cb0b04
|
|
@ -167,19 +167,21 @@ QFSFileEngine::QFSFileEngine(QFSFileEnginePrivate &dd)
|
|||
/*!
|
||||
\internal
|
||||
*/
|
||||
bool QFSFileEngine::processOpenModeFlags(QIODevice::OpenMode *mode)
|
||||
ProcessOpenModeResult processOpenModeFlags(QIODevice::OpenMode openMode)
|
||||
{
|
||||
QIODevice::OpenMode &openMode = *mode;
|
||||
ProcessOpenModeResult result;
|
||||
result.ok = false;
|
||||
if ((openMode & QFile::NewOnly) && (openMode & QFile::ExistingOnly)) {
|
||||
qWarning("NewOnly and ExistingOnly are mutually exclusive");
|
||||
setError(QFile::OpenError, QLatin1String("NewOnly and ExistingOnly are mutually exclusive"));
|
||||
return false;
|
||||
result.error = QLatin1String("NewOnly and ExistingOnly are mutually exclusive");
|
||||
return result;
|
||||
}
|
||||
|
||||
if ((openMode & QFile::ExistingOnly) && !(openMode & (QFile::ReadOnly | QFile::WriteOnly))) {
|
||||
qWarning("ExistingOnly must be specified alongside ReadOnly, WriteOnly, or ReadWrite");
|
||||
setError(QFile::OpenError, QLatin1String("ExistingOnly must be specified alongside ReadOnly, WriteOnly, or ReadWrite"));
|
||||
return false;
|
||||
result.error = QLatin1String(
|
||||
"ExistingOnly must be specified alongside ReadOnly, WriteOnly, or ReadWrite");
|
||||
return result;
|
||||
}
|
||||
|
||||
// Either Append or NewOnly implies WriteOnly
|
||||
|
|
@ -190,7 +192,9 @@ bool QFSFileEngine::processOpenModeFlags(QIODevice::OpenMode *mode)
|
|||
if ((openMode & QFile::WriteOnly) && !(openMode & (QFile::ReadOnly | QFile::Append | QFile::NewOnly)))
|
||||
openMode |= QFile::Truncate;
|
||||
|
||||
return true;
|
||||
result.ok = true;
|
||||
result.openMode = openMode;
|
||||
return result;
|
||||
}
|
||||
|
||||
/*!
|
||||
|
|
@ -234,16 +238,19 @@ bool QFSFileEngine::open(QIODevice::OpenMode openMode)
|
|||
return false;
|
||||
}
|
||||
|
||||
if (!processOpenModeFlags(&openMode))
|
||||
const ProcessOpenModeResult res = processOpenModeFlags(openMode);
|
||||
if (!res.ok) {
|
||||
setError(QFileDevice::OpenError, res.error);
|
||||
return false;
|
||||
}
|
||||
|
||||
d->openMode = openMode;
|
||||
d->openMode = res.openMode;
|
||||
d->lastFlushFailed = false;
|
||||
d->tried_stat = 0;
|
||||
d->fh = 0;
|
||||
d->fd = -1;
|
||||
|
||||
return d->nativeOpen(openMode);
|
||||
return d->nativeOpen(d->openMode);
|
||||
}
|
||||
|
||||
/*!
|
||||
|
|
@ -262,17 +269,20 @@ bool QFSFileEngine::open(QIODevice::OpenMode openMode, FILE *fh, QFile::FileHand
|
|||
|
||||
Q_D(QFSFileEngine);
|
||||
|
||||
if (!processOpenModeFlags(&openMode))
|
||||
const ProcessOpenModeResult res = processOpenModeFlags(openMode);
|
||||
if (!res.ok) {
|
||||
setError(QFileDevice::OpenError, res.error);
|
||||
return false;
|
||||
}
|
||||
|
||||
d->openMode = openMode;
|
||||
d->openMode = res.openMode;
|
||||
d->lastFlushFailed = false;
|
||||
d->closeFileHandle = (handleFlags & QFile::AutoCloseHandle);
|
||||
d->fileEntry.clear();
|
||||
d->tried_stat = 0;
|
||||
d->fd = -1;
|
||||
|
||||
return d->openFh(openMode, fh);
|
||||
return d->openFh(d->openMode, fh);
|
||||
}
|
||||
|
||||
/*!
|
||||
|
|
@ -321,10 +331,13 @@ bool QFSFileEngine::open(QIODevice::OpenMode openMode, int fd, QFile::FileHandle
|
|||
{
|
||||
Q_D(QFSFileEngine);
|
||||
|
||||
if (!processOpenModeFlags(&openMode))
|
||||
const ProcessOpenModeResult res = processOpenModeFlags(openMode);
|
||||
if (!res.ok) {
|
||||
setError(QFileDevice::OpenError, res.error);
|
||||
return false;
|
||||
}
|
||||
|
||||
d->openMode = openMode;
|
||||
d->openMode = res.openMode;
|
||||
d->lastFlushFailed = false;
|
||||
d->closeFileHandle = (handleFlags & QFile::AutoCloseHandle);
|
||||
d->fileEntry.clear();
|
||||
|
|
@ -332,7 +345,7 @@ bool QFSFileEngine::open(QIODevice::OpenMode openMode, int fd, QFile::FileHandle
|
|||
d->fd = -1;
|
||||
d->tried_stat = 0;
|
||||
|
||||
return d->openFd(openMode, fd);
|
||||
return d->openFd(d->openMode, fd);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -61,6 +61,13 @@
|
|||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
struct ProcessOpenModeResult {
|
||||
bool ok;
|
||||
QIODevice::OpenMode openMode;
|
||||
QString error;
|
||||
};
|
||||
inline Q_CORE_EXPORT ProcessOpenModeResult processOpenModeFlags(QIODevice::OpenMode mode);
|
||||
|
||||
class QFSFileEnginePrivate;
|
||||
|
||||
class Q_CORE_EXPORT QFSFileEngine : public QAbstractFileEngine
|
||||
|
|
@ -131,9 +138,6 @@ public:
|
|||
|
||||
protected:
|
||||
QFSFileEngine(QFSFileEnginePrivate &dd);
|
||||
|
||||
private:
|
||||
inline bool processOpenModeFlags(QIODevice::OpenMode *mode);
|
||||
};
|
||||
|
||||
class Q_AUTOTEST_EXPORT QFSFileEnginePrivate : public QAbstractFileEnginePrivate
|
||||
|
|
|
|||
Loading…
Reference in New Issue