You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.3 KiB
44 lines
1.3 KiB
2 years ago
|
diff --git a/src/engine/idutils.h b/src/engine/idutils.h
|
||
|
index 78d881a96e894d731ba024acc8cc74b47823c96b..606ac9dca0a647fcc78ffb031c081201fbb1a491 100644
|
||
|
--- a/src/engine/idutils.h
|
||
|
+++ b/src/engine/idutils.h
|
||
|
@@ -13,6 +13,8 @@
|
||
|
|
||
|
#ifdef Q_OS_WIN
|
||
|
# include <QFileInfo>
|
||
|
+#else
|
||
|
+# include <sys/statvfs.h>
|
||
|
#endif
|
||
|
|
||
|
namespace Baloo {
|
||
|
@@ -40,10 +42,28 @@ inline quint64 statBufToId(const QT_STATBUF& stBuf)
|
||
|
static_cast<quint32>(stBuf.st_ino));
|
||
|
}
|
||
|
|
||
|
+#ifndef Q_OS_WIN
|
||
|
+inline int statWithFsid(const char* path, QT_STATBUF* statBuf)
|
||
|
+{
|
||
|
+ int ret = QT_LSTAT(path, statBuf);
|
||
|
+ if (ret != 0) {
|
||
|
+ return ret;
|
||
|
+ }
|
||
|
+
|
||
|
+ struct statvfs fsBuf;
|
||
|
+ ret = statvfs(path, &fsBuf);
|
||
|
+ if (ret == 0 && fsBuf.f_fsid != 0) {
|
||
|
+ // Fold FSID into 32 bits, statBufToId would discard anything else
|
||
|
+ statBuf->st_dev = static_cast<quint32>(fsBuf.f_fsid ^ (fsBuf.f_fsid >> 32));
|
||
|
+ }
|
||
|
+ return ret;
|
||
|
+}
|
||
|
+#endif
|
||
|
+
|
||
|
inline int filePathToStat(const QByteArray& filePath, QT_STATBUF& statBuf)
|
||
|
{
|
||
|
#ifndef Q_OS_WIN
|
||
|
- return QT_LSTAT(filePath.constData(), &statBuf);
|
||
|
+ return statWithFsid(filePath.constData(), &statBuf);
|
||
|
#else
|
||
|
const int ret = QT_STAT(filePath.constData(), &statBuf);
|
||
|
const QString filePathStr = QString::fromUtf8(filePath);
|