summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TODO1
-rw-r--r--udev/lib/exported_symbols1
-rw-r--r--udev/lib/libudev-device.c16
-rw-r--r--udev/lib/libudev.h1
4 files changed, 19 insertions, 0 deletions
diff --git a/TODO b/TODO
index 082bb478eb..ce424c4361 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 ffd8d66acd..ff7efeaf75 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 a512537140..8e4360a7f4 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 448346e278..fabe59d7d7 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);