+ do_kernelname(class_dev, udev);
+ goto done;
+
+found:
+ /* substitute placeholder in NAME */
+ while (1) {
+ char *pos = strchr(udev->name, '%');
+ char *dig;
+ char name[NAME_SIZE];
+ if (pos) {
+ strfieldcpy(name, pos+2);
+ *pos = 0x00;
+ switch (pos[1]) {
+ case 'b':
+ if (!sysfs_device)
+ break;
+ strcat(udev->name, sysfs_device->bus_id);
+ dbg("bus_id inserted: %s",
+ sysfs_device->bus_id);
+ break;
+ case 'n':
+ dig = class_dev->name + strlen(class_dev->name);
+ while (isdigit(*(dig-1)))
+ dig--;
+ strcat(udev->name, dig);
+ dbg("substitute kernel number '%s'", dig);
+ break;
+ case 'm':
+ sprintf(pos, "%u", udev->minor);
+ dbg("substitute minor number '%u'", udev->minor);
+ break;
+ case 'M':
+ sprintf(pos, "%u", udev->major);
+ dbg("substitute major number '%u'", udev->major);
+ break;
+ default:
+ dbg("unknown substitution type '%%%c'", pos[1]);
+ break;
+ }
+ strcat(udev->name, name);
+ } else
+ break;
+ }