From: Kay Sievers <kay.sievers@vrfy.org>
To: linux-hotplug@vger.kernel.org
Subject: [PATCH] udev - introduce format escape char
Date: Tue, 13 Jan 2004 02:19:32 +0000 [thread overview]
Message-ID: <20040113021932.GA9850@vrfy.org> (raw)
[-- Attachment #1: Type: text/plain, Size: 224 bytes --]
This patch adds a '%' to the format char list, so that a external
program may called with a non expanded '%' like:
PROGRAM="/bin/date +%%s"
Olaf Hering asked for the feature.
A tricky test is also added :)
thanks,
Kay
[-- Attachment #2: 05-escape-format-char.diff --]
[-- Type: text/plain, Size: 1973 bytes --]
diff -Nru a/namedev.c b/namedev.c
--- a/namedev.c Tue Jan 13 03:13:14 2004
+++ b/namedev.c Tue Jan 13 03:13:14 2004
@@ -151,20 +151,21 @@
static void apply_format(struct udevice *udev, unsigned char *string)
{
- char name[NAME_SIZE];
char temp[NAME_SIZE];
+ char temp1[NAME_SIZE];
char *tail;
char *pos;
char *pos2;
char *pos3;
int num;
+ pos = string;
while (1) {
num = 0;
- pos = strchr(string, '%');
+ pos = strchr(pos, '%');
if (pos) {
- *pos = '\0';
+ pos[0] = '\0';
tail = pos+1;
if (isdigit(tail[0])) {
num = (int) strtoul(&pos[1], &tail, 10);
@@ -173,7 +174,7 @@
break;
}
}
- strfieldcpy(name, tail+1);
+ strfieldcpy(temp, tail+1);
switch (tail[0]) {
case 'b':
@@ -217,8 +218,8 @@
break;
if (num) {
/* get part of return string */
- strncpy(temp, udev->program_result, sizeof(temp));
- pos2 = temp;
+ strncpy(temp1, udev->program_result, sizeof(temp1));
+ pos2 = temp1;
while (num) {
num--;
pos3 = strsep(&pos2, " ");
@@ -236,11 +237,15 @@
dbg("substitute result string '%s'", udev->program_result);
}
break;
+ case '%':
+ strcat(pos, "%");
+ pos++;
+ break;
default:
dbg("unknown substitution type '%%%c'", pos[1]);
break;
}
- strcat(string, name);
+ strcat(string, temp);
} else
break;
}
diff -Nru a/test/udev-test.pl b/test/udev-test.pl
--- a/test/udev-test.pl Tue Jan 13 03:13:14 2004
+++ b/test/udev-test.pl Tue Jan 13 03:13:14 2004
@@ -206,6 +206,15 @@
EOF
},
{
+ desc => "program with escaped format char (tricky: callout returns format char!)",
+ subsys => "block",
+ devpath => "block/sda/sda3",
+ expected => "escape-3" ,
+ conf => <<EOF
+BUS="scsi", PROGRAM="/bin/echo -n escape-%%n", KERNEL="sda3", NAME="%c"
+EOF
+ },
+ {
desc => "program result substitution (numbered part of)",
subsys => "block",
devpath => "block/sda/sda3",
next reply other threads:[~2004-01-13 2:19 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-01-13 2:19 Kay Sievers [this message]
2004-01-13 18:42 ` [PATCH] udev - introduce format escape char Greg KH
2004-01-13 19:25 ` Kay Sievers
2004-01-13 19:32 ` Greg KH
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20040113021932.GA9850@vrfy.org \
--to=kay.sievers@vrfy.org \
--cc=linux-hotplug@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).