Skip to contentSkip to conversation

conditional remove of trailing sysfs whitespace

PATCH In review Kay Sievers 4 participants 5 messages Mar 4, 2004

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 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.

thanks,
Kay

namedev.c +14 -0
diff -Nru a/namedev.c b/namedev.c
@@ -525,6 +525,8 @@
 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;
@@ -532,6 +534,18 @@
 	tmpattr = find_sysfs_attribute(class_dev, sysfs_device, pair->file);
 	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);
test/sys/devices/pci0000:00/0000:00:1e.0/0000:02:05.0/host0/0:0:0:0/whitespace_test new file +1 -0
diff -Nru a/test/sys/devices/pci0000:00/0000:00:1e.0/0000:02:05.0/host0/0:0:0:0/whitespace_test b/test/sys/devices/pci0000:00/0000:00:1e.0/0000:02:05.0/host0/0:0:0:0/whitespace_test
@@ -0,0 +1 @@
+WHITE  SPACE   
test/udev-test.pl +19 -0
diff -Nru a/test/udev-test.pl b/test/udev-test.pl
@@ -467,6 +467,25 @@
 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
+	},
 );
 
 # set env
udev.8 +3 -0
diff -Nru a/udev.8 b/udev.8
@@ -178,6 +178,9 @@
 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.
#1 lore raw
Quoted 2 lines

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.

THANK YOU!
That is (IMHO) the right way to do it.
But I deeply agree with your first phrase:

Quoted 2 lines

Hey, it may never happen, that one wants to distinguish attributes by
trailing spaces, ...

Amen!

-- R;

-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id70&alloc_id638&op=click
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel

#2 lore raw
In reply to Kay Sievers
Quoted 9 lines · Kay Sievers

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.

Quoted 4 lines

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.

Very nice solution. This should make everyone happen, as it will "just work" for whatever people want it to do, no config option needed.

thanks so much,

greg k-h

-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id70&alloc_id638&op=click
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel

#3 lore raw
In reply to Kay Sievers

Except if you have two devices with "Vendor" and "Vendor "...

Raf.

Quoted 15 lines · Greg KH
Quoted 9 lines · Kay Sievers

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.

Quoted 4 lines

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.

Quoted 6 lines

Very nice solution. This should make everyone happen, as it will "just work" for whatever people want it to do, no config option needed.

thanks so much,

greg k-h

-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id70&alloc_id638&op=click
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel

#4 lore raw
In reply to Kay Sievers
Quoted 2 lines · Raf D'Halleweyn

Except if you have two devices with "Vendor" and "Vendor "...

Have you ever seen such a thing?

thanks,

greg k-h

-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id70&alloc_id638&op=click
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel