chiark / gitweb /
libudev: udev_device - read "driver" value
[elogind.git] / udev / lib / libudev-device.c
index fd7c962d3ace0c10a3e7e6e43ebf65549a73578c..578afe7ec2d4e77bf707faed29da7063121a7417 100644 (file)
@@ -194,6 +194,10 @@ void udev_device_unref(struct udev_device *udev_device)
        free(udev_device->subsystem);
        name_list_cleanup(udev_device->udev, &udev_device->link_list);
        name_list_cleanup(udev_device->udev, &udev_device->env_list);
+       free(udev_device->action);
+       free(udev_device->driver);
+       free(udev_device->devpath_old);
+       free(udev_device->physdevpath);
        info(udev_device->udev, "udev_device: %p released\n", udev_device);
        free(udev_device);
 }
@@ -342,8 +346,15 @@ int udev_device_get_properties(struct udev_device *udev_device,
 
 const char *udev_device_get_driver(struct udev_device *udev_device)
 {
+       char driver[NAME_SIZE];
+
        if (udev_device == NULL)
                return NULL;
+       if (udev_device->driver != NULL)
+               return udev_device->driver;
+       if (util_get_sys_driver(udev_device->udev, udev_device->devpath, driver, sizeof(driver)) < 2)
+               return NULL;
+       udev_device->driver = strdup(driver);
        return udev_device->driver;
 }