udev - introduce format escape char
PATCH 1/1 udev - introduce format escape char
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
namedev.c +12 -7
@@ -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 ; }
test/udev-test.pl +9 -0
@@ -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",
Quoted 7 lines · Kay Sievers
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 :)
Hm, does this mean that we can't pass a "%n" to a program as it is something we intrepret (your test seems to verify this)?
Is that ok?
Anyway, I've applied this.
thanks,
greg k-h
-------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
Quoted 11 lines · Greg KH
Quoted 7 lines · Kay Sievers
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 :)Hm, does this mean that we can't pass a "%n" to a program as it is something we intrepret (your test seems to verify this)?
No, it wasn't possible before. That's why we have the escape now. If you want to pass any '%' down to a program, you need to ecape it by '%%', otherwise we try to expand it with our own format char list.
I will put in the man page, later today.
In my stupid test, the program returns a '%n' and this is expanded inside the '%c' to the kernel number. I found it funny... :)
thanks,
Kay
-------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
Quoted 13 lines · Kay Sievers
Quoted 11 lines · Greg KH
Quoted 7 lines · Kay Sievers
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 :)Hm, does this mean that we can't pass a "%n" to a program as it is something we intrepret (your test seems to verify this)?
Quoted 8 lines
No, it wasn't possible before. That's why we have the escape now. If you want to pass any '%' down to a program, you need to ecape it by '%%', otherwise we try to expand it with our own format char list.
I will put in the man page, later today.
In my stupid test, the program returns a '%n' and this is expanded inside the '%c' to the kernel number. I found it funny... :)
Ah, that makes more sense now, thanks.
I need to wake up today...
greg k-h
-------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel