1
0
mirror of https://github.com/systemd/systemd.git synced 2025-03-19 22:50:17 +03:00

Fix libsysfs issue with relying on the detach_state file to be

present in order to traverse the tree properly.

Based on a patch from Daniel Stekloff <dsteklof@us.ibm.com>

Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
Greg KH 2005-05-18 23:32:28 -07:00 committed by Greg KH
parent 60f4473352
commit b479b4887f

View File

@ -383,7 +383,7 @@ struct sysfs_device *sysfs_open_device(const char *bus, const char *bus_id)
*/
struct sysfs_device *sysfs_get_device_parent(struct sysfs_device *dev)
{
char ppath[SYSFS_PATH_MAX], *tmp;
char ppath[SYSFS_PATH_MAX], dpath[SYSFS_PATH_MAX], *tmp;
if (!dev) {
errno = EINVAL;
@ -394,6 +394,7 @@ struct sysfs_device *sysfs_get_device_parent(struct sysfs_device *dev)
return (dev->parent);
memset(ppath, 0, SYSFS_PATH_MAX);
memset(dpath, 0, SYSFS_PATH_MAX);
safestrcpy(ppath, dev->path);
tmp = strrchr(ppath, '/');
if (!tmp) {
@ -410,16 +411,14 @@ struct sysfs_device *sysfs_get_device_parent(struct sysfs_device *dev)
}
*tmp = '\0';
/*
* All "devices" have the "detach_state" attribute - validate here
*/
safestrcat(ppath, "/detach_state");
if (sysfs_path_is_file(ppath)) {
/* Make sure we're not at the top of the device tree */
sysfs_get_mnt_path(dpath, SYSFS_PATH_MAX);
safestrcat(dpath, "/" SYSFS_DEVICES_NAME);
if (strcmp(dpath, ppath) == 0) {
dprintf("Device at %s does not have a parent\n", dev->path);
return NULL;
}
tmp = strrchr(ppath, '/');
*tmp = '\0';
dev->parent = sysfs_open_device_path(ppath);
if (!dev->parent) {
dprintf("Error opening device %s's parent at %s\n",