1
0
mirror of https://github.com/systemd/systemd.git synced 2025-01-26 14:04:03 +03:00

[PATCH] conditional remove of trailing sysfs whitespace

Hey, it may never happen, that one wants to distinguish attributes by
trailing spaces, but we should not lose the control over it, just for
being lazy :)

Here we remove the trailing spaces of the sysfs attribute only if the
configured value to match doesn't have any trailing spaces by itself.
So if you put a attribute in a rule with spaces at the end, the sysfs
attribute _must_ match exactly.

Is that cool for everyone?

As usual, 2 tests are added for it with a artificial sysfs file and
a few words to the man page.
This commit is contained in:
kay.sievers@vrfy.org 2004-03-04 18:59:13 -08:00 committed by Greg KH
parent ebc39fefd5
commit d5f91372dd
4 changed files with 37 additions and 0 deletions

View File

@ -525,6 +525,8 @@ attr_found:
static int compare_sysfs_attribute(struct sysfs_class_device *class_dev, struct sysfs_device *sysfs_device, struct sysfs_pair *pair)
{
struct sysfs_attribute *tmpattr;
int i;
int len;
if ((pair == NULL) || (pair->file[0] == '\0') || (pair->value == '\0'))
return -ENODEV;
@ -533,6 +535,18 @@ static int compare_sysfs_attribute(struct sysfs_class_device *class_dev, struct
if (tmpattr == NULL)
return -ENODEV;
/* strip trailing whitespace of value, if not asked to match for it */
if (! isspace(pair->value[strlen(pair->value)-1])) {
i = len = strlen(tmpattr->value);
while (i > 0 && isspace(tmpattr->value[i-1]))
i--;
if (i < len) {
tmpattr->value[i] = '\0';
dbg("remove %i trailing whitespace chars from '%s'",
len - i, tmpattr->value);
}
}
dbg("compare attribute '%s' value '%s' with '%s'",
pair->file, tmpattr->value, pair->value);
if (strcmp_pattern(pair->value, tmpattr->value) != 0)

View File

@ -465,6 +465,25 @@ EOF
conf => <<EOF
BUS="scsi", ID="*:0:0:0", NAME="scsi-0:0:0:0"
BUS="scsi", ID="0:0:0:0", NAME="bad"
EOF
},
{
desc => "ignore SYSFS attribute whitespace",
subsys => "block",
devpath => "block/sda",
expected => "ignored",
conf => <<EOF
BUS="scsi", SYSFS{whitespace_test}="WHITE SPACE", NAME="ignored"
EOF
},
{
desc => "do not ignore SYSFS attribute whitespace",
subsys => "block",
devpath => "block/sda",
expected => "matched-with-space",
conf => <<EOF
BUS="scsi", SYSFS{whitespace_test}="WHITE SPACE ", NAME="wrong-to-ignore"
BUS="scsi", SYSFS{whitespace_test}="WHITE SPACE ", NAME="matched-with-space"
EOF
},
);

3
udev.8
View File

@ -178,6 +178,9 @@ Match the topological position on bus, like physical port of USB device
Match sysfs device attribute like label, vendor, USB serial number, SCSI UUID
or file system label. Up to 5 different sysfs files can be checked, with
all of the values being required in order to match the rule.
.br
Trailing whitespace characters in the sysfs attribute value are ignored, if
the key doesn't have any trailing whitespace characters by itself.
.TP
.B PROGRAM
Call external program. This key is valid if the program returns successful.