diff -urpx '.*.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-04-10 17:05:59.770267045 +0300 @@ -55,7 +55,7 @@ QT_BEGIN_NAMESPACE QFileDevicePrivate::QFileDevicePrivate() : fileEngine(0), cachedSize(0), - error(QFile::NoError), lastWasWrite(false) + error(QFile::NoError), savedError(QFile::NoError), lastWasWrite(false) { writeBufferChunkSize = QFILE_WRITEBUFFER_SIZE; } @@ -76,18 +76,24 @@ QAbstractFileEngine * QFileDevicePrivate void QFileDevicePrivate::setError(QFileDevice::FileError err) { error = err; + if (err != QFileDevice::NoError) + savedError = err; errorString.clear(); } void QFileDevicePrivate::setError(QFileDevice::FileError err, const QString &errStr) { error = err; + if (err != QFileDevice::NoError) + savedError = err; errorString = errStr; } void QFileDevicePrivate::setError(QFileDevice::FileError err, int errNum) { error = err; + if (err != QFileDevice::NoError) + savedError = err; errorString = qt_error_string(errNum); } diff -urpx '.*.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-04-10 17:06:40.489608303 +0300 @@ -80,6 +80,10 @@ protected: QFileDevice::FileHandleFlags handleFlags; QFileDevice::FileError error; + // After initialization, savedError is never set to NoError by + // QFileDevice(Private). Any other value provided to setError is saved to + // savedError. + QFileDevice::FileError savedError; bool lastWasWrite; }; diff -urpx '.*.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-04-10 17:09:22.840631492 +0300 @@ -56,8 +56,7 @@ QT_BEGIN_NAMESPACE QSaveFilePrivate::QSaveFilePrivate() - : writeError(QFileDevice::NoError), - useTemporaryFile(true), + : useTemporaryFile(true), directWriteFallback(false) { } @@ -212,13 +211,11 @@ bool QSaveFile::open(OpenMode mode) QFileInfo existingFile(d->fileName); if (existingFile.exists() && !existingFile.isWritable()) { d->setError(QFileDevice::WriteError, QSaveFile::tr("Existing file %1 is not writable").arg(d->fileName)); - d->writeError = QFileDevice::WriteError; return false; } if (existingFile.isDir()) { d->setError(QFileDevice::WriteError, QSaveFile::tr("Filename refers to a directory")); - d->writeError = QFileDevice::WriteError; return false; } @@ -335,9 +332,9 @@ bool QSaveFile::commit() d->fileEngine->syncToDisk(); if (d->useTemporaryFile) { - if (d->writeError != QFileDevice::NoError) { + if (d->savedError != QFileDevice::NoError) { d->fileEngine->remove(); - d->writeError = QFileDevice::NoError; + d->savedError = QFileDevice::NoError; delete d->fileEngine; d->fileEngine = 0; return false; @@ -382,7 +379,6 @@ void QSaveFile::cancelWriting() if (!isOpen()) return; d->setError(QFileDevice::WriteError, QSaveFile::tr("Writing canceled by application")); - d->writeError = QFileDevice::WriteError; } /*! @@ -391,13 +387,11 @@ void QSaveFile::cancelWriting() qint64 QSaveFile::writeData(const char *data, qint64 len) { Q_D(QSaveFile); - if (d->writeError != QFileDevice::NoError) + if (d->savedError != QFileDevice::NoError) return -1; const qint64 ret = QFileDevice::writeData(data, len); - if (d->error != QFileDevice::NoError) - d->writeError = d->error; return ret; } diff -urpx '.*.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-04-10 17:06:59.067964888 +0300 @@ -70,8 +70,6 @@ protected: QString fileName; QString finalFileName; // fileName with symbolic links resolved - QFileDevice::FileError writeError; - bool useTemporaryFile; bool directWriteFallback; };