chiark / gitweb /
nspawn: compress mount table a bit
[elogind.git] / src / logind-dbus.c
index 16dbd3664ca2eb9b0cd65306d423f336dd4e4aef..4321ffd90043906f4736f0de0790a7e35e569083 100644 (file)
@@ -550,24 +550,7 @@ fail:
         return r;
 }
 
-static bool device_has_tag(struct udev_device *d, const char *tag) {
-        struct udev_list_entry *first, *item;
-
-        assert(d);
-        assert(tag);
-
-        /* FIXME */
-        udev_device_get_is_initialized(d);
-
-        first = udev_device_get_tags_list_entry(d);
-        udev_list_entry_foreach(item, first)
-                if (streq(udev_list_entry_get_name(item), tag))
-                        return true;
-
-        return false;
-}
-
-static int trigger_device(Manager *m, const char *prefix) {
+static int trigger_device(Manager *m, struct udev_device *d) {
         struct udev_enumerate *e;
         struct udev_list_entry *first, *item;
         int r;
@@ -580,6 +563,14 @@ static int trigger_device(Manager *m, const char *prefix) {
                 goto finish;
         }
 
+        if (d) {
+                if (udev_enumerate_add_match_parent(e, d) < 0) {
+                        r = -EIO;
+                        goto finish;
+                }
+        }
+
+
         if (udev_enumerate_scan_devices(e) < 0) {
                 r = -EIO;
                 goto finish;
@@ -592,9 +583,6 @@ static int trigger_device(Manager *m, const char *prefix) {
 
                 p = udev_list_entry_get_name(item);
 
-                if (prefix && !path_startswith(p, prefix))
-                        continue;
-
                 t = strappend(p, "/uevent");
                 if (!t) {
                         r = -ENOMEM;
@@ -628,7 +616,7 @@ static int attach_device(Manager *m, const char *seat, const char *sysfs) {
         if (!d)
                 return -ENODEV;
 
-        if (!device_has_tag(d, "seat")) {
+        if (!udev_device_has_tag(d, "seat")) {
                 r = -ENODEV;
                 goto finish;
         }
@@ -654,7 +642,7 @@ static int attach_device(Manager *m, const char *seat, const char *sysfs) {
         if (r < 0)
                 goto finish;
 
-        r = trigger_device(m, sysfs);
+        r = trigger_device(m, d);
 
 finish:
         free(rule);