chiark / gitweb /
sysfs: skip unknown sysfs directories
authorKay Sievers <kay.sievers@vrfy.org>
Mon, 4 Jun 2007 09:20:18 +0000 (11:20 +0200)
committerKay Sievers <kay.sievers@vrfy.org>
Mon, 4 Jun 2007 09:20:18 +0000 (11:20 +0200)
udev_sysfs.c
udevinfo.c

index 6e6f16c..34ae9ac 100644 (file)
@@ -155,9 +155,21 @@ struct sysfs_device *sysfs_device_get(const char *devpath)
        int len;
        char *pos;
 
+       /* we handle only these devpathes */
+       if (devpath != NULL &&
+           strncmp(devpath, "/devices/", 9) != 0 &&
+           strncmp(devpath, "/subsystem/", 11) != 0 &&
+           strncmp(devpath, "/module/", 8) != 0 &&
+           strncmp(devpath, "/bus/", 5) != 0 &&
+           strncmp(devpath, "/class/", 7) != 0 &&
+           strncmp(devpath, "/block/", 7) != 0)
+               return NULL;
+
        dbg("open '%s'", devpath);
        strlcpy(devpath_real, devpath, sizeof(devpath_real));
        remove_trailing_chars(devpath_real, '/');
+       if (devpath[0] == '\0' )
+               return NULL;
 
        /* look for device already in cache (we never put an untranslated path in the cache) */
        list_for_each_entry(dev_loop, &dev_list, node) {
@@ -275,14 +287,6 @@ struct sysfs_device *sysfs_device_get_parent(struct sysfs_device *dev)
        if (dev->parent != NULL)
                return dev->parent;
 
-       /* requesting a parent is only valid for these devpathes */
-       if ((strncmp(dev->devpath, "/devices/", 9) != 0) &&
-           (strncmp(dev->devpath, "/subsystem/", 11) != 0) &&
-           (strncmp(dev->devpath, "/bus/", 5) != 0) &&
-           (strncmp(dev->devpath, "/class/", 7) != 0) &&
-           (strncmp(dev->devpath, "/block/", 7) != 0))
-               return NULL;
-
        strlcpy(parent_devpath, dev->devpath, sizeof(parent_devpath));
        dbg("'%s'", parent_devpath);
 
index cda2292..82057de 100644 (file)
@@ -413,7 +413,7 @@ int main(int argc, char *argv[], char *envp[])
        case ACTION_ATTRIBUTE_WALK:
                if (path[0] != '\0') {
                        if (print_device_chain(path) != 0) {
-                               fprintf(stderr, "device not found\n");
+                               fprintf(stderr, "no valid sysfs device found\n");
                                rc = 4;
                                goto exit;
                        }
@@ -424,7 +424,7 @@ int main(int argc, char *argv[], char *envp[])
                                goto exit;
                        }
                        if (print_device_chain(udev->dev->devpath) != 0) {
-                               fprintf(stderr, "device not found\n");
+                               fprintf(stderr, "no valid sysfs device found\n");
                                rc = 4;
                                goto exit;
                        }