diff options
author | Kay Sievers <kay.sievers@vrfy.org> | 2007-06-10 23:53:40 +0200 |
---|---|---|
committer | Kay Sievers <kay.sievers@vrfy.org> | 2007-06-10 23:53:40 +0200 |
commit | 956cf79390e303925135663a858456dd0a26e6c6 (patch) | |
tree | 5bd9a6f9a17ddba200477a5284df589e38d82cb8 | |
parent | 9b2e2d4a8a4007dc34e6979c985ee2ff24e5a9ca (diff) |
make ATTR{[$SUBSYSTEM/$KERNEL]<attr>}="<value>" working
-rw-r--r-- | udev_rules.c | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/udev_rules.c b/udev_rules.c index 598c1ba739..6ef320dfc7 100644 --- a/udev_rules.c +++ b/udev_rules.c @@ -923,14 +923,28 @@ try_parent: if (pair->key.operation == KEY_OP_ASSIGN) { const char *key_name = key_pair_name(rule, pair); - char attr[PATH_SIZE]; + char devpath[PATH_SIZE]; + char *attrib; + char attr[PATH_SIZE] = ""; char value[NAME_SIZE]; FILE *f; - strlcpy(attr, sysfs_path, sizeof(attr)); - strlcat(attr, udev->dev->devpath, sizeof(attr)); - strlcat(attr, "/", sizeof(attr)); - strlcat(attr, key_name, sizeof(attr)); + if (attr_get_by_subsys_id(key_name, devpath, sizeof(devpath), &attrib)) { + if (attrib != NULL) { + strlcpy(attr, sysfs_path, sizeof(attr)); + strlcat(attr, devpath, sizeof(attr)); + strlcat(attr, "/", sizeof(attr)); + strlcat(attr, attrib, sizeof(attr)); + } + } + + if (attr[0] == '\0') { + strlcpy(attr, sysfs_path, sizeof(attr)); + strlcat(attr, udev->dev->devpath, sizeof(attr)); + strlcat(attr, "/", sizeof(attr)); + strlcat(attr, key_name, sizeof(attr)); + } + strlcpy(value, key_val(rule, &pair->key), sizeof(value)); udev_rules_apply_format(udev, value, sizeof(value)); info("writing '%s' to sysfs file '%s'", value, attr); |