chiark / gitweb /
restore behavior of NAME==
authorKay Sievers <kay.sievers@vrfy.org>
Wed, 25 Jul 2007 13:29:14 +0000 (15:29 +0200)
committerKay Sievers <kay.sievers@vrfy.org>
Wed, 25 Jul 2007 13:29:14 +0000 (15:29 +0200)
test/udev-test.pl
udev_rules.c

index a2043080e96748b09917d3e096b9a2390b0484d8..53499d8871ff49985b3c06518222e2d51305dc9b 100755 (executable)
@@ -1516,6 +1516,18 @@ KERNEL=="sda2", NAME="wrong"
 KERNEL=="sda1", NAME=="wrong*", SYMLINK+="wronglink"
 KERNEL=="sda1", NAME=="?*", SYMLINK+="link"
 KERNEL=="sda1", NAME=="node*", SYMLINK+="link2"
+EOF
+       },
+       {
+               desc            => "NAME compare test 2",
+               subsys          => "block",
+               devpath         => "/block/sda/sda1",
+               exp_name        => "link2",
+               exp_target      => "sda1",
+               not_exp_name    => "link",
+               rules           => <<EOF
+KERNEL=="sda1", NAME=="?*", SYMLINK+="link"
+KERNEL=="sda1", NAME!="?*", SYMLINK+="link2"
 EOF
        },
        {
index 3674a27d636a71785793ac4087ed611fcb905b13..e2877abe70be961b112c84beac4390b64985815a 100644 (file)
@@ -948,6 +948,7 @@ static int match_rule(struct udevice *udev, struct udev_rule *rule)
        if (match_key("DRIVER", rule, &rule->driver, udev->dev->driver))
                goto nomatch;
 
+       /* match NAME against a value assigned by an earlier rule */
        if (match_key("NAME", rule, &rule->name, udev->name))
                goto nomatch;
 
@@ -1273,9 +1274,6 @@ int udev_rules_get_name(struct udev_rules *rules, struct udevice *udev)
        dbg("udev->dev->devpath='%s'", udev->dev->devpath);
        dbg("udev->dev->kernel='%s'", udev->dev->kernel);
 
-       /* use kernel name as default node name */
-       strlcpy(udev->name, udev->dev->kernel, sizeof(udev->name));
-
        /* look for a matching rule to apply */
        udev_rules_iter_init(rules);
        while (1) {
@@ -1430,8 +1428,10 @@ int udev_rules_get_name(struct udev_rules *rules, struct udevice *udev)
                }
        }
 
-       if (!name_set)
+       if (!name_set) {
                info("no node name set, will use kernel name '%s'", udev->name);
+               strlcpy(udev->name, udev->dev->kernel, sizeof(udev->name));
+       }
 
        if (udev->tmp_node[0] != '\0') {
                dbg("removing temporary device node");