--- ../udev/namedev.c 2003-11-12 13:56:20.000000000 +0100 +++ namedev.c 2003-11-12 14:00:56.000000000 +0100 @@ -540,6 +540,7 @@ static int get_attr(struct sysfs_class_device *class_dev, struct udevice *udev) { struct list_head *tmp; + char *pos; int retval = 0; int found; @@ -623,10 +624,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); @@ -671,8 +668,8 @@ strcpy(udev->group, dev->group); } dbg_parse("device id '%s' becomes '%s' - owner = %s, group = %s, mode = %#o", - dev->id, udev->name, - dev->owner, dev->group, dev->mode); + dev->id, udev->name, + dev->owner, dev->group, dev->mode); goto done; break; } @@ -683,7 +680,7 @@ if (!class_dev->sysdevice) continue; - found = 0; + found = 0; strcpy(path, class_dev->sysdevice->path); temp = strrchr(path, '/'); dbg_parse("TOPOLOGY path = '%s'", path); @@ -756,6 +753,17 @@ strcpy(udev->name, class_dev->name); done: + /* substitute placeholder in NAME= with trailing digits from device */ + pos = udev->name + strlen(udev->name)-1; + if (*pos == '%') { + *pos = 0x00; + pos = class_dev->name + strlen(class_dev->name); + while (isdigit(*(pos-1))) + pos--; + strcat(udev->name, pos); + dbg_parse("placeholder in NAME substituted by: '%s'", pos); + } + /* mode was never set above */ if (!udev->mode) { udev->mode = get_default_mode(class_dev);