From 881ec93609443f3286fc31b1b3814a21c9868469 Mon Sep 17 00:00:00 2001 From: xdavidwu Date: Tue, 8 Feb 2022 19:43:08 +0800 Subject: [PATCH] DocumentsProvider: fill mime-type on special files prevents DocumentsUI from displaying a "null" and no icon --- .../safcephfs/CephFSDocumentsProvider.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/main/java/org/safcephfs/CephFSDocumentsProvider.java b/src/main/java/org/safcephfs/CephFSDocumentsProvider.java index 71c6fcc..f973c09 100644 --- a/src/main/java/org/safcephfs/CephFSDocumentsProvider.java +++ b/src/main/java/org/safcephfs/CephFSDocumentsProvider.java @@ -83,6 +83,23 @@ public class CephFSDocumentsProvider extends DocumentsProvider { return "application/octet-stream"; } + private static final int S_IFMT = 0170000, S_IFSOCK = 0140000, + S_IFBLK = 0060000, S_IFCHR = 0020000, S_IFIFO = 0010000; + + private static String getMimeFromMode(int mode) { + switch (mode & S_IFMT) { + case S_IFSOCK: + return "inode/socket"; + case S_IFBLK: + return "inode/blockdevice"; + case S_IFCHR: + return "inode/chardevice"; + case S_IFIFO: + return "inode/fifo"; + } + return "application/octet-stream"; + } + private int getPerm(CephStat cs) { int perm = 0; if (cs.uid == uid) { @@ -327,6 +344,10 @@ public class CephFSDocumentsProvider extends DocumentsProvider { (getPerm(cs) & PERM_WRITEABLE) == PERM_WRITEABLE) { row.add(Document.COLUMN_FLAGS, Document.FLAG_SUPPORTS_WRITE); } + } else if (cs.isSymlink()) { + row.add(Document.COLUMN_MIME_TYPE, "inode/symlink"); + } else { + row.add(Document.COLUMN_MIME_TYPE, getMimeFromMode(cs.mode)); } } -- 2.43.0