From 6329cb8856758cd5bb4c9b5cbabddccb8316a893 Mon Sep 17 00:00:00 2001 From: xiechyong Date: Thu, 27 Oct 2011 21:07:26 -0700 Subject: Fix QFile::copy() returning false but error() being NoError Calling close() after setError() will unset the error. Task-number: QTBUG-11982 Merge-request: 2712 Reviewed-by: ossi (cherry picked from commit 16f67b49ae5232d4d0fb19e0333f5e2ef2a65449) Change-Id: I16f67b49ae5232d4d0fb19e0333f5e2ef2a65449 Reviewed-by: Oswald Buddenhagen --- src/corelib/io/qfile.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/corelib/io/qfile.cpp b/src/corelib/io/qfile.cpp index 684f360313..d5118525cf 100644 --- a/src/corelib/io/qfile.cpp +++ b/src/corelib/io/qfile.cpp @@ -909,6 +909,7 @@ QFile::copy(const QString &newName) #endif if (error) { out.close(); + close(); d->setError(QFile::CopyError, tr("Cannot open for output")); } else { char block[4096]; @@ -919,6 +920,7 @@ QFile::copy(const QString &newName) break; totalRead += in; if(in != out.write(block, in)) { + close(); d->setError(QFile::CopyError, tr("Failure to write block")); error = true; break; @@ -932,6 +934,7 @@ QFile::copy(const QString &newName) } if (!error && !out.rename(newName)) { error = true; + close(); d->setError(QFile::CopyError, tr("Cannot create %1 for output").arg(newName)); } #ifdef QT_NO_TEMPORARYFILE @@ -942,10 +945,10 @@ QFile::copy(const QString &newName) out.setAutoRemove(false); #endif } - close(); } if(!error) { QFile::setPermissions(newName, permissions()); + close(); unsetError(); return true; } -- cgit v1.2.3