diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2009-01-03 11:10:10 +0100 |
---|---|---|
committer | Kay Sievers <kay.sievers@vrfy.org> | 2009-01-03 15:12:17 +0100 |
commit | 883012d49b0635ab20898a649fcce6db21288571 (patch) | |
tree | 46546f0e29b8340583ba1f446717cc645084abe4 | |
parent | b92511747af31bcfc880b33505c61ef6c96c6dac (diff) |
libudev: device - lookup subsystem and devtype together
-rw-r--r-- | udev/lib/exported_symbols | 2 | ||||
-rw-r--r-- | udev/lib/libudev-device.c | 17 | ||||
-rw-r--r-- | udev/lib/libudev.h | 2 |
3 files changed, 15 insertions, 6 deletions
diff --git a/udev/lib/exported_symbols b/udev/lib/exported_symbols index 6b07842a81..88d5c48c10 100644 --- a/udev/lib/exported_symbols +++ b/udev/lib/exported_symbols @@ -17,7 +17,7 @@ udev_device_new_from_devnum udev_device_new_from_subsystem_sysname udev_device_get_parent udev_device_get_parent_with_subsystem -udev_device_get_parent_with_devtype +udev_device_get_parent_with_subsystem_devtype 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 a25716d95d..7c803594e4 100644 --- a/udev/lib/libudev-device.c +++ b/udev/lib/libudev-device.c @@ -557,17 +557,26 @@ struct udev_device *udev_device_get_parent_with_subsystem(struct udev_device *ud return parent; } -struct udev_device *udev_device_get_parent_with_devtype(struct udev_device *udev_device, const char *devtype) +struct udev_device *udev_device_get_parent_with_subsystem_devtype(struct udev_device *udev_device, const char *subsystem, const char *devtype) { struct udev_device *parent; + if (subsystem == NULL) + return NULL; + parent = udev_device_get_parent(udev_device); while (parent != NULL) { + const char *parent_subsystem; const char *parent_devtype; - parent_devtype = udev_device_get_devtype(parent); - if (parent_devtype != NULL && strcmp(parent_devtype, devtype) == 0) - break; + parent_subsystem = udev_device_get_subsystem(parent); + if (parent_subsystem != NULL && strcmp(parent_subsystem, subsystem) == 0) { + if (devtype == NULL) + break; + parent_devtype = udev_device_get_devtype(parent); + if (parent_devtype != NULL && strcmp(parent_devtype, devtype) == 0) + break; + } parent = udev_device_get_parent(parent); } return parent; diff --git a/udev/lib/libudev.h b/udev/lib/libudev.h index b96e49429b..bac362a360 100644 --- a/udev/lib/libudev.h +++ b/udev/lib/libudev.h @@ -63,7 +63,7 @@ extern struct udev_device *udev_device_new_from_devnum(struct udev *udev, char t extern struct udev_device *udev_device_new_from_subsystem_sysname(struct udev *udev, const char *subsystem, const char *sysname); 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_get_parent_with_devtype(struct udev_device *udev_device, const char *devtype); +extern struct udev_device *udev_device_get_parent_with_subsytem_devtype(struct udev_device *udev_device, const char *subsystem, const char *devtype); 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); |