diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2017-06-29 11:22:01 -0700 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@intel.com> | 2017-08-04 17:29:54 +0000 |
commit | 38bc95aeceea5b4edbcfaee446d94b6062530770 (patch) | |
tree | 2fb9990811e255230ad05885c4026f348b316f72 /src/corelib/io/qtemporaryfile.cpp | |
parent | 363dc9146e53e24172bb9c0ae68100a8543bd9ae (diff) |
QTemporaryFile: add a simpler rename() (non-virtual) override
Calling the parent version is still ok, but if you call the new one you
get a bit of benefit. Since we control the file name, we don't have to
worry about a case-changing renaming (by choice). We also know that the
file is a regular one, because we created it.
[ChangeLog][Important Behavior Changes][QTemporaryFile] rename() no
longer attempts to do block copying, as that usually indicates a mistake
in the user's code. Instead, either create the temporary file in the
same directory as the new name to be, or use QSaveFile.
Change-Id: I1eba2b016de74620bfc8fffd14ccaac0cdb9fe87
Reviewed-by: David Faure <david.faure@kdab.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Diffstat (limited to 'src/corelib/io/qtemporaryfile.cpp')
-rw-r--r-- | src/corelib/io/qtemporaryfile.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/corelib/io/qtemporaryfile.cpp b/src/corelib/io/qtemporaryfile.cpp index efab2a30ff..a7fa485399 100644 --- a/src/corelib/io/qtemporaryfile.cpp +++ b/src/corelib/io/qtemporaryfile.cpp @@ -54,6 +54,8 @@ #if defined(QT_BUILD_CORE_LIB) #include "qcoreapplication.h" +#else +#define tr(X) QString::fromLatin1(X) #endif QT_BEGIN_NAMESPACE @@ -687,6 +689,36 @@ void QTemporaryFile::setFileTemplate(const QString &name) } /*! + \internal + + This is just a simplified version of QFile::rename() because we know a few + extra details about what kind of file we have. The documentation is hidden + from the user because QFile::rename() should be enough. +*/ +bool QTemporaryFile::rename(const QString &newName) +{ + Q_D(QTemporaryFile); + auto tef = static_cast<QTemporaryFileEngine *>(d->fileEngine); + if (!tef || !tef->isReallyOpen() || !tef->filePathWasTemplate) + return QFile::rename(newName); + + unsetError(); + close(); + if (error() == QFile::NoError) { + if (tef->rename(newName)) { + unsetError(); + // engine was able to handle the new name so we just reset it + tef->setFileName(newName); + d->fileName = newName; + return true; + } + + d->setError(QFile::RenameError, tef->errorString()); + } + return false; +} + +/*! \fn QTemporaryFile *QTemporaryFile::createLocalFile(const QString &fileName) \overload \obsolete |