aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/utils/fileutils.cpp
diff options
context:
space:
mode:
authorMarcus Tillmanns <marcus.tillmanns@qt.io>2022-10-13 11:11:29 +0200
committerMarcus Tillmanns <marcus.tillmanns@qt.io>2022-10-13 11:25:48 +0000
commita22d62e57d900853d135859720920d2ddec4c4f2 (patch)
tree94a533e776569a581756a86c766323f0521fa80e /src/libs/utils/fileutils.cpp
parent0f24475f484e8372c6f74169a6be21621a3d4862 (diff)
Utils: Add FilePath::isSameFile()
FilePath::isSameFile() checks if two files are the same file. It first checks if its on the same device. If it is, it will try to read the fileId of the files and compare them. Change-Id: I83668955cacd4e5ed03d43a3fee2be29e9d0a6f0 Reviewed-by: hjk <hjk@qt.io>
Diffstat (limited to 'src/libs/utils/fileutils.cpp')
-rw-r--r--src/libs/utils/fileutils.cpp73
1 files changed, 1 insertions, 72 deletions
diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp
index 989f6a3fcc..ce5ac3a249 100644
--- a/src/libs/utils/fileutils.cpp
+++ b/src/libs/utils/fileutils.cpp
@@ -5,7 +5,6 @@
#include "savefile.h"
#include "algorithm.h"
-#include "commandline.h"
#include "qtcassert.h"
#include "hostosinfo.h"
@@ -15,7 +14,6 @@
#include <QDataStream>
#include <QDateTime>
#include <QDebug>
-#include <QOperatingSystemVersion>
#include <QRegularExpression>
#include <QTemporaryFile>
#include <QTextStream>
@@ -25,7 +23,6 @@
#ifdef QT_GUI_LIB
#include <QMessageBox>
-#include <QRegularExpression>
#include <QGuiApplication>
#endif
@@ -37,7 +34,7 @@
#include <shlobj.h>
#endif
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
#include "fileutils_mac.h"
#endif
@@ -337,47 +334,6 @@ FilePaths FileUtils::CopyAskingForOverwrite::files() const
}
#endif // QT_GUI_LIB
-// Copied from qfilesystemengine_win.cpp
-#ifdef Q_OS_WIN
-
-// File ID for Windows up to version 7.
-static inline QByteArray fileIdWin7(HANDLE handle)
-{
- BY_HANDLE_FILE_INFORMATION info;
- if (GetFileInformationByHandle(handle, &info)) {
- char buffer[sizeof "01234567:0123456701234567\0"];
- qsnprintf(buffer, sizeof(buffer), "%lx:%08lx%08lx",
- info.dwVolumeSerialNumber,
- info.nFileIndexHigh,
- info.nFileIndexLow);
- return QByteArray(buffer);
- }
- return QByteArray();
-}
-
-// File ID for Windows starting from version 8.
-static QByteArray fileIdWin8(HANDLE handle)
-{
- QByteArray result;
- FILE_ID_INFO infoEx;
- if (GetFileInformationByHandleEx(handle,
- static_cast<FILE_INFO_BY_HANDLE_CLASS>(18), // FileIdInfo in Windows 8
- &infoEx, sizeof(FILE_ID_INFO))) {
- result = QByteArray::number(infoEx.VolumeSerialNumber, 16);
- result += ':';
- // Note: MinGW-64's definition of FILE_ID_128 differs from the MSVC one.
- result += QByteArray(reinterpret_cast<const char *>(&infoEx.FileId), int(sizeof(infoEx.FileId))).toHex();
- }
- return result;
-}
-
-static QByteArray fileIdWin(HANDLE fHandle)
-{
- return QOperatingSystemVersion::current() >= QOperatingSystemVersion::Windows8 ?
- fileIdWin8(HANDLE(fHandle)) : fileIdWin7(HANDLE(fHandle));
-}
-#endif
-
FilePath FileUtils::commonPath(const FilePaths &paths)
{
if (paths.isEmpty())
@@ -424,33 +380,6 @@ FilePath FileUtils::commonPath(const FilePaths &paths)
return result;
}
-QByteArray FileUtils::fileId(const FilePath &fileName)
-{
- QByteArray result;
-
-#ifdef Q_OS_WIN
- const HANDLE handle =
- CreateFile((wchar_t*)fileName.toUserOutput().utf16(), 0,
- FILE_SHARE_READ, NULL, OPEN_EXISTING,
- FILE_FLAG_BACKUP_SEMANTICS, NULL);
- if (handle != INVALID_HANDLE_VALUE) {
- result = fileIdWin(handle);
- CloseHandle(handle);
- }
-#else // Copied from qfilesystemengine_unix.cpp
- if (Q_UNLIKELY(fileName.isEmpty()))
- return result;
-
- QT_STATBUF statResult;
- if (QT_STAT(fileName.toString().toLocal8Bit().constData(), &statResult))
- return result;
- result = QByteArray::number(quint64(statResult.st_dev), 16);
- result += ':';
- result += QByteArray::number(quint64(statResult.st_ino));
-#endif
- return result;
-}
-
#ifdef Q_OS_WIN
template <>
void withNtfsPermissions(const std::function<void()> &task)