diff -urp -x '*.sw?' qt-everywhere-src-5.11.2.orig/qtbase/src/corelib/io/qfiledevice.cpp qt-everywhere-src-5.11.2/qtbase/src/corelib/io/qfiledevice.cpp --- qt-everywhere-src-5.11.2.orig/qtbase/src/corelib/io/qfiledevice.cpp 2018-09-13 07:25:10.000000000 +0300 +++ qt-everywhere-src-5.11.2/qtbase/src/corelib/io/qfiledevice.cpp 2019-05-13 16:29:13.753430934 +0300 @@ -73,6 +73,37 @@ QAbstractFileEngine * QFileDevicePrivate return fileEngine; } +bool QFileDevicePrivate::flush() +{ + if (!fileEngine) { + qWarning("QFileDevice::flush: No file engine. Is IODevice open?"); + return false; + } + + if (!writeBuffer.isEmpty()) { + qint64 size = writeBuffer.nextDataBlockSize(); + qint64 written = fileEngine->write(writeBuffer.readPointer(), size); + if (written > 0) + writeBuffer.free(written); + if (written != size) { + QFileDevice::FileError err = fileEngine->error(); + if (err == QFileDevice::UnspecifiedError) + err = QFileDevice::WriteError; + setError(err, fileEngine->errorString()); + return false; + } + } + + if (!fileEngine->flush()) { + QFileDevice::FileError err = fileEngine->error(); + if (err == QFileDevice::UnspecifiedError) + err = QFileDevice::WriteError; + setError(err, fileEngine->errorString()); + return false; + } + return true; +} + void QFileDevicePrivate::setError(QFileDevice::FileError err) { error = err; @@ -282,33 +313,7 @@ QString QFileDevice::fileName() const bool QFileDevice::flush() { Q_D(QFileDevice); - if (!d->fileEngine) { - qWarning("QFileDevice::flush: No file engine. Is IODevice open?"); - return false; - } - - if (!d->writeBuffer.isEmpty()) { - qint64 size = d->writeBuffer.nextDataBlockSize(); - qint64 written = d->fileEngine->write(d->writeBuffer.readPointer(), size); - if (written > 0) - d->writeBuffer.free(written); - if (written != size) { - QFileDevice::FileError err = d->fileEngine->error(); - if (err == QFileDevice::UnspecifiedError) - err = QFileDevice::WriteError; - d->setError(err, d->fileEngine->errorString()); - return false; - } - } - - if (!d->fileEngine->flush()) { - QFileDevice::FileError err = d->fileEngine->error(); - if (err == QFileDevice::UnspecifiedError) - err = QFileDevice::WriteError; - d->setError(err, d->fileEngine->errorString()); - return false; - } - return true; + return d->flush(); } /*! diff -urp -x '*.sw?' qt-everywhere-src-5.11.2.orig/qtbase/src/corelib/io/qfiledevice_p.h qt-everywhere-src-5.11.2/qtbase/src/corelib/io/qfiledevice_p.h --- qt-everywhere-src-5.11.2.orig/qtbase/src/corelib/io/qfiledevice_p.h 2018-09-13 07:25:10.000000000 +0300 +++ qt-everywhere-src-5.11.2/qtbase/src/corelib/io/qfiledevice_p.h 2019-05-13 16:25:22.064283884 +0300 @@ -69,6 +69,8 @@ protected: inline bool ensureFlushed() const; + virtual bool flush(); + bool putCharHelper(char c) override; void setError(QFileDevice::FileError err); diff -urp -x '*.sw?' qt-everywhere-src-5.11.2.orig/qtbase/src/corelib/io/qsavefile.cpp qt-everywhere-src-5.11.2/qtbase/src/corelib/io/qsavefile.cpp --- qt-everywhere-src-5.11.2.orig/qtbase/src/corelib/io/qsavefile.cpp 2018-09-13 07:25:10.000000000 +0300 +++ qt-everywhere-src-5.11.2/qtbase/src/corelib/io/qsavefile.cpp 2019-05-13 17:00:15.931840877 +0300 @@ -66,6 +66,18 @@ QSaveFilePrivate::~QSaveFilePrivate() { } +bool QSaveFilePrivate::flush() +{ + if (writeError != QFileDevice::NoError) + return false; + + const bool ret = QFileDevicePrivate::flush(); + + if (error != QFileDevice::NoError) + writeError = error; + return ret; +} + /*! \class QSaveFile \inmodule QtCore diff -urp -x '*.sw?' qt-everywhere-src-5.11.2.orig/qtbase/src/corelib/io/qsavefile_p.h qt-everywhere-src-5.11.2/qtbase/src/corelib/io/qsavefile_p.h --- qt-everywhere-src-5.11.2.orig/qtbase/src/corelib/io/qsavefile_p.h 2018-09-13 07:25:10.000000000 +0300 +++ qt-everywhere-src-5.11.2/qtbase/src/corelib/io/qsavefile_p.h 2019-05-13 16:25:40.331264735 +0300 @@ -67,6 +67,8 @@ protected: QSaveFilePrivate(); ~QSaveFilePrivate(); + bool flush() override; + QString fileName; QString finalFileName; // fileName with symbolic links resolved