X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=namedev.c;h=ed8d6c1808bf3c747e4b0a14be5a49f99839a2cc;hb=dba8c18b8b7b5f4c6d79593df8179c02a78d020f;hp=c9232fa2aa66705edf3f0e86737e88716f1f6f12;hpb=97ed02eebe5c0676848d0707d13f4a21b6f4232f;p=elogind.git diff --git a/namedev.c b/namedev.c index c9232fa2a..ed8d6c180 100644 --- a/namedev.c +++ b/namedev.c @@ -198,7 +198,7 @@ static int get_format_len(char **str) if (isdigit(*str[0])) { num = (int) strtoul(*str, &tail, 10); - if (tail != NULL) { + if (num > 0) { *str = tail; dbg("format length=%i", num); return num; @@ -220,7 +220,7 @@ static void apply_format(struct udevice *udev, char *string, size_t maxsize, char *pos2; char *pos3; char *attr; - int num; + int len; int i; char c; struct sysfs_attribute *tmpattr; @@ -232,7 +232,7 @@ static void apply_format(struct udevice *udev, char *string, size_t maxsize, if (pos != NULL) { pos[0] = '\0'; tail = pos+1; - num = get_format_len(&tail); + len = get_format_len(&tail); c = tail[0]; strfieldcpy(temp, tail+1); tail = temp; @@ -274,7 +274,7 @@ static void apply_format(struct udevice *udev, char *string, size_t maxsize, if (strlen(udev->program_result) == 0) break; /* get part part of the result string */ - i = num; /* num syntax is deprecated and will be removed */ + i = 0; if (attr != NULL) i = atoi(attr); if (i > 0) { @@ -317,6 +317,10 @@ static void apply_format(struct udevice *udev, char *string, size_t maxsize, dbg("unknown substitution type '%%%c'", c); break; } + /* truncate to specified length */ + if (len > 0) + pos[len] = '\0'; + strnfieldcat(string, tail, maxsize); } } @@ -818,7 +822,7 @@ int namedev_name_device(struct sysfs_class_device *class_dev, struct udevice *ud if (match_rule(dev, class_dev, udev, sysfs_device) == 0) { if (dev->name[0] == '\0' && dev->symlink[0] == '\0') { info("configured rule in '%s' at line %i applied, '%s' is ignored", - udev_rules_filename, dev->config_line, udev->kernel_name); + dev->config_file, dev->config_line, udev->kernel_name); return -1; } @@ -826,7 +830,7 @@ int namedev_name_device(struct sysfs_class_device *class_dev, struct udevice *ud char temp[NAME_MAX]; info("configured rule in '%s' at line %i applied, added symlink '%s'", - udev_rules_filename, dev->config_line, dev->symlink); + dev->config_file, dev->config_line, dev->symlink); /* do not clobber dev */ strfieldcpy(temp, dev->symlink); apply_format(udev, temp, sizeof(temp), @@ -837,7 +841,7 @@ int namedev_name_device(struct sysfs_class_device *class_dev, struct udevice *ud if (dev->name[0] != '\0') { info("configured rule in '%s' at line %i applied, '%s' becomes '%s'", - udev_rules_filename, dev->config_line, udev->kernel_name, dev->name); + dev->config_file, dev->config_line, udev->kernel_name, dev->name); strfieldcpy(udev->name, dev->name); goto found; }