Add syncToDisk() to QAbstractFileEngine.
This is needed by QSaveFile. Change-Id: I07ebdfd832c0be65c26f0aed1bb7852ac33135ca Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
7e7b65c370
commit
ad893943cf
@ -399,6 +399,19 @@ bool QAbstractFileEngine::close()
|
||||
return false;
|
||||
}
|
||||
|
||||
/*!
|
||||
\since 5.1
|
||||
|
||||
Flushes and syncs the file to disk.
|
||||
|
||||
Returns true if successful; otherwise returns false.
|
||||
The default implementation always returns false.
|
||||
*/
|
||||
bool QAbstractFileEngine::syncToDisk()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/*!
|
||||
Flushes the open file, returning true if successful; otherwise returns
|
||||
false.
|
||||
|
@ -124,6 +124,7 @@ public:
|
||||
virtual bool open(QIODevice::OpenMode openMode);
|
||||
virtual bool close();
|
||||
virtual bool flush();
|
||||
virtual bool syncToDisk();
|
||||
virtual qint64 size() const;
|
||||
virtual qint64 pos() const;
|
||||
virtual bool seek(qint64 pos);
|
||||
|
@ -418,6 +418,17 @@ bool QFSFileEngine::flush()
|
||||
return d->nativeFlush();
|
||||
}
|
||||
|
||||
/*!
|
||||
\reimp
|
||||
*/
|
||||
bool QFSFileEngine::syncToDisk()
|
||||
{
|
||||
Q_D(QFSFileEngine);
|
||||
if ((d->openMode & QIODevice::WriteOnly) == 0)
|
||||
return true;
|
||||
return d->nativeSyncToDisk();
|
||||
}
|
||||
|
||||
/*!
|
||||
\internal
|
||||
*/
|
||||
|
@ -81,6 +81,7 @@ public:
|
||||
bool open(QIODevice::OpenMode flags, FILE *fh);
|
||||
bool close();
|
||||
bool flush();
|
||||
bool syncToDisk();
|
||||
qint64 size() const;
|
||||
qint64 pos() const;
|
||||
bool seek(qint64);
|
||||
@ -150,6 +151,7 @@ public:
|
||||
bool nativeClose();
|
||||
bool closeFdFh();
|
||||
bool nativeFlush();
|
||||
bool nativeSyncToDisk();
|
||||
bool flushFh();
|
||||
qint64 nativeSize() const;
|
||||
#ifndef Q_OS_WIN
|
||||
|
@ -256,6 +256,23 @@ bool QFSFileEnginePrivate::nativeFlush()
|
||||
return fh ? flushFh() : fd != -1;
|
||||
}
|
||||
|
||||
/*!
|
||||
\internal
|
||||
\since 5.1
|
||||
*/
|
||||
bool QFSFileEnginePrivate::nativeSyncToDisk()
|
||||
{
|
||||
Q_Q(QFSFileEngine);
|
||||
#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
|
||||
const int ret = fdatasync(nativeHandle());
|
||||
#else
|
||||
const int ret = fsync(nativeHandle());
|
||||
#endif
|
||||
if (ret != 0)
|
||||
q->setError(QFile::WriteError, qt_error_string(errno));
|
||||
return ret == 0;
|
||||
}
|
||||
|
||||
/*!
|
||||
\internal
|
||||
*/
|
||||
|
@ -198,13 +198,23 @@ bool QFSFileEnginePrivate::nativeFlush()
|
||||
return true;
|
||||
}
|
||||
|
||||
// Windows native mode; flushing is
|
||||
// unnecessary. FlushFileBuffers(), the equivalent of sync() or
|
||||
// fsync() on Unix, does a low-level flush to the disk, and we
|
||||
// don't expose an API for this.
|
||||
// Windows native mode; flushing is unnecessary.
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
\internal
|
||||
\since 5.1
|
||||
*/
|
||||
bool QFSFileEnginePrivate::nativeSyncToDisk()
|
||||
{
|
||||
if (fh || fd != -1) {
|
||||
// stdlib / stdio mode. No API available.
|
||||
return false;
|
||||
}
|
||||
return FlushFileBuffers(fileHandle);
|
||||
}
|
||||
|
||||
/*
|
||||
\internal
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user