1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-02-12 21:57:27 +03:00

[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.
This commit is contained in:
kay.sievers@vrfy.org 2004-03-11 01:37:18 -08:00 committed by Greg KH
parent 35b38379ba
commit 558f80ba64
3 changed files with 19 additions and 3 deletions

View File

@ -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 {

View File

@ -304,6 +304,15 @@ EOF
expected => "link1" ,
conf => <<EOF
BUS="scsi", PROGRAM="/bin/echo -n node link1 link2", RESULT="node *", NAME="%c{1}", SYMLINK="%c{2} %c{3}"
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
},
{

5
udev.8
View File

@ -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.