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:
parent
35b38379ba
commit
558f80ba64
@ -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 {
|
||||
|
@ -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
5
udev.8
@ -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.
|
||||
|
Loading…
x
Reference in New Issue
Block a user