*** namedev.c.org Tue Nov 25 17:48:47 2003 --- namedev.c Tue Nov 25 17:45:27 2003 *************** *** 298,310 **** break; strfieldcpy(dev.id, temp3); ! /* NAME="new_name" */ temp2 = strsep(&temp, ","); ! retval = get_value("NAME", &temp, &temp3); if (retval) break; ! strfieldcpy(dev.name, temp3); dbg_parse("NUMBER name='%s', bus='%s', id='%s'", dev.name, dev.bus, dev.id); } --- 298,320 ---- break; strfieldcpy(dev.id, temp3); ! /* file="value" OR NAME="new_name" */ temp2 = strsep(&temp, ","); ! retval = get_pair(&temp, &temp2, &temp3); if (retval) break; ! if(strcmp("NAME", temp2) != 0) { ! /* file="value" */ ! strfieldcpy(dev.sysfs_file, temp2); ! strfieldcpy(dev.sysfs_value, temp3); ! /* NAME="new_name" */ ! temp2 = strsep(&temp, ","); ! retval = get_value("NAME", &temp, &temp3); + dbg_parse("sysfs_file='%s' sysfs_value='%s'", + dev.sysfs_file, dev.sysfs_value); + } + strfieldcpy(dev.name, temp3); dbg_parse("NUMBER name='%s', bus='%s', id='%s'", dev.name, dev.bus, dev.id); } *************** *** 520,525 **** --- 530,536 ---- case 'n': if (strlen(udev->kernel_number) == 0) break; + strcat(pos, "s"); strcat(pos, udev->kernel_number); dbg("substitute kernel number '%s'", udev->kernel_number); break; *************** *** 724,729 **** --- 735,741 ---- char path[SYSFS_PATH_MAX]; int found; char *temp = NULL; + struct sysfs_attribute *tmpattr = NULL; /* we have to have a sysfs device for NUMBER to work */ if (!sysfs_device) *************** *** 749,754 **** --- 761,797 ---- } if (!found) continue; + + dbg_parse(" device_type = %s\n", dev->sysfs_file); + if (strcmp(dev->sysfs_file, "device_type") == 0) { + dbg_parse("look for device_type attribute '%s'", + dev->sysfs_file); + /* try to find the attribute in the class device directory */ + tmpattr = sysfs_get_classdev_attr(class_dev, dev->sysfs_file); + if (tmpattr) + goto number_found; + + /* look in the class device directory if present */ + if (sysfs_device) { + tmpattr = sysfs_get_device_attr(sysfs_device, dev->sysfs_file); + if (tmpattr) + goto number_found; + } + + continue; + number_found: + tmpattr->value[strlen(tmpattr->value)-1] = '\0'; + dbg_parse("compare attribute '%s' value '%s' with '%s'", + dev->sysfs_file, tmpattr->value, + dev->sysfs_value); + if (strncmp(dev->sysfs_value, tmpattr->value, strlen(dev->sysfs_value)) != 0) + continue; + + dbg_parse("found matching attribute '%s', '%s' becomes" + " '%s' - owner='%s', group='%s', mode=%#o", + dev->sysfs_file, class_dev->name, udev->name, + dev->owner, dev->group, dev->mode); + } strfieldcpy(udev->name, dev->name); if (dev->mode != 0) { udev->mode = dev->mode;