summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKay Sievers <kay.sievers@vrfy.org>2008-04-21 17:43:12 +0200
committerKay Sievers <kay.sievers@vrfy.org>2008-04-21 17:43:12 +0200
commit927e994219e7d6ddbe9c14800b15fd1bc1613613 (patch)
tree8e8244281612a65cfffebc5801e00512de562b62
parent953080abd9873dd92159c25cd34252c4cc366011 (diff)
add $links substitution
-rw-r--r--udev.77
-rw-r--r--udev.xml12
-rw-r--r--udev_rules.c24
3 files changed, 38 insertions, 5 deletions
diff --git a/udev.7 b/udev.7
index 3bc04b7c63..1cad58d18b 100644
--- a/udev.7
+++ b/udev.7
@@ -378,7 +378,12 @@ The node name of the parent device\.
.PP
\fB$name\fR
.RS 4
-The name of the device node\. The value is only set if an earlier rule assigned a value, or during a remove events\.
+The current name of the device node\. If not changed by a rule, it is the name of the kernel device\.
+.RE
+.PP
+\fB$links\fR
+.RS 4
+The current list of symlinks, separated by a space character\. The value is only set if an earlier rule assigned a value, or during a remove events\.
.RE
.PP
\fB$root\fR, \fB%r\fR
diff --git a/udev.xml b/udev.xml
index e432965317..15651e006e 100644
--- a/udev.xml
+++ b/udev.xml
@@ -556,8 +556,16 @@
<varlistentry>
<term><option>$name</option></term>
<listitem>
- <para>The name of the device node. The value is only set if an earlier
- rule assigned a value, or during a remove events.</para>
+ <para>The current name of the device node. If not changed by a rule, it is the
+ name of the kernel device.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>$links</option></term>
+ <listitem>
+ <para>The current list of symlinks, separated by a space character. The value is
+ only set if an earlier rule assigned a value, or during a remove events.</para>
</listitem>
</varlistentry>
diff --git a/udev_rules.c b/udev_rules.c
index 884cb7098c..d476e699e4 100644
--- a/udev_rules.c
+++ b/udev_rules.c
@@ -658,6 +658,7 @@ void udev_rules_apply_format(struct udevice *udev, char *string, size_t maxsize)
SUBST_PARENT,
SUBST_TEMP_NODE,
SUBST_NAME,
+ SUBST_LINKS,
SUBST_ROOT,
SUBST_SYS,
SUBST_ENV,
@@ -680,6 +681,7 @@ void udev_rules_apply_format(struct udevice *udev, char *string, size_t maxsize)
{ .name = "parent", .fmt = 'P', .type = SUBST_PARENT },
{ .name = "tempnode", .fmt = 'N', .type = SUBST_TEMP_NODE },
{ .name = "name", .fmt = 'D', .type = SUBST_NAME },
+ { .name = "links", .fmt = 'L', .type = SUBST_LINKS },
{ .name = "root", .fmt = 'r', .type = SUBST_ROOT },
{ .name = "sys", .fmt = 'S', .type = SUBST_SYS },
{ .name = "env", .fmt = 'E', .type = SUBST_ENV },
@@ -899,8 +901,26 @@ found:
dbg("substitute temporary device node name '%s'\n", udev->tmp_node);
break;
case SUBST_NAME:
- strlcat(string, udev->name, maxsize);
- dbg("substitute udev->name '%s'\n", udev->name);
+ if (udev->name[0] == '\0') {
+ strlcat(string, udev->dev->kernel, maxsize);
+ dbg("substitute udev->kernel '%s'\n", udev->name);
+ } else {
+ strlcat(string, udev->name, maxsize);
+ dbg("substitute udev->name '%s'\n", udev->name);
+ }
+ break;
+ case SUBST_LINKS:
+ if (!list_empty(&udev->symlink_list)) {
+ struct name_entry *name_loop;
+ char symlinks[PATH_SIZE] = "";
+
+ list_for_each_entry(name_loop, &udev->symlink_list, node) {
+ strlcat(symlinks, name_loop->name, sizeof(symlinks));
+ strlcat(symlinks, " ", sizeof(symlinks));
+ }
+ remove_trailing_chars(symlinks, ' ');
+ strlcat(string, symlinks, maxsize);
+ }
break;
case SUBST_ROOT:
strlcat(string, udev_root, maxsize);