diff options
Diffstat (limited to 'src/corelib/io/qfsfileengine.cpp')
-rw-r--r-- | src/corelib/io/qfsfileengine.cpp | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/src/corelib/io/qfsfileengine.cpp b/src/corelib/io/qfsfileengine.cpp index c9ea8f94f7..f49106edd4 100644 --- a/src/corelib/io/qfsfileengine.cpp +++ b/src/corelib/io/qfsfileengine.cpp @@ -990,29 +990,32 @@ bool QFSFileEngine::remove() return ret; } -/*! - \reimp +/* + An alternative to setFileName() when you have already constructed + a QFileSystemEntry. */ -bool QFSFileEngine::rename(const QString &newName) +void QFSFileEngine::setFileEntry(QFileSystemEntry &&entry) { Q_D(QFSFileEngine); - QSystemError error; - bool ret = QFileSystemEngine::renameFile(d->fileEntry, QFileSystemEntry(newName), error); - if (!ret) - setError(QFile::RenameError, error.toString()); - return ret; + d->init(); + d->fileEntry = std::move(entry); } -/*! - \reimp -*/ -bool QFSFileEngine::renameOverwrite(const QString &newName) + +bool QFSFileEngine::rename_helper(const QString &newName, RenameMode mode) { Q_D(QFSFileEngine); + + auto func = mode == Rename ? QFileSystemEngine::renameFile + : QFileSystemEngine::renameOverwriteFile; QSystemError error; - bool ret = QFileSystemEngine::renameOverwriteFile(d->fileEntry, QFileSystemEntry(newName), error); - if (!ret) + auto newEntry = QFileSystemEntry(newName); + const bool ret = func(d->fileEntry, newEntry, error); + if (!ret) { setError(QFile::RenameError, error.toString()); - return ret; + return false; + } + setFileEntry(std::move(newEntry)); + return true; } /*! |