From 63ead27c228f9306f175b14a49df2415d09ece10 Mon Sep 17 00:00:00 2001 From: "kay.sievers@vrfy.org" Date: Sat, 28 Feb 2004 06:53:25 -0800 Subject: [PATCH] [PATCH] udev - activate formt length attribute We carried the the old callout part selector syntax for two releases now after it was replaced by the new %c{1} syntax. So here we remove the old syntax and use the code to possibly specify the maximum count of chars to insert into the string. It will work with all of our format chars. I don't know if somebody will use it, but the code is already there :) 's%3s{vendor}' returns "IBM" now, instead of "IBM-ESXS". Also added is a test for it and a few words in the man page. --- namedev.c | 10 +++++++--- test/udev-test.pl | 9 +++++++++ udev.8 | 8 ++++++-- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/namedev.c b/namedev.c index c9232fa2..50526455 100644 --- a/namedev.c +++ b/namedev.c @@ -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 a3bf768f..6b7f5154 100644 --- a/test/udev-test.pl +++ b/test/udev-test.pl @@ -191,6 +191,15 @@ EOF expected => "Major:8:minor:3:kernelnumber:3:bus:0:0:0:0" , conf => < "test NAME substitution chars (with length limit)", + subsys => "block", + devpath => "block/sda/sda3", + expected => "M8-m3-n3-b0:0-sIBM" , + conf => <