summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkay.sievers@vrfy.org <kay.sievers@vrfy.org>2004-09-14 06:50:28 -0700
committerGreg KH <gregkh@suse.de>2005-04-26 21:37:00 -0700
commit29a3cead404d2043a7a3f98d1fb9c7139222b0df (patch)
tree8d051fb1f5879fdb4781a67a73866dae34314109
parent10014f7c9d67b38d10a8a12d1aa79491f5a852bd (diff)
[PATCH] fix udevstart badly broken in udev 031
On Mon, 2004-09-13 at 01:56 +0200, Marco d'Itri wrote: > Starting from udev 031, the %-arguments passed to PROGRAMs are not > correct when the new udevstart code is being used. > > KERNEL="event[0-9]*", NAME="input/%k", PROGRAM="/etc/udev/inputdev.sh %k %n %M %m", RESULT="inputdev", MODE="0664", GROUP="video" > > generates this log (just echo $*): > > event0 0 13 64 > event0 0 13 64 > event0 0 13 64 > > while the correct log (generated using the old shell script instead of > udevstart) would be: > > event0 0 13 64 > event1 1 13 65 > event2 2 13 66 Yes, I can simulate this, please try the attached patch. I expect, that it fixes it, cause we better not mangle the parsed config while matching the rules.
-rw-r--r--namedev.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/namedev.c b/namedev.c
index 466016c297..e86f88f433 100644
--- a/namedev.c
+++ b/namedev.c
@@ -813,10 +813,12 @@ static int match_rule(struct config_device *dev, struct sysfs_class_device *clas
/* execute external program */
if (dev->program[0] != '\0') {
+ char program[PROGRAM_SIZE];
+
dbg("check " FIELD_PROGRAM);
- apply_format(udev, dev->program, sizeof(dev->program),
- class_dev, sysfs_device);
- if (execute_program(dev->program, udev->program_result, NAME_SIZE) != 0) {
+ strfieldcpy(program, dev->program);
+ apply_format(udev, program, sizeof(program), class_dev, sysfs_device);
+ if (execute_program(program, udev->program_result, NAME_SIZE) != 0) {
dbg(FIELD_PROGRAM " returned nonzero");
goto try_parent;
} else {