chiark / gitweb /
[PATCH] add support for /devices-devices without any file to wait for
[elogind.git] / namedev.c
index 3ab45d4ec6a67c32788b5b35a621a6f43ccaa193..69669709df9ef37211525a6bfd8d0527a2797e64 100644 (file)
--- a/namedev.c
+++ b/namedev.c
@@ -604,7 +604,7 @@ static int match_rule(struct config_device *dev, struct sysfs_class_device *clas
                        }
                }
 
-               /* check for matching kernel name*/
+               /* check for matching kernel name */
                if (dev->kernel[0] != '\0') {
                        dbg("check for " FIELD_KERNEL " dev->kernel='%s' class_dev->name='%s'", dev->kernel, class_dev->name);
                        if (strcmp_pattern(dev->kernel, class_dev->name) != 0) {
@@ -615,6 +615,28 @@ static int match_rule(struct config_device *dev, struct sysfs_class_device *clas
                        }
                }
 
+               /* check for matching subsystem */
+               if (dev->subsystem[0] != '\0') {
+                       dbg("check for " FIELD_SUBSYSTEM " dev->subsystem='%s' class_dev->name='%s'", dev->subsystem, class_dev->name);
+                       if (strcmp_pattern(dev->subsystem, udev->subsystem) != 0) {
+                               dbg(FIELD_SUBSYSTEM " is not matching");
+                               goto try_parent;
+                       } else {
+                               dbg(FIELD_SUBSYSTEM " matches");
+                       }
+               }
+
+               /* check for matching driver */
+               if (dev->driver[0] != '\0') {
+                       dbg("check for " FIELD_DRIVER " dev->driver='%s' sysfs_device->driver_name='%s'", dev->driver, sysfs_device->driver_name);
+                       if (strcmp_pattern(dev->driver, sysfs_device->driver_name) != 0) {
+                               dbg(FIELD_DRIVER " is not matching");
+                               goto try_parent;
+                       } else {
+                               dbg(FIELD_DRIVER " matches");
+                       }
+               }
+
                /* check for matching bus id */
                if (dev->id[0] != '\0') {
                        dbg("check " FIELD_ID);
@@ -785,6 +807,7 @@ found:
                goto done;
 
        udev->partitions = dev->partitions;
+       udev->ignore_remove = dev->ignore_remove;
 
        /* get permissions given in rule */
        set_empty_perms(udev, dev->mode,