From: Masatake YAMATO Date: Sun, 5 Mar 2023 19:05:03 +0000 (+0900) Subject: lsfd: add a new type "mqueue", a type for POSIX Mqueue X-Git-Tag: v2.40-rc1~436^2~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ad0569880f7753a38cf222ff33d2dda5bdc61e56;p=thirdparty%2Futil-linux.git lsfd: add a new type "mqueue", a type for POSIX Mqueue Signed-off-by: Masatake YAMATO --- diff --git a/misc-utils/lsfd-file.c b/misc-utils/lsfd-file.c index d7fcad41b3..15545dc95b 100644 --- a/misc-utils/lsfd-file.c +++ b/misc-utils/lsfd-file.c @@ -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, +}; diff --git a/misc-utils/lsfd.c b/misc-utils/lsfd.c index 7aade762ee..1b5f6d747d 100644 --- a/misc-utils/lsfd.c +++ b/misc-utils/lsfd.c @@ -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; diff --git a/misc-utils/lsfd.h b/misc-utils/lsfd.h index c09a11a752..a0a20e66ef 100644 --- a/misc-utils/lsfd.h +++ b/misc-utils/lsfd.h @@ -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 */