]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lsfd: add a new type "mqueue", a type for POSIX Mqueue
authorMasatake YAMATO <yamato@redhat.com>
Sun, 5 Mar 2023 19:05:03 +0000 (04:05 +0900)
committerMasatake YAMATO <yamato@redhat.com>
Mon, 22 May 2023 13:25:57 +0000 (22:25 +0900)
Signed-off-by: Masatake YAMATO <yamato@redhat.com>
misc-utils/lsfd-file.c
misc-utils/lsfd.c
misc-utils/lsfd.h

index d7fcad41b3d95d8276ab7720c9d08a3b13e8661f..15545dc95b7bee629006e33c67e9d35aefdcdbc1 100644 (file)
@@ -463,3 +463,38 @@ const struct file_class nsfs_file_class = {
        .fill_column = nsfs_file_fill_column,
        .handle_fdinfo = NULL,
 };
+
+/*
+ * POSIX Mqueue
+ */
+bool is_mqueue_dev(dev_t dev)
+{
+       const char *fs = get_nodev_filesystem(minor(dev));
+
+       if (fs && (strcmp (fs, "mqueue") == 0))
+               return true;
+
+       return false;
+}
+
+static bool mqueue_file_fill_column(struct proc *proc __attribute__((__unused__)),
+                                   struct file *file __attribute__((__unused__)),
+                                   struct libscols_line *ln,
+                                   int column_id,
+                                   size_t column_index)
+{
+       switch (column_id) {
+       case COL_TYPE:
+               if (scols_line_set_data(ln, column_index, "mqueue"))
+                       err(EXIT_FAILURE, _("failed to add output data"));
+               return true;
+       default:
+               return false;
+       }
+}
+
+const struct file_class mqueue_file_class = {
+       .super = &file_class,
+       .size = sizeof(struct file),
+       .fill_column = mqueue_file_fill_column,
+};
index 7aade762ee7ab347e1fbc5245ebab15721166d6b..1b5f6d747d15e540fde547271f61ac5783c842a2 100644 (file)
@@ -594,6 +594,9 @@ static const struct file_class *stat2class(struct stat *sb)
                if (is_nsfs_dev(dev))
                        return &nsfs_file_class;
 
+               if (is_mqueue_dev(dev))
+                       return &mqueue_file_class;
+
                return &file_class;
        default:
                break;
index c09a11a752c29fdd12bdb1fce91cee0deba714a2..a0a20e66eff635f172541cdb5840df35df875734 100644 (file)
@@ -186,7 +186,7 @@ struct file_class {
 };
 
 extern const struct file_class file_class, cdev_class, bdev_class, sock_class, unkn_class, fifo_class,
-       nsfs_file_class;
+       nsfs_file_class, mqueue_file_class;
 
 /*
  * IPC
@@ -250,4 +250,10 @@ static inline void xstrputc(char **a, char c)
 void load_sock_xinfo(struct path_cxt *pc, const char *name, ino_t netns);
 bool is_nsfs_dev(dev_t dev);
 
+/*
+ * POSIX Mqueue
+ */
+/* 0 is assumed as the major dev for DEV. */
+bool is_mqueue_dev(dev_t dev);
+
 #endif /* UTIL_LINUX_LSFD_H */