From: Hannes Reinecke Date: Wed, 25 Jul 2007 13:24:58 +0000 (+0200) Subject: add $driver subtitution X-Git-Tag: 174~1878 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fea9b2d2924235a459e888ecd35a8b43093b9542;p=systemd add $driver subtitution --- diff --git a/udev.7 b/udev.7 index d3ed4b71..821a476a 100644 --- a/udev.7 +++ b/udev.7 @@ -335,6 +335,16 @@ and \fBATTRS\fR. .RE .PP +\fB$driver\fR, \fB%d\fR +.RS 4 +The driver name of the device matched while searching the devpath upwards for +\fBSUBSYSTEMS\fR, +\fBKERNELS\fR, +\fBDRIVERS\fR +and +\fBATTRS\fR. +.RE +.PP \fB$attr{\fR\fB\fIfile\fR\fR\fB}\fR, \fB%s{\fR\fB\fIfile\fR\fR\fB}\fR .RS 4 The value of a sysfs attribute found at the device, where all keys of the rule have matched. If the matching device does not have such an attribute, all devices along the chain of parents are searched for a matching attribute. If the attribute is a symlink, the last element of the symlink target is returned as the value. diff --git a/udev.xml b/udev.xml index 520c718c..b43abb77 100644 --- a/udev.xml +++ b/udev.xml @@ -487,6 +487,15 @@ + + , + + The driver name of the device matched while searching the devpath upwards for + , , and . + + + + , diff --git a/udev_rules.c b/udev_rules.c index daf3d7ff..3674a27d 100644 --- a/udev_rules.c +++ b/udev_rules.c @@ -597,6 +597,7 @@ void udev_rules_apply_format(struct udevice *udev, char *string, size_t maxsize) SUBST_KERNEL, SUBST_KERNEL_NUMBER, SUBST_ID, + SUBST_DRIVER, SUBST_MAJOR, SUBST_MINOR, SUBST_RESULT, @@ -616,6 +617,7 @@ void udev_rules_apply_format(struct udevice *udev, char *string, size_t maxsize) { .name = "number", .fmt = 'n', .type = SUBST_KERNEL_NUMBER }, { .name = "kernel", .fmt = 'k', .type = SUBST_KERNEL }, { .name = "id", .fmt = 'b', .type = SUBST_ID }, + { .name = "driver", .fmt = 'd', .type = SUBST_DRIVER }, { .name = "major", .fmt = 'M', .type = SUBST_MAJOR }, { .name = "minor", .fmt = 'm', .type = SUBST_MINOR }, { .name = "result", .fmt = 'c', .type = SUBST_RESULT }, @@ -707,6 +709,12 @@ found: dbg("substitute id '%s'", udev->dev_parent->kernel); } break; + case SUBST_DRIVER: + if (udev->dev_parent != NULL) { + strlcat(string, udev->dev_parent->driver, maxsize); + dbg("substitute driver '%s'", udev->dev_parent->driver); + } + break; case SUBST_MAJOR: sprintf(temp2, "%d", major(udev->devt)); strlcat(string, temp2, maxsize);