From: Marcel Holtmann Date: Sat, 3 Jan 2009 10:10:10 +0000 (+0100) Subject: libudev: device - lookup subsystem and devtype together X-Git-Tag: 174~1228 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=883012d49b0635ab20898a649fcce6db21288571 libudev: device - lookup subsystem and devtype together --- diff --git a/udev/lib/exported_symbols b/udev/lib/exported_symbols index 6b07842a8..88d5c48c1 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 a25716d95..7c803594e 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 b96e49429..bac362a36 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);