diff options
author | Kay Sievers <kay.sievers@vrfy.org> | 2007-03-16 16:02:22 +0100 |
---|---|---|
committer | Kay Sievers <kay.sievers@vrfy.org> | 2007-03-16 16:02:22 +0100 |
commit | 2afb8cb37af32495e4f4ff9188e21cbe3a44ce6c (patch) | |
tree | 14e8701c85d0bbbcbc12169ba78b5c29b9d694d8 | |
parent | 2dbb47f8606d18b14e981fb5cf245e8aaaad2de1 (diff) |
pick actual valid device in udev_db_lookup_name
-rw-r--r-- | udev_db.c | 29 |
1 files changed, 20 insertions, 9 deletions
@@ -275,8 +275,7 @@ int udev_db_lookup_name(const char *name, char *devpath, size_t len) while (!found) { struct dirent *ent; char device[PATH_SIZE]; - char filename[PATH_SIZE]; - struct stat statbuf; + struct udevice *udev; ent = readdir(dir); if (ent == NULL || ent->d_name[0] == '\0') @@ -286,15 +285,27 @@ int udev_db_lookup_name(const char *name, char *devpath, size_t len) strlcpy(device, ent->d_name, sizeof(device)); path_decode(device); - - dbg("looking at '%s'", device); - strlcpy(filename, sysfs_path, sizeof(filename)); - strlcat(filename, device, sizeof(filename)); - if (stat(filename, &statbuf) == 0) { - strlcpy(devpath, device, len); - found = 1; + udev = udev_device_init(); + if (udev == NULL) break; + if (udev_db_get_device(udev, device) == 0) { + char filename[PATH_SIZE]; + struct stat statbuf; + + info("found db entry '%s'", device); + strlcpy(filename, udev_root, sizeof(filename)); + strlcat(filename, "/", sizeof(filename)); + strlcat(filename, name, sizeof(filename)); + /* make sure device entry matches dev_t */ + if (stat(filename, &statbuf) == 0) { + if (statbuf.st_rdev == udev->devt) { + info("node '%s' matches dev_t", udev->name); + strlcpy(devpath, device, len); + found = 1; + } + } } + udev_device_cleanup(udev); } closedir(dir); |