aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--utils/rpctrace.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/utils/rpctrace.c b/utils/rpctrace.c
index 1690ae1b..b4de175c 100644
--- a/utils/rpctrace.c
+++ b/utils/rpctrace.c
@@ -1620,8 +1620,9 @@ traced_spawn (char **argv, char **envp)
task_t traced_task;
struct sender_info *ti;
struct receiver_info *receive_ti;
+ char *prefixed_name;
file_t file = file_name_path_lookup (argv[0], getenv ("PATH"),
- O_EXEC, 0, 0);
+ O_EXEC, 0, &prefixed_name);
if (file == MACH_PORT_NULL)
error (1, errno, "command not found: %s", argv[0]);
@@ -1662,7 +1663,8 @@ traced_spawn (char **argv, char **envp)
the actual task, so the RPCs to map in the program itself do not get
traced. Could have an option to use TASK_WRAPPER here instead. */
#ifdef HAVE__HURD_EXEC_PATHS
- err = _hurd_exec_paths (traced_task, file, *argv, *argv, argv, envp);
+ err = _hurd_exec_paths (traced_task, file, prefixed_name ?: *argv,
+ prefixed_name ?: *argv, argv, envp);
#else
err = _hurd_exec (traced_task, file, argv, envp);
#endif
@@ -1673,6 +1675,7 @@ traced_spawn (char **argv, char **envp)
cannot die and hence our TRACED_TASK ref cannot have been released. */
mach_port_deallocate (mach_task_self (), task_wrapper);
+ free (prefixed_name);
return pid;
}