summaryrefslogtreecommitdiffstats
path: root/src/corelib/io/qfsfileengine_win.cpp
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2017-06-29 12:55:54 -0700
committerThiago Macieira <thiago.macieira@intel.com>2017-07-18 15:51:35 +0000
commitad3b41a06d9ba7219c79b5548c5b11698787288d (patch)
tree557d65faed341e73d8fded4dede9ba70a1c1496e /src/corelib/io/qfsfileengine_win.cpp
parentf9bfc8b91cd8ea755808751ab6268e37ffd6c17a (diff)
QFile::rename: use the open file's ID, instead of using the file name
To do that, we needed to add virtual id() in QAbstractFileEngine and override it in QFSFileEngine. It might be useful to return other types of IDs for the other file engines, but this commit does not attempt that just yet. Change-Id: I1eba2b016de74620bfc8fffd14ccafe0762b3c38 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/io/qfsfileengine_win.cpp')
-rw-r--r--src/corelib/io/qfsfileengine_win.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/corelib/io/qfsfileengine_win.cpp b/src/corelib/io/qfsfileengine_win.cpp
index fb3cdd3981..7a010df671 100644
--- a/src/corelib/io/qfsfileengine_win.cpp
+++ b/src/corelib/io/qfsfileengine_win.cpp
@@ -718,6 +718,24 @@ QAbstractFileEngine::FileFlags QFSFileEngine::fileFlags(QAbstractFileEngine::Fil
return ret;
}
+QByteArray QFSFileEngine::id() const
+{
+ Q_D(const QFSFileEngine);
+ HANDLE h = d->fileHandle;
+ if (h == INVALID_HANDLE_VALUE) {
+ int localFd = d->fd;
+ if (d->fh && d->fileEntry.isEmpty())
+ localFd = QT_FILENO(d->fh);
+ if (localFd != -1)
+ h = HANDLE(_get_osfhandle(localFd));
+ }
+ if (h != INVALID_HANDLE_VALUE)
+ return QFileSystemEngine::id(h);
+
+ // file is not open, try by path
+ return QFileSystemEngine::id(d->fileEntry);
+}
+
QString QFSFileEngine::fileName(FileName file) const
{
Q_D(const QFSFileEngine);