linux-hotplug.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Kay Sievers <kay.sievers@vrfy.org>
To: linux-hotplug@vger.kernel.org
Subject: [udev] a bug / pattern match for label method
Date: Thu, 04 Dec 2003 01:58:42 +0000	[thread overview]
Message-ID: <marc-linux-hotplug-107050332126234@msgid-missing> (raw)

[-- Attachment #1: Type: text/plain, Size: 1757 bytes --]

While I was adding pattern match to the LABEL method i hit a bug.
We modify a string returned from libsysfs, so with every iteration is is
truncated by one char:

Dec  4 02:27:16 pim udev[23307]: do_label: dev->bus='scsi' sysfs_device->bus='scsi'
Dec  4 02:27:16 pim udev[23307]: do_label: look for device attribute 'vendor'
Dec  4 02:27:16 pim udev[23307]: do_label: xxx 'IBM-ESXS '
Dec  4 02:27:16 pim udev[23307]: do_label: compare attribute 'vendor' value 'IBM-ESX' with '?IBM-ESXS'
Dec  4 02:27:16 pim udev[23307]: do_label: dev->bus='scsi' sysfs_device->bus='scsi'
Dec  4 02:27:16 pim udev[23307]: do_label: look for device attribute 'vendor'
Dec  4 02:27:16 pim udev[23307]: do_label: xxx 'IBM-ESX'
Dec  4 02:27:16 pim udev[23307]: do_label: compare attribute 'vendor' value 'IBM-ES' with 'IBM-ESXS?'
Dec  4 02:27:16 pim udev[23307]: do_label: dev->bus='scsi' sysfs_device->bus='scsi'
Dec  4 02:27:16 pim udev[23307]: do_label: look for device attribute 'vendor'
Dec  4 02:27:16 pim udev[23307]: do_label: xxx 'IBM-ES'
Dec  4 02:27:16 pim udev[23307]: do_label: compare attribute 'vendor' value 'IBM-E' with 'IBM-ES??'
Dec  4 02:27:16 pim udev[23307]: do_label: dev->bus='scsi' sysfs_device->bus='scsi'
Dec  4 02:27:16 pim udev[23307]: do_label: look for device attribute 'vendor'
Dec  4 02:27:16 pim udev[23307]: do_label: xxx 'IBM-E'
Dec  4 02:27:16 pim udev[23307]: do_label: compare attribute 'vendor' value 'IBM-' with 'IBM-ESXSS'

I changed the behavior to remove only the line feed.

thanks,
Kay




03-bug-in-linefeed-removal.diff
  remove only the line feed from string not every last char


04-patternmatch-for-label.diff
  switch LABEL search to pattern match
  add a test for pattern match in LABEL
  remove useless rule from udev.rules


[-- Attachment #2: 03-bug-in-linefeed-removal.diff --]
[-- Type: text/plain, Size: 1002 bytes --]

diff -Nru a/namedev.c b/namedev.c
--- a/namedev.c	Thu Dec  4 02:37:43 2003
+++ b/namedev.c	Thu Dec  4 02:37:43 2003
@@ -378,6 +378,7 @@
 	struct sysfs_attribute *tmpattr = NULL;
 	struct config_device *dev;
 	struct list_head *tmp;
+	char *c;
 
 	list_for_each(tmp, &config_device_list) {
 		dev = list_entry(tmp, struct config_device, node);
@@ -406,7 +407,9 @@
 		continue;
 
 label_found:
-		tmpattr->value[strlen(tmpattr->value)-1] = 0x00;
+		c = tmpattr->value + strlen(tmpattr->value)-1;
+		if (*c == '\n')
+			*c = 0x00;
 		dbg("compare attribute '%s' value '%s' with '%s'",
 			  dev->sysfs_file, tmpattr->value, dev->sysfs_value);
 		if (strcmp(dev->sysfs_value, tmpattr->value) != 0)
@@ -578,7 +581,7 @@
 			}
 		}
 	}
-		
+
 	if (sysfs_device) {
 		dbg("sysfs_device->path='%s'", sysfs_device->path);
 		dbg("sysfs_device->bus_id='%s'", sysfs_device->bus_id);
@@ -642,7 +645,7 @@
 int namedev_init(void)
 {
 	int retval;
-	
+
 	retval = namedev_init_rules();
 	if (retval)
 		return retval;

[-- Attachment #3: 04-patternmatc~or-label.diff --]
[-- Type: text/plain, Size: 1463 bytes --]

diff -Nru a/namedev.c b/namedev.c
--- a/namedev.c	Thu Dec  4 02:38:13 2003
+++ b/namedev.c	Thu Dec  4 02:38:13 2003
@@ -412,7 +412,7 @@
 			*c = 0x00;
 		dbg("compare attribute '%s' value '%s' with '%s'",
 			  dev->sysfs_file, tmpattr->value, dev->sysfs_value);
-		if (strcmp(dev->sysfs_value, tmpattr->value) != 0)
+		if (strcmp_pattern(dev->sysfs_value, tmpattr->value) != 0)
 			continue;
 
 		strfieldcpy(udev->name, dev->name);
diff -Nru a/test/udev-test.pl b/test/udev-test.pl
--- a/test/udev-test.pl	Thu Dec  4 02:38:13 2003
+++ b/test/udev-test.pl	Thu Dec  4 02:38:13 2003
@@ -52,6 +52,18 @@
 EOF
 	},
 	{
+		desc     => "label test of pattern match",
+		subsys   => "block",
+		devpath  => "block/sda/sda1",
+		expected => "boot_disk1" ,
+		conf     => <<EOF
+LABEL, BUS="scsi", vendor="?IBM-ESXS", NAME="boot_disk%n-1"
+LABEL, BUS="scsi", vendor="IBM-ESXS?", NAME="boot_disk%n-2"
+LABEL, BUS="scsi", vendor="IBM-ES??", NAME="boot_disk%n"
+LABEL, BUS="scsi", vendor="IBM-ESXSS", NAME="boot_disk%n-3"
+EOF
+	},
+	{
 		desc     => "catch device by *",
 		subsys   => "tty",
 		devpath  => "class/tty/ttyUSB0",
diff -Nru a/udev.rules b/udev.rules
--- a/udev.rules	Thu Dec  4 02:38:13 2003
+++ b/udev.rules	Thu Dec  4 02:38:13 2003
@@ -42,7 +42,6 @@
 REPLACE, KERNEL="ttyUSB0", NAME="pl2303"
 
 # a devfs like way to name some tty devices
-#REPLACE, KERNEL="tty", NAME="tty"
 #REPLACE, KERNEL="ttyS*", NAME="tts/%n"
 #REPLACE, KERNEL="tty*", NAME="vc/%n"
 

             reply	other threads:[~2003-12-04  1:58 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-12-04  1:58 Kay Sievers [this message]
  -- strict thread matches above, loose matches on Subject: below --
2003-12-04 19:24 [udev] a bug / pattern match for label method Greg KH

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=marc-linux-hotplug-107050332126234@msgid-missing \
    --to=kay.sievers@vrfy.org \
    --cc=linux-hotplug@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).