From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kay Sievers Date: Tue, 13 Jan 2004 02:19:32 +0000 Subject: [PATCH] udev - introduce format escape char Message-Id: <20040113021932.GA9850@vrfy.org> MIME-Version: 1 Content-Type: multipart/mixed; boundary="J/dobhs11T7y2rNN" List-Id: To: linux-hotplug@vger.kernel.org --J/dobhs11T7y2rNN Content-Type: text/plain; charset=us-ascii Content-Disposition: inline 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 --J/dobhs11T7y2rNN Content-Type: text/plain; charset=us-ascii Content-Disposition: inline; filename="05-escape-format-char.diff" 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 => < "program result substitution (numbered part of)", subsys => "block", devpath => "block/sda/sda3", --J/dobhs11T7y2rNN-- ------------------------------------------------------- This SF.net email is sponsored by: Perforce Software. Perforce is the Fast Software Configuration Management System offering advanced branching capabilities and atomic changes on 50+ platforms. Free Eval! http://www.perforce.com/perforce/loadprog.html _______________________________________________ Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net Linux-hotplug-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel