diff options
-rw-r--r-- | namedev.c | 10 | ||||
-rw-r--r-- | test/udev-test.pl | 9 | ||||
-rw-r--r-- | udev.8 | 8 |
3 files changed, 22 insertions, 5 deletions
@@ -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); } } diff --git a/test/udev-test.pl b/test/udev-test.pl index a3bf768fe3..6b7f515442 100644 --- a/test/udev-test.pl +++ b/test/udev-test.pl @@ -194,6 +194,15 @@ BUS="scsi", PLACE="0:0:0:0", NAME="Major:%M:minor:%m:kernelnumber:%n:bus:%b" EOF }, { + desc => "test NAME substitution chars (with length limit)", + subsys => "block", + devpath => "block/sda/sda3", + expected => "M8-m3-n3-b0:0-sIBM" , + conf => <<EOF +BUS="scsi", PLACE="0:0:0:0", NAME="M%M-m%m-n%n-b%3b-s%3s{vendor}" +EOF + }, + { desc => "old style SYSFS_ attribute", subsys => "block", devpath => "block/sda", @@ -209,7 +209,7 @@ fields support simple printf-like string substitution: .TP .B %n The "kernel number" of the device. -for example, 'sda3' has a "kernel number" of '3' +For example, 'sda3' has a "kernel number" of '3'. .TP .B %k The "kernel name" for the device. @@ -239,7 +239,11 @@ my be selected by specifying the part number as a attribute: The content of a sysfs attribute. .TP .B %% -The '%' char itself. +The '%' character itself. +.P +The count of charcters to insert may be limited by specifying +the format length value. For example, '%3s{file}' will only insert +the first three characters of the sysfs attribute. .P .RI "A sample " udev.rules " might look like this:" .sp |