chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
b05211f
)
libudev: enumerate - include parent device itself with match_parent()
author
Kay Sievers
<kay.sievers@vrfy.org>
Thu, 7 Jul 2011 22:57:58 +0000
(
00:57
+0200)
committer
Kay Sievers
<kay.sievers@vrfy.org>
Thu, 7 Jul 2011 22:57:58 +0000
(
00:57
+0200)
libudev/libudev-enumerate.c
patch
|
blob
|
history
diff --git
a/libudev/libudev-enumerate.c
b/libudev/libudev-enumerate.c
index 320ab66647d523bab91e1361dacc3aff77f84945..399bbdaf46828afbecce785b092bad7c6c9287fa 100644
(file)
--- 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;
}
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);
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;
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);
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)
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);
}
return scan_devices_all(udev_enumerate);
}