summaryrefslogtreecommitdiff
path: root/udev_rules.c
diff options
context:
space:
mode:
authorKay Sievers <kay.sievers@vrfy.org>2007-06-10 23:53:40 +0200
committerKay Sievers <kay.sievers@vrfy.org>2007-06-10 23:53:40 +0200
commit956cf79390e303925135663a858456dd0a26e6c6 (patch)
tree5bd9a6f9a17ddba200477a5284df589e38d82cb8 /udev_rules.c
parent9b2e2d4a8a4007dc34e6979c985ee2ff24e5a9ca (diff)
make ATTR{[$SUBSYSTEM/$KERNEL]<attr>}="<value>" working
Diffstat (limited to 'udev_rules.c')
-rw-r--r--udev_rules.c24
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);