From 6ed03d1e2c1e2e300dda7a7cf4a5ffe10ef18356 Mon Sep 17 00:00:00 2001 From: Kay Sievers Date: Fri, 8 Jul 2011 00:57:58 +0200 Subject: [PATCH] libudev: enumerate - include parent device itself with match_parent() --- libudev/libudev-enumerate.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/libudev/libudev-enumerate.c b/libudev/libudev-enumerate.c index 320ab666..399bbdaf 100644 --- a/libudev/libudev-enumerate.c +++ b/libudev/libudev-enumerate.c @@ -862,6 +862,15 @@ static int parent_crawl_children(struct udev_enumerate *enumerate, const char *p return 0; } +static int scan_devices_children(struct udev_enumerate *enumerate) +{ + const char *path; + + path = udev_device_get_syspath(enumerate->parent_match); + parent_add_child(enumerate, path); + return parent_crawl_children(enumerate, path, 256); +} + static int scan_devices_all(struct udev_enumerate *udev_enumerate) { struct udev *udev = udev_enumerate_get_udev(udev_enumerate); @@ -893,12 +902,15 @@ UDEV_EXPORT int udev_enumerate_scan_devices(struct udev_enumerate *udev_enumerat if (udev_enumerate == NULL) return -EINVAL; + /* efficiently lookup tags only, we maintain a reverse-index */ if (udev_list_get_entry(&udev_enumerate->tags_match_list) != NULL) return scan_devices_tags(udev_enumerate); + /* walk the subtree of one parent device only */ if (udev_enumerate->parent_match != NULL) - return parent_crawl_children(udev_enumerate, udev_device_get_syspath(udev_enumerate->parent_match), 256); + return scan_devices_children(udev_enumerate); + /* scan devices of all subsystems */ return scan_devices_all(udev_enumerate); } -- 2.39.5