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 <oswald.buddenhagen@nokia.com>
bb10
xiechyong 2011-10-27 21:07:26 -07:00 committed by Qt by Nokia
parent d2cdfc950e
commit 6329cb8856
1 changed files with 4 additions and 1 deletions

View File

@ -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;
}