X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=namedev.c;h=69669709df9ef37211525a6bfd8d0527a2797e64;hp=268a3d5be667b0a4cbcbaf34817e24ca2521e8f8;hb=7225821d631f37f3c2b11e1d62aeb516b2acec30;hpb=af4b05d4917fdfa55eff3d8d53a830464d8162a1 diff --git a/namedev.c b/namedev.c index 268a3d5be..69669709d 100644 --- a/namedev.c +++ b/namedev.c @@ -40,7 +40,7 @@ #include "udev_version.h" #include "logging.h" #include "namedev.h" -#include "udevdb.h" +#include "udev_db.h" static struct sysfs_attribute *find_sysfs_attribute(struct sysfs_class_device *class_dev, struct sysfs_device *sysfs_device, char *attr); @@ -194,7 +194,7 @@ static int find_free_number(struct udevice *udev, const char *name) while (1) { dbg("look for existing node '%s'", filename); memset(&db_udev, 0x00, sizeof(struct udevice)); - if (udevdb_get_dev_byname(&db_udev, filename) != 0) { + if (udev_db_get_device_byname(&db_udev, filename) != 0) { dbg("free num=%d", num); return num; } @@ -204,7 +204,7 @@ static int find_free_number(struct udevice *udev, const char *name) info("find_free_number gone crazy (num=%d), aborted", num); return -1; } - snprintf(filename, NAME_SIZE-1, "%s%d", name, num); + snprintf(filename, NAME_SIZE, "%s%d", name, num); filename[NAME_SIZE-1] = '\0'; } } @@ -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,