summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoão Abecasis <joao@abecasis.name>2009-11-16 15:11:09 (GMT)
committerJason McDonald <jason.mcdonald@nokia.com>2009-11-19 03:02:07 (GMT)
commit022fa9c37bf1789ad13563086e174264e865ff0d (patch)
tree92ff0400cc9e9f4f53c25eaed8744d234a49fed3
parent302152bca4dc690574e1b841b60a343dba47e86a (diff)
downloadQt-022fa9c37bf1789ad13563086e174264e865ff0d.zip
Qt-022fa9c37bf1789ad13563086e174264e865ff0d.tar.gz
Qt-022fa9c37bf1789ad13563086e174264e865ff0d.tar.bz2
Fix regression introduced in c08e708037d33271825ce6a6a1ac640e96b70c36
When writing nothing to a file, not actually writing anything is not an error. Also, from a change introduced in the same commit, there is no point in checking for EOF when writing. Task-number: QTBUG-5847 Reviewed-by: Olivier Goffart (cherry picked from commit 72ee915bb0465549b7ca8e62d2af146cc44fdeac)
-rw-r--r--src/corelib/io/qfsfileengine.cpp6
-rw-r--r--tests/auto/qfile/tst_qfile.cpp12
2 files changed, 14 insertions, 4 deletions
diff --git a/src/corelib/io/qfsfileengine.cpp b/src/corelib/io/qfsfileengine.cpp
index 9ab831f..3cf9b7e 100644
--- a/src/corelib/io/qfsfileengine.cpp
+++ b/src/corelib/io/qfsfileengine.cpp
@@ -762,12 +762,10 @@ qint64 QFSFileEnginePrivate::writeFdFh(const char *data, qint64 len)
// Buffered stdlib mode.
size_t result;
- bool eof;
do {
result = fwrite(data + writtenBytes, 1, size_t(len - writtenBytes), fh);
writtenBytes += result;
- eof = feof(fh);
- } while (!eof && (result == 0 ? errno == EINTR : writtenBytes < len));
+ } while (result == 0 ? errno == EINTR : writtenBytes < len);
} else if (fd != -1) {
// Unbuffered stdio mode.
@@ -783,7 +781,7 @@ qint64 QFSFileEnginePrivate::writeFdFh(const char *data, qint64 len)
|| (result > 0 && (writtenBytes += result) < len));
}
- if (writtenBytes == 0) {
+ if (len && writtenBytes == 0) {
writtenBytes = -1;
q->setError(errno == ENOSPC ? QFile::ResourceError : QFile::WriteError, qt_error_string(errno));
}
diff --git a/tests/auto/qfile/tst_qfile.cpp b/tests/auto/qfile/tst_qfile.cpp
index 880498e..c4e6d50 100644
--- a/tests/auto/qfile/tst_qfile.cpp
+++ b/tests/auto/qfile/tst_qfile.cpp
@@ -210,6 +210,7 @@ private slots:
void task167217();
void openDirectory();
+ void writeNothing();
public:
// disabled this test for the moment... it hangs
@@ -2840,5 +2841,16 @@ void tst_QFile::openStandardStreams()
}
}
+void tst_QFile::writeNothing()
+{
+ for (int i = 0; i < 3; ++i) {
+ QFile file("file.txt");
+ QVERIFY( openFile(file, QIODevice::WriteOnly | QIODevice::Unbuffered, FileType(i)) );
+ QVERIFY( 0 == file.write((char *)0, 0) );
+ QCOMPARE( file.error(), QFile::NoError );
+ closeFile(file);
+ }
+}
+
QTEST_MAIN(tst_QFile)
#include "tst_qfile.moc"