From 98f10a9e2ada5d72a0c39b94a5b59d9da4f28753 Mon Sep 17 00:00:00 2001 From: Kay Sievers Date: Thu, 2 Oct 2008 21:19:00 +0200 Subject: [PATCH] libudev: device - add get_parent_with_subsystem() --- TODO | 1 + udev/lib/exported_symbols | 1 + udev/lib/libudev-device.c | 16 ++++++++++++++++ udev/lib/libudev.h | 1 + 4 files changed, 19 insertions(+) diff --git a/TODO b/TODO index 082bb478e..ce424c436 100644 --- a/TODO +++ b/TODO @@ -1,4 +1,5 @@ convert usb_id to libudev's udev_device + add DEVTYPE o handle spaces in SYMLINK+=, do not create multiple links o use libudev device in udev_rules.c diff --git a/udev/lib/exported_symbols b/udev/lib/exported_symbols index ffd8d66ac..ff7efeaf7 100644 --- a/udev/lib/exported_symbols +++ b/udev/lib/exported_symbols @@ -16,6 +16,7 @@ udev_list_entry_get_value udev_device_new_from_syspath udev_device_new_from_devnum udev_device_get_parent +udev_device_get_parent_with_subsystem udev_device_ref udev_device_unref udev_device_get_udev diff --git a/udev/lib/libudev-device.c b/udev/lib/libudev-device.c index a51253714..8e4360a7f 100644 --- a/udev/lib/libudev-device.c +++ b/udev/lib/libudev-device.c @@ -404,6 +404,22 @@ struct udev_device *udev_device_get_parent(struct udev_device *udev_device) return udev_device->parent_device; } +struct udev_device *udev_device_get_parent_with_subsystem(struct udev_device *udev_device, const char *subsystem) +{ + struct udev_device *parent; + + parent = udev_device_get_parent(udev_device); + while (parent != NULL) { + const char *parent_subsystem; + + parent_subsystem = udev_device_get_subsystem(parent); + if (parent_subsystem != NULL && strcmp(parent_subsystem, subsystem) == 0) + break; + parent = udev_device_get_parent(parent); + } + return parent; +} + /** * udev_device_get_udev: * @udev_device: udev device diff --git a/udev/lib/libudev.h b/udev/lib/libudev.h index 448346e27..fabe59d7d 100644 --- a/udev/lib/libudev.h +++ b/udev/lib/libudev.h @@ -60,6 +60,7 @@ struct udev_device; extern struct udev_device *udev_device_new_from_syspath(struct udev *udev, const char *syspath); extern struct udev_device *udev_device_new_from_devnum(struct udev *udev, char type, dev_t devnum); extern struct udev_device *udev_device_get_parent(struct udev_device *udev_device); +extern struct udev_device *udev_device_get_parent_with_subsystem(struct udev_device *udev_device, const char *subsystem); extern struct udev_device *udev_device_ref(struct udev_device *udev_device); extern void udev_device_unref(struct udev_device *udev_device); extern struct udev *udev_device_get_udev(struct udev_device *udev_device); -- 2.30.2