From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kay Sievers Date: Thu, 04 Dec 2003 01:58:42 +0000 Subject: [udev] a bug / pattern match for label method MIME-Version: 1 Content-Type: multipart/mixed; boundary="PNTmBPCT7hxwcZjr" Message-Id: List-Id: To: linux-hotplug@vger.kernel.org --PNTmBPCT7hxwcZjr Content-Type: text/plain; charset=us-ascii Content-Disposition: inline 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 --PNTmBPCT7hxwcZjr Content-Type: text/plain; charset=us-ascii Content-Disposition: inline; filename="03-bug-in-linefeed-removal.diff" 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; --PNTmBPCT7hxwcZjr Content-Type: text/plain; charset=us-ascii Content-Disposition: inline; filename="04-patternmatc~or-label.diff" 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 => < "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" --PNTmBPCT7hxwcZjr-- ------------------------------------------------------- This SF.net email is sponsored by OSDN's Audience Survey. Help shape OSDN's sites and tell us what you think. Take this five minute survey and you could win a $250 Gift Certificate. http://www.wrgsurveys.com/2003/osdntech03.php?site=8 _______________________________________________ Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net Linux-hotplug-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel