summaryrefslogtreecommitdiffstats
path: root/src/corelib/io/qfile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/io/qfile.cpp')
-rw-r--r--src/corelib/io/qfile.cpp51
1 files changed, 25 insertions, 26 deletions
diff --git a/src/corelib/io/qfile.cpp b/src/corelib/io/qfile.cpp
index d7308c710d..58935fad3b 100644
--- a/src/corelib/io/qfile.cpp
+++ b/src/corelib/io/qfile.cpp
@@ -130,6 +130,13 @@ QFilePrivate::openExternalFile(int flags, FILE *fh, QFile::FileHandleFlags handl
#endif
}
+QAbstractFileEngine *QFilePrivate::engine() const
+{
+ if (!fileEngine)
+ fileEngine = QAbstractFileEngine::create(fileName);
+ return fileEngine;
+}
+
inline bool QFilePrivate::ensureFlushed() const
{
// This function ensures that the write buffer has been flushed (const
@@ -424,7 +431,8 @@ QFile::~QFile()
*/
QString QFile::fileName() const
{
- return fileEngine()->fileName(QAbstractFileEngine::DefaultName);
+ Q_D(const QFile);
+ return d->engine()->fileName(QAbstractFileEngine::DefaultName);
}
/*!
@@ -569,8 +577,9 @@ QFile::setDecodingFunction(DecoderFn f)
bool
QFile::exists() const
{
+ Q_D(const QFile);
// 0x1000000 = QAbstractFileEngine::Refresh, forcing an update
- return (fileEngine()->fileFlags(QAbstractFileEngine::FlagsMask
+ return (d->engine()->fileFlags(QAbstractFileEngine::FlagsMask
| QAbstractFileEngine::FileFlag(0x1000000)) & QAbstractFileEngine::ExistsFlag);
}
@@ -608,7 +617,8 @@ QFile::exists(const QString &fileName)
QString
QFile::readLink() const
{
- return fileEngine()->fileName(QAbstractFileEngine::LinkName);
+ Q_D(const QFile);
+ return d->engine()->fileName(QAbstractFileEngine::LinkName);
}
/*!
@@ -654,7 +664,7 @@ QFile::remove()
unsetError();
close();
if(error() == QFile::NoError) {
- if(fileEngine()->remove()) {
+ if (d->engine()->remove()) {
unsetError();
return true;
}
@@ -709,7 +719,7 @@ QFile::rename(const QString &newName)
unsetError();
close();
if(error() == QFile::NoError) {
- if (fileEngine()->rename(newName)) {
+ if (d->engine()->rename(newName)) {
unsetError();
// engine was able to handle the new name so we just reset it
d->fileEngine->setFileName(newName);
@@ -806,7 +816,7 @@ QFile::link(const QString &linkName)
return false;
}
QFileInfo fi(linkName);
- if(fileEngine()->link(fi.absoluteFilePath())) {
+ if (d->engine()->link(fi.absoluteFilePath())) {
unsetError();
return true;
}
@@ -861,7 +871,7 @@ QFile::copy(const QString &newName)
unsetError();
close();
if(error() == QFile::NoError) {
- if(fileEngine()->copy(newName)) {
+ if (d->engine()->copy(newName)) {
unsetError();
return true;
} else {
@@ -996,7 +1006,7 @@ bool QFile::open(OpenMode mode)
}
// QIODevice provides the buffering, so there's no need to request it from the file engine.
- if (fileEngine()->open(mode | QIODevice::Unbuffered)) {
+ if (d->engine()->open(mode | QIODevice::Unbuffered)) {
QIODevice::open(mode);
if (mode & Append)
seek(size());
@@ -1271,7 +1281,7 @@ QFile::handle() const
uchar *QFile::map(qint64 offset, qint64 size, MemoryMapFlags flags)
{
Q_D(QFile);
- if (fileEngine()
+ if (d->engine()
&& d->fileEngine->supportsExtension(QAbstractFileEngine::MapExtension)) {
unsetError();
uchar *address = d->fileEngine->map(offset, size, flags);
@@ -1293,7 +1303,7 @@ uchar *QFile::map(qint64 offset, qint64 size, MemoryMapFlags flags)
bool QFile::unmap(uchar *address)
{
Q_D(QFile);
- if (fileEngine()
+ if (d->engine()
&& d->fileEngine->supportsExtension(QAbstractFileEngine::UnMapExtension)) {
unsetError();
bool success = d->fileEngine->unmap(address);
@@ -1320,7 +1330,7 @@ QFile::resize(qint64 sz)
Q_D(QFile);
if (!d->ensureFlushed())
return false;
- fileEngine();
+ d->engine();
if (isOpen() && d->fileEngine->pos() > sz)
seek(sz);
if(d->fileEngine->setSize(sz)) {
@@ -1360,7 +1370,8 @@ QFile::resize(const QString &fileName, qint64 sz)
QFile::Permissions
QFile::permissions() const
{
- QAbstractFileEngine::FileFlags perms = fileEngine()->fileFlags(QAbstractFileEngine::PermsMask) & QAbstractFileEngine::PermsMask;
+ Q_D(const QFile);
+ QAbstractFileEngine::FileFlags perms = d->engine()->fileFlags(QAbstractFileEngine::PermsMask) & QAbstractFileEngine::PermsMask;
return QFile::Permissions((int)perms); //ewww
}
@@ -1389,7 +1400,7 @@ bool
QFile::setPermissions(Permissions permissions)
{
Q_D(QFile);
- if(fileEngine()->setPermissions(permissions)) {
+ if (d->engine()->setPermissions(permissions)) {
unsetError();
return true;
}
@@ -1490,7 +1501,7 @@ qint64 QFile::size() const
Q_D(const QFile);
if (!d->ensureFlushed())
return 0;
- d->cachedSize = fileEngine()->size();
+ d->cachedSize = d->engine()->size();
return d->cachedSize;
}
@@ -1731,18 +1742,6 @@ QFile::writeData(const char *data, qint64 len)
}
/*!
- \internal
- Returns the QIOEngine for this QFile object.
-*/
-QAbstractFileEngine *QFile::fileEngine() const
-{
- Q_D(const QFile);
- if(!d->fileEngine)
- d->fileEngine = QAbstractFileEngine::create(d->fileName);
- return d->fileEngine;
-}
-
-/*!
Returns the file error status.
The I/O device status returns an error code. For example, if open()