diff options
author | João Abecasis <joao@abecasis.name> | 2009-05-18 11:01:52 (GMT) |
---|---|---|
committer | João Abecasis <joao@abecasis.name> | 2009-05-22 12:33:44 (GMT) |
commit | 5cb1ed45ba55dbc9752e0f6f47cc6d1525464646 (patch) | |
tree | dd0445b74fd26b466fda8d259874362f3e029552 /src/corelib/io | |
parent | 70f616238e77d866420f2c6e12afe04b529fe808 (diff) | |
download | Qt-5cb1ed45ba55dbc9752e0f6f47cc6d1525464646.zip Qt-5cb1ed45ba55dbc9752e0f6f47cc6d1525464646.tar.gz Qt-5cb1ed45ba55dbc9752e0f6f47cc6d1525464646.tar.bz2 |
QTemporaryFile: handle failures from QFSFileEngine::open(mode, fd)
For now, this only happens if Append mode is requested and we're unable
to seek to the end of the file. Theoretically, this could change in the
future so it's better to err on the safe side.
Reviewed-by: Thiago
Diffstat (limited to 'src/corelib/io')
-rw-r--r-- | src/corelib/io/qtemporaryfile.cpp | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/corelib/io/qtemporaryfile.cpp b/src/corelib/io/qtemporaryfile.cpp index e83d7e9..b6eff94 100644 --- a/src/corelib/io/qtemporaryfile.cpp +++ b/src/corelib/io/qtemporaryfile.cpp @@ -322,7 +322,6 @@ bool QTemporaryFileEngine::open(QIODevice::OpenMode openMode) qfilename += QLatin1String(".XXXXXX"); int suffixLength = qfilename.length() - (qfilename.lastIndexOf(QLatin1String("XXXXXX"), -1, Qt::CaseSensitive) + 6); - d->closeFileHandle = true; char *filename = qstrdup(qfilename.toLocal8Bit()); #ifndef Q_WS_WIN @@ -330,16 +329,19 @@ bool QTemporaryFileEngine::open(QIODevice::OpenMode openMode) if (fd != -1) { // First open the fd as an external file descriptor to // initialize the engine properly. - QFSFileEngine::open(openMode, fd); + if (QFSFileEngine::open(openMode, fd)) { - // Allow the engine to close the handle even if it's "external". - d->closeFileHandle = true; + // Allow the engine to close the handle even if it's "external". + d->closeFileHandle = true; - // Restore the file names (open() resets them). - d->filePath = QString::fromLocal8Bit(filename); //changed now! - d->nativeInitFileName(); - delete [] filename; - return true; + // Restore the file names (open() resets them). + d->filePath = QString::fromLocal8Bit(filename); //changed now! + d->nativeInitFileName(); + delete [] filename; + return true; + } + + QT_CLOSE(fd); } delete [] filename; setError(errno == EMFILE ? QFile::ResourceError : QFile::OpenError, qt_error_string(errno)); |