[PATCH] update libsysfs to CVS version and fix segfaulting attribute reading

This commit is contained in:
kay.sievers@vrfy.org 2004-12-16 16:05:01 +01:00 committed by Greg KH
parent 82ca88904d
commit 83c35223ed
2 changed files with 33 additions and 2 deletions

View File

@ -640,6 +640,9 @@ struct sysfs_attribute *sysfs_get_classdev_attr
return cur;
}
if (clsdev->directory == NULL)
return NULL;
if (clsdev->directory->subdirs == NULL)
if ((sysfs_read_dir_subdirs(clsdev->directory)) != 0 ||
clsdev->directory->subdirs == NULL)

View File

@ -24,7 +24,9 @@
#include "sysfs.h"
/**
* get_dev_driver: fills in the dev->driver_name field
* get_dev_driver: fills in the dev->driver_name field, but searches by
* opening subsystem. Only to be used if no driver link exists in
* device directory.
*
* Returns 0 on SUCCESS and 1 on error
*/
@ -74,6 +76,32 @@ static int get_dev_driver(struct sysfs_device *dev)
return 1;
}
/*
* get_device_driver_name: gets device's driver name, searches for driver
* link first before going the brute force route.
* @dev: device to retrieve driver
* returns 0 with success and 1 with error
*/
static int get_device_driver_name(struct sysfs_device *dev)
{
char devpath[SYSFS_PATH_MAX], drvpath[SYSFS_PATH_MAX];
if (dev == NULL) {
errno = EINVAL;
return 1;
}
memset(devpath, 0, SYSFS_PATH_MAX);
memset(drvpath, 0, SYSFS_PATH_MAX);
safestrcpy(devpath, dev->path);
safestrcat(devpath, "/driver");
if ((sysfs_get_link(devpath, drvpath, SYSFS_PATH_MAX)) != 0)
return(get_dev_driver(dev));
return (sysfs_get_name_from_path(drvpath, dev->driver_name,
SYSFS_NAME_LEN));
}
/**
* sysfs_get_device_bus: retrieves the bus name the device is on, checks path
* to bus' link to make sure it has correct device.
@ -262,7 +290,7 @@ struct sysfs_device *sysfs_open_device_path(const char *path)
if (sysfs_get_device_bus(dev) != 0)
dprintf("Could not get device bus\n");
if (get_dev_driver(dev) != 0) {
if (get_device_driver_name(dev) != 0) {
dprintf("Could not get device %s's driver\n", dev->bus_id);
safestrcpy(dev->driver_name, SYSFS_UNKNOWN);
}