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')
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);