summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2018-06-04 22:52:02 +0200
committerSven Eden <yamakuzure@gmx.net>2018-08-24 16:47:08 +0200
commit541584965693a7e8d90712ad31ccc5285eecce56 (patch)
tree11c3dab85d29c71b92349336eef208d4ca57ed40 /src
parent3d6b013798a625b59c0cdf08dc7dde6b3bef3998 (diff)
udev: add helper udev_device_new_from_stat_rdev()
This is a simple wrapper around udev_device_new_from_devnum(), and uses the data from a struct stat's .st_rdev field to derive the udev_device object.
Diffstat (limited to 'src')
-rw-r--r--src/shared/udev-util.c23
-rw-r--r--src/shared/udev-util.h2
2 files changed, 25 insertions, 0 deletions
diff --git a/src/shared/udev-util.c b/src/shared/udev-util.c
index 81fc805d2..b031353c5 100644
--- a/src/shared/udev-util.c
+++ b/src/shared/udev-util.c
@@ -45,3 +45,26 @@ int udev_parse_config(void) {
return 0;
}
+
+int udev_device_new_from_stat_rdev(struct udev *udev, const struct stat *st, struct udev_device **ret) {
+ struct udev_device *nd;
+ char type;
+
+ assert(udev);
+ assert(st);
+ assert(ret);
+
+ if (S_ISBLK(st->st_mode))
+ type = 'b';
+ else if (S_ISCHR(st->st_mode))
+ type = 'c';
+ else
+ return -ENOTTY;
+
+ nd = udev_device_new_from_devnum(udev, type, st->st_rdev);
+ if (!nd)
+ return -errno;
+
+ *ret = nd;
+ return 0;
+}
diff --git a/src/shared/udev-util.h b/src/shared/udev-util.h
index 1c5150f60..b91b412b8 100644
--- a/src/shared/udev-util.h
+++ b/src/shared/udev-util.h
@@ -29,3 +29,5 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(struct udev_monitor*, udev_monitor_unref);
#if 0 /// UNNEEDED by elogind
#endif // 0
int udev_parse_config(void);
+
+int udev_device_new_from_stat_rdev(struct udev *udev, const struct stat *st, struct udev_device **ret);