chiark / gitweb /
Fix libsysfs issue with relying on the detach_state file to be
authorGreg KH <greg@press.(none)>
Thu, 19 May 2005 06:32:28 +0000 (23:32 -0700)
committerGreg KH <gregkh@suse.de>
Thu, 19 May 2005 06:32:28 +0000 (23:32 -0700)
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>
libsysfs/sysfs_device.c

index d1c5b32..1c59403 100644 (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",