From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kay Sievers Date: Sat, 15 Nov 2003 16:09:14 +0000 Subject: Re: [udev] updated man, subdirs, ownership, namedev enum patches MIME-Version: 1 Content-Type: multipart/mixed; boundary="dDRMvlgZJXvWKvBx" Message-Id: List-Id: References: In-Reply-To: To: linux-hotplug@vger.kernel.org --dDRMvlgZJXvWKvBx Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Thu, Nov 13, 2003 at 11:49:03AM -0800, Greg KH wrote: > On Thu, Nov 13, 2003 at 09:30:08AM +0100, Kay Sievers wrote: > > Yes, it doesn't append the number when a label is specified for a > > partition. But what when i want my partition labeled "data" not "data1" > > LABEL, BUS="ide", size="117210177", NAME="data" > > Problem is, if you use the LABEL rule to match a device, like a SCSI > vendor, then all of the partitions, as well as the main block device, > will end up with the same name. That's why I added the "add the number" > hack to the LABEL rule. > > So yes, your patch is correct in that we shouldn't always be adding the > number to any match for LABEL (like for char devices), but if we do > that, then we break partitions. Your '%' patch fixes this, but I'd just > like to extend it a bit. Let me see what I can come up with... Oh, I see. Do you mean something like this: LABEL, BUS="usb", model="Creative Labs WebCam 3", NAME="webcam%n-%M:%m-test" results in: "webcam0-81:0-test" Nov 15 16:51:53 pim udev[16193]: get_class_dev: looking at /sys/class/video4linux/video0 Nov 15 16:51:53 pim udev[16193]: get_class_dev: class_dev->name = video0 Nov 15 16:51:53 pim udev[16193]: get_major_minor: dev = 81:0 Nov 15 16:51:53 pim udev[16193]: get_major_minor: found major = 81, minor = 0 Nov 15 16:51:53 pim udev[16193]: udev_add_device: name = webcam0-81:0-test Nov 15 16:51:53 pim udev[16193]: create_node: mknod(/udev/webcam0-81:0-test, 020666, 81, 0) thanks, Kay 04-udev-add.c-minor_before_namedev.diff move get_major_minor() before namedev_name_device(), so namedev knows major/minor of device 04-namedev.c-multiple-placeholder-support.diff implement printf-like placeholder support for NAME %n-kernel number, %M-major number, %m-minor number --dDRMvlgZJXvWKvBx Content-Type: text/plain; charset=us-ascii Content-Disposition: inline; filename="04-udev-add.c-minor_before_namedev.diff" --- /usr/src/udev/udev-add.c 2003-10-30 08:37:11.000000000 +0100 +++ udev-add.c 2003-10-30 15:21:02.000000000 +0100 @@ -183,16 +183,16 @@ if (class_dev == NULL) goto exit; - retval = namedev_name_device(class_dev, &dev); - if (retval) - return retval; - retval = get_major_minor(class_dev, &dev.major, &dev.minor); if (retval) { dbg("get_major_minor failed"); goto exit; } + retval = namedev_name_device(class_dev, &dev); + if (retval) + return retval; + // strcpy(dev.name, attr.name); // strcpy(dev.owner, attr.owner); // strcpy(dev.group, attr.group); --dDRMvlgZJXvWKvBx Content-Type: text/plain; charset=us-ascii Content-Disposition: inline; filename="04-namedev.c-multiple-placeholder-support.diff" --- ../udev/namedev.c 2003-11-12 13:56:20.000000000 +0100 +++ namedev.c 2003-11-15 17:06:07.000000000 +0100 @@ -540,6 +540,9 @@ static int get_attr(struct sysfs_class_device *class_dev, struct udevice *udev) { struct list_head *tmp; + char *pos; + char *dig; + char name[NAME_SIZE]; int retval = 0; int found; @@ -623,10 +626,6 @@ } strcpy(udev->name, dev->name); - if (isdigit(class_dev->path[strlen(class_dev->path)-1])) { - temp = &class_dev->path[strlen(class_dev->path)-1]; - strcat(udev->name, temp); - } if (dev->mode != 0) { udev->mode = dev->mode; strcpy(udev->owner, dev->owner); @@ -756,6 +755,37 @@ strcpy(udev->name, class_dev->name); done: + /* substitute placeholder in NAME */ + while (1) { + pos = strchr(udev->name, '%'); + if (pos) { + strcpy(name, pos+2); + *pos = 0x00; + switch (pos[1]) { + case 'n': + dig = class_dev->name + strlen(class_dev->name); + while (isdigit(*(dig-1))) + dig--; + strcat(udev->name, dig); + dbg_parse("kernel number appended: %s", dig); + break; + case 'm': + sprintf(pos, "%u", udev->minor); + dbg_parse("minor number appended: %u", udev->minor); + break; + case 'M': + sprintf(pos, "%u", udev->major); + dbg_parse("major number appended: %u", udev->major); + break; + default: + dbg_parse("unknown substitution type: %%%c", pos[1]); + break; + } + strcat(udev->name, name); + } else + break; + } + /* mode was never set above */ if (!udev->mode) { udev->mode = get_default_mode(class_dev); --dDRMvlgZJXvWKvBx-- ------------------------------------------------------- This SF. Net email is sponsored by: GoToMyPC GoToMyPC is the fast, easy and secure way to access your computer from any Web browser or wireless device. Click here to Try it Free! https://www.gotomypc.com/tr/OSDN/AW/Q4_2003/t/g22lp?Target=mm/g22lp.tmpl _______________________________________________ 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