diff options
author | kay.sievers@vrfy.org <kay.sievers@vrfy.org> | 2004-03-11 01:37:18 -0800 |
---|---|---|
committer | Greg KH <gregkh@suse.de> | 2005-04-26 21:35:09 -0700 |
commit | 558f80ba649fb5b8c2ac2a51e464f1aa07aa791d (patch) | |
tree | dd145627182985dea2f9dfa6f3a3bcfab53a708d | |
parent | 35b38379bac87ebf4d0cc6884feff588ee859d5f (diff) |
[PATCH] callout part selector tweak
Martin Schwenke <martin@meltin.net> asked for this feature and posted a
patch:
The following patch almost let's me have the following configuration:
PROGRAM="/sbin/aliaser %b %k %n %M %m", RESULT="?*", NAME="%c{1}", SYMLINK="%c{2+}"
allowing me to specify an arbitrary number of symlinks by saying
"giveme the second and later words"."
Here is the actual version with tests and a few words in the man page.
-rw-r--r-- | namedev.c | 8 | ||||
-rw-r--r-- | test/udev-test.pl | 9 | ||||
-rw-r--r-- | udev.8 | 5 |
3 files changed, 19 insertions, 3 deletions
@@ -190,6 +190,7 @@ static void apply_format(struct udevice *udev, char *string, size_t maxsize, int i; char c; char *spos; + char *rest; int slen; struct sysfs_attribute *tmpattr; @@ -244,7 +245,7 @@ static void apply_format(struct udevice *udev, char *string, size_t maxsize, /* get part part of the result string */ i = 0; if (attr != NULL) - i = atoi(attr); + i = strtoul(attr, &rest, 10); if (i > 0) { foreach_strpart(udev->program_result, " \n\r", spos, slen) { i--; @@ -255,7 +256,10 @@ static void apply_format(struct udevice *udev, char *string, size_t maxsize, dbg("requested part of result string not found"); break; } - strfieldcpymax(temp2, spos, slen+1); + if (rest[0] == '+') + strfieldcpy(temp2, spos); + else + strfieldcpymax(temp2, spos, slen+1); strfieldcatmax(string, temp2, maxsize); dbg("substitute part of result string '%s'", temp2); } else { diff --git a/test/udev-test.pl b/test/udev-test.pl index dadec568ba..7db92691d3 100644 --- a/test/udev-test.pl +++ b/test/udev-test.pl @@ -307,6 +307,15 @@ BUS="scsi", PROGRAM="/bin/echo -n node link1 link2", RESULT="node *", NAME="%c{1 EOF }, { + desc => "program result substitution (numbered part of+)", + subsys => "block", + devpath => "block/sda/sda3", + expected => "link3" , + conf => <<EOF +BUS="scsi", PROGRAM="/bin/echo -n node link1 link2 link3 link4", RESULT="node *", NAME="%c{1}", SYMLINK="%c{2+}" +EOF + }, + { desc => "invalid program for device with no bus", subsys => "tty", devpath => "class/tty/console", @@ -253,7 +253,10 @@ field for the obvious reason.) .br A single part of the string, separated by a space character may be selected by specifying the part number as a attribute: -.BI %c{ part } +.BI %c{ N } +If the number is followed by the + char this part plus +all remaining parts of the result string are substituted: +.BI %c{ N+ } .TP .BI %s{ filename } The content of a sysfs attribute. |