3 @@ -26,6 +26,7 @@ struct udev_device {
11 @@ -115,6 +116,29 @@ udev_device_new_from_devnum(struct udev
16 +udev_device_new_from_subsystem_sysname(
17 + struct udev *udev, const char *subsystem, const char *sysname)
19 + struct udev_device *u;
23 + snprintf(sysfsname, sizeof(sysfsname), "/sys/bus/%s/devices/%s/", subsystem, sysname);
24 + if (stat(sysfsname, &st) == 0)
27 + u = calloc(1, sizeof(struct udev_device));
28 + strncpy(u->sysfspath, sysfsname, sizeof(u->sysfspath));
39 udev_device_get_devnode(struct udev_device *udev_device)
41 @@ -132,6 +156,20 @@ udev_device_get_devnum(struct udev_devic
43 udev_device_get_driver(struct udev_device *udev_device)
45 + if (udev_device->sysfspath)
49 + snprintf(driverlnp, sizeof(driverlnp), "%s/driver",
50 + udev_device->sysfspath);
51 + if (readlink(driverlnp, driverlnk, sizeof(driver)))
54 + drivernm = strrchr(driverlnk, '/');
64 @@ -30,6 +30,8 @@ struct udev_device *udev_device_new_from
65 struct udev *udev, char const *syspath);
66 struct udev_device *udev_device_new_from_devnum(
67 struct udev *udev, char type, dev_t devnum);
68 +struct udev_device *udev_device_new_from_subsystem_sysname(
69 + struct udev *udev, const char *subsystem, const char *sysname);
70 char const *udev_device_get_driver(struct udev_device *udev_device);
71 char const *udev_device_get_syspath(struct udev_device *udev_device);
72 char const *udev_device_get_sysname(struct udev_device *udev_device);