}
break;
case 's':
- if (attr != NULL) {
- tmpattr = find_sysfs_attribute(class_dev, sysfs_device, attr);
- if (tmpattr == NULL) {
- dbg("sysfa attribute '%s' not found", attr);
- break;
- }
- /* strip trailing whitespace of matching value */
- if (isspace(tmpattr->value[strlen(tmpattr->value)-1])) {
- i = len = strlen(tmpattr->value);
- while (i > 0 && isspace(tmpattr->value[i-1]))
- i--;
- if (i < len) {
- tmpattr->value[i] = '\0';
- dbg("remove %i trailing whitespace chars from '%s'",
- len - i, tmpattr->value);
- }
- }
- strfieldcatmax(string, tmpattr->value, maxsize);
- dbg("substitute sysfs value '%s'", tmpattr->value);
- } else {
+ if (!class_dev)
+ break;
+ if (attr == NULL) {
dbg("missing attribute");
+ break;
+ }
+ tmpattr = find_sysfs_attribute(class_dev, sysfs_device, attr);
+ if (tmpattr == NULL) {
+ dbg("sysfa attribute '%s' not found", attr);
+ break;
+ }
+ /* strip trailing whitespace of matching value */
+ if (isspace(tmpattr->value[strlen(tmpattr->value)-1])) {
+ i = len = strlen(tmpattr->value);
+ while (i > 0 && isspace(tmpattr->value[i-1]))
+ i--;
+ if (i < len) {
+ tmpattr->value[i] = '\0';
+ dbg("remove %i trailing whitespace chars from '%s'",
+ len - i, tmpattr->value);
+ }
}
+ strfieldcatmax(string, tmpattr->value, maxsize);
+ dbg("substitute sysfs value '%s'", tmpattr->value);
break;
case '%':
strfieldcatmax(string, "%", maxsize);
}
break;
case 'P':
+ if (!class_dev)
+ break;
class_dev_parent = sysfs_get_classdev_parent(class_dev);
if (class_dev_parent != NULL) {
struct udevice udev_parent;
dbg("found parent '%s', get the node name", class_dev_parent->path);
memset(&udev_parent, 0x00, sizeof(struct udevice));
/* lookup the name in the udev_db with the DEVPATH of the parent */
- strfieldcpy(udev_parent.devpath, &class_dev_parent->path[strlen(sysfs_path)]);
- if (udev_db_get_device(&udev_parent) == 0) {
+ if (udev_db_get_device_by_devpath(&udev_parent, &class_dev_parent->path[strlen(sysfs_path)]) == 0) {
strfieldcatmax(string, udev_parent.name, maxsize);
dbg("substitute parent node name'%s'", udev_parent.name);
} else
static int match_id(struct config_device *dev, struct sysfs_class_device *class_dev, struct sysfs_device *sysfs_device)
{
char path[SYSFS_PATH_MAX];
- char *temp = NULL;
+ char *temp;
/* we have to have a sysfs device for ID to work */
if (!sysfs_device)
static int match_place(struct config_device *dev, struct sysfs_class_device *class_dev, struct sysfs_device *sysfs_device)
{
char path[SYSFS_PATH_MAX];
- int found;
- char *temp = NULL;
+ char *temp;
/* we have to have a sysfs device for PLACE to work */
if (!sysfs_device)
return -ENODEV;
- found = 0;
strfieldcpy(path, sysfs_device->path);
temp = strrchr(path, '/');
dbg("search '%s' in '%s', path='%s'", dev->place, temp, path);
- if (strstr(temp, dev->place) != NULL) {
- found = 1;
- } else {
- *temp = 0x00;
- temp = strrchr(path, '/');
- dbg("search '%s' in '%s', path='%s'", dev->place, temp, path);
- if (strstr(temp, dev->place) != NULL)
- found = 1;
- }
- if (!found) {
- dbg("place doesn't match");
- return -ENODEV;
- }
+ if (strstr(temp, dev->place) != NULL)
+ return 0;
- return 0;
+ /* try the parent */
+ temp[0] = '\0';
+ temp = strrchr(path, '/');
+ dbg("search '%s' in '%s', path='%s'", dev->place, temp, path);
+ if (strstr(temp, dev->place) == NULL)
+ return 0;
+
+ dbg("place doesn't match");
+ return -ENODEV;
}
static int match_rule(struct udevice *udev, struct config_device *dev,