Here is the correction for the dev.d/ scripts too. We should pass
the right argv[0] here too. A script may depend on the right value, as
udev does with udev/udevstart.
Here is the old version:
[pid 4692] execve("/etc/dev.d/default/log.dev", ["./udev", "block"], [/* 41 vars */]) = 0
this the new one:
[pid 9832] execve("/etc/dev.d/default/log.dev", ["/etc/dev.d/default/log.dev", "block"], [/* 41 vars */]) = 0
{
pid_t pid;
int fd;
+ char *argv[3];
dbg("running %s", name);
dup2(fd, STDERR_FILENO);
}
close(fd);
- execv(name, main_argv);
+
+ argv[0] = name;
+ argv[1] = main_argv[1];
+ argv[2] = NULL;
+
+ execv(name, argv);
dbg("exec of child failed");
exit(1);
case -1:
dbg("execute '%s' with subsystem '%s' argument", arg, argv[1]);
}
- /* set basename() only */
- pos = strrchr(argv[0], '/');
- if (pos != NULL)
- argv[0] = &pos[1];
-
retval = pipe(fds);
if (retval != 0) {
dbg("pipe failed");