continue;
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);
if (dev->type != TOPOLOGY)
continue;
- found = 0;
+ found = 0;
strcpy(path, sysfs_device->path);
temp = strrchr(path, '/');
dbg_parse("TOPOLOGY path = '%s'", path);
strcpy(udev->name, class_dev->name);
done:
+ /* substitute placeholder in NAME */
+ while (1) {
+ char *pos = strchr(udev->name, '%');
+ char *dig;
+ char name[NAME_SIZE];
+ if (pos) {
+ strcpy(name, pos+2);
+ *pos = 0x00;
+ switch (pos[1]) {
+ case 'b':
+ if (!sysfs_device)
+ break;
+ strcat(udev->name, sysfs_device->bus_id);
+ dbg("bus_id appended: %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("kernel number appended: %s", dig);
+ break;
+ case 'm':
+ sprintf(pos, "%u", udev->minor);
+ dbg("minor number appended: %u", udev->minor);
+ break;
+ case 'M':
+ sprintf(pos, "%u", udev->major);
+ dbg("major number appended: %u", udev->major);
+ break;
+ default:
+ dbg("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);