[PATCH] KFileSystemType: add custom determineFileSystemTypeImpl for Hurd
authorPino Toscano <pino@kde.org>
Sat, 27 Jun 2026 05:23:57 +0000 (07:23 +0200)
committerPino Toscano <pino@debian.org>
Fri, 3 Jul 2026 08:39:09 +0000 (10:39 +0200)
Add a specific implementation of determineFileSystemTypeImpl for
GNU/Hurd, checking the proper values for the filesystem type/magic
(rather than the Linux values).

This avoids the need to guard Linux bits in the Linux implementation,
so those checks are dropped now.

Gbp-Pq: Name upstream_KFileSystemType-add-custom-determineFileSystemTypeIm.patch

src/lib/io/kfilesystemtype.cpp

index 2ce069bf15904fcec564730b5857122f6de247db..8f406d70273e0e519a42fa361a59014cf23f6733 100644 (file)
@@ -74,13 +74,11 @@ KFileSystemType::Type determineFileSystemTypeImpl(const QByteArray &path)
     return kde_typeFromName(buf.f_fstypename);
 }
 
-#elif defined(Q_OS_LINUX) || defined(Q_OS_HURD)
+#elif defined(Q_OS_LINUX)
 #include <sys/statfs.h>
 
-#ifdef Q_OS_LINUX
 #include <linux/magic.h> // A lot of the filesystem superblock MAGIC numbers
 #include <sys/stat.h>
-#endif
 
 // Add known missig magics
 // Can use https://github.com/systemd/systemd/blob/main/src/basic/missing_magic.h
@@ -120,7 +118,6 @@ KFileSystemType::Type determineFileSystemTypeImpl(const QByteArray &path)
 #define AUTOFSNG_SUPER_MAGIC 0x7d92b1a0
 #endif
 
-#ifdef Q_OS_HURD
 #ifndef NFS_SUPER_MAGIC
 #define NFS_SUPER_MAGIC 0x00006969
 #endif
@@ -136,7 +133,6 @@ KFileSystemType::Type determineFileSystemTypeImpl(const QByteArray &path)
 #ifndef RAMFS_MAGIC
 #define RAMFS_MAGIC 0x858458F6
 #endif
-#endif
 
 KFileSystemType::Type probeFuseBlkType(const QByteArray &path)
 {
@@ -248,6 +244,30 @@ KFileSystemType::Type determineFileSystemTypeImpl(const QByteArray &path)
     return kde_typeFromName(buf.f_basetype);
 #endif
 }
+
+#elif defined(Q_OS_HURD)
+#include <sys/statfs.h>
+#include <hurd/hurd_types.h>
+
+static KFileSystemType::Type determineFileSystemTypeImpl(const QByteArray &path)
+{
+    struct statfs buf;
+    if (statfs(path.constData(), &buf) != 0) {
+        return KFileSystemType::Unknown;
+    }
+
+    switch (buf.f_type) {
+    case FSTYPE_NFS:
+    case FSTYPE_AFS:
+        return KFileSystemType::Nfs;
+    case FSTYPE_MSLOSS:
+        return KFileSystemType::Fat;
+    case FSTYPE_MEMFS:
+        return KFileSystemType::Ramfs;
+    default:
+        return KFileSystemType::Other;
+    }
+}
 #endif
 #else
 KFileSystemType::Type determineFileSystemTypeImpl(const QByteArray &path)