]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lib/sys: add sysfs_chrdev_devno_to_devname()
authorKarel Zak <kzak@redhat.com>
Thu, 25 Nov 2021 10:52:46 +0000 (11:52 +0100)
committerKarel Zak <kzak@redhat.com>
Thu, 25 Nov 2021 10:52:46 +0000 (11:52 +0100)
Signed-off-by: Karel Zak <kzak@redhat.com>
include/sysfs.h
lib/sysfs.c

index dcd2a148d98666deaf757668a039b192a7f1366c..a10e94899613b5b1ad6ac2ef4b1b3fce37fd758f 100644 (file)
@@ -109,5 +109,7 @@ int sysfs_blkdev_scsi_host_is(struct path_cxt *pc, const char *type);
 int sysfs_blkdev_scsi_has_attribute(struct path_cxt *pc, const char *attr);
 int sysfs_blkdev_scsi_path_contains(struct path_cxt *pc, const char *pattern);
 
+char *sysfs_chrdev_devno_to_devname(dev_t devno, char *buf, size_t bufsiz);
+
 
 #endif /* UTIL_LINUX_SYSFS_H */
index 191d870f669a2cfca108ecff59fa91af55e45402..d8206be7ab89bfb74a405424c89cca2d4c17f116 100644 (file)
@@ -1039,6 +1039,40 @@ int sysfs_devno_count_partitions(dev_t devno)
        return n;
 }
 
+char *sysfs_chrdev_devno_to_devname(dev_t devno, char *buf, size_t bufsiz)
+{
+       char link[PATH_MAX];
+       struct path_cxt *pc;
+       char *name;
+       ssize_t sz;
+
+       pc = ul_new_path(_PATH_SYS_DEVCHAR "/%u:%u", major(devno), minor(devno));
+       if (!pc)
+               return NULL;
+
+        /* read /sys/dev/char/<maj:min> link */
+       sz = ul_path_readlink(pc, link, sizeof(link), NULL);
+       ul_unref_path(pc);
+
+       if (sz < 0)
+               return NULL;
+
+       name = strrchr(link, '/');
+       if (!name)
+               return NULL;
+
+       name++;
+       sz = strlen(name);
+       if ((size_t) sz + 1 > bufsiz)
+               return NULL;
+
+       memcpy(buf, name, sz + 1);
+       sysfs_devname_sys_to_dev(buf);
+       return buf;
+
+}
+
+
 
 #ifdef TEST_PROGRAM_SYSFS
 #include <errno.h>