diff options
author | Kay Sievers <kay.sievers@suse.de> | 2006-09-05 13:54:08 +0200 |
---|---|---|
committer | Kay Sievers <kay.sievers@suse.de> | 2006-09-05 13:54:08 +0200 |
commit | 492e76c9c1108a28eae356cc8bd7955ccf234980 (patch) | |
tree | e4a0c08a9a9c866be5609f72ef810ac7bed2348f /udev_sysfs.c | |
parent | e136a3360b9a0b746e585b9c3b2403e6dd1e7f7c (diff) |
udevinfo: do not show symlinks as attributes in --attribute-walk
Diffstat (limited to 'udev_sysfs.c')
-rw-r--r-- | udev_sysfs.c | 49 |
1 files changed, 29 insertions, 20 deletions
diff --git a/udev_sysfs.c b/udev_sysfs.c index e733d417c5..0b7561f0eb 100644 --- a/udev_sysfs.c +++ b/udev_sysfs.c @@ -397,27 +397,36 @@ char *sysfs_attr_get_value(const char *devpath, const char *attr_name) attr->value = attr->value_local; } } - } else { - /* read attribute value */ - fd = open(path_full, O_RDONLY); - if (fd < 0) { - dbg("attribute '%s' does not exist", path_full); - goto out; - } - size = read(fd, value, sizeof(value)); - close(fd); - if (size < 0) - goto out; - if (size == sizeof(value)) - goto out; - - /* got a valid value, store and return it */ - value[size] = '\0'; - remove_trailing_chars(value, '\n'); - dbg("cache '%s' with attribute value '%s'", path_full, value); - strlcpy(attr->value_local, value, sizeof(attr->value_local)); - attr->value = attr->value_local; + goto out; + } + + /* skip directories */ + if (S_ISDIR(statbuf.st_mode)) + goto out; + + /* skip non-readable files */ + if ((statbuf.st_mode & S_IRUSR) == 0) + goto out; + + /* read attribute value */ + fd = open(path_full, O_RDONLY); + if (fd < 0) { + dbg("attribute '%s' does not exist", path_full); + goto out; } + size = read(fd, value, sizeof(value)); + close(fd); + if (size < 0) + goto out; + if (size == sizeof(value)) + goto out; + + /* got a valid value, store and return it */ + value[size] = '\0'; + remove_trailing_chars(value, '\n'); + dbg("cache '%s' with attribute value '%s'", path_full, value); + strlcpy(attr->value_local, value, sizeof(attr->value_local)); + attr->value = attr->value_local; out: return attr->value; |