>From 4d42ddb105b4560a3bcefb875fb7961e526d9876 Mon Sep 17 00:00:00 2001 From: Emilio Pozuelo Monfort Date: Thu, 20 May 2010 23:53:08 +0200 Subject: [PATCH 3/4] Add a new exec_exec_file_name RPC It's similar to exec_exec but with an additional filename argument. This deprecates exec_exec. --- exec/exec.c | 39 +++++++++++++++++++++++++++++++++++++-- hurd/exec.defs | 16 +++++++++++++++- 2 files changed, 52 insertions(+), 3 deletions(-) diff --git a/exec/exec.c b/exec/exec.c index ea2bd5d..7b51ff6 100644 --- a/exec/exec.c +++ b/exec/exec.c @@ -2037,6 +2037,7 @@ do_exec (file_t file, return e.error; } +/* Deprecated. */ kern_return_t S_exec_exec (struct trivfs_protid *protid, file_t file, @@ -2053,6 +2054,40 @@ S_exec_exec (struct trivfs_protid *protid, mach_port_t *deallocnames, mach_msg_type_number_t ndeallocnames, mach_port_t *destroynames, mach_msg_type_number_t ndestroynames) { + return S_exec_exec_file_name (protid, + file, + oldtask, + flags, + NULL, 0, + argv, argvlen, argv_copy, + envp, envplen, envp_copy, + dtable, dtablesize, + dtable_copy, + portarray, nports, + portarray_copy, + intarray, nints, + intarray_copy, + deallocnames, ndeallocnames, + destroynames, ndestroynames); +} + +kern_return_t +S_exec_exec_file_name (struct trivfs_protid *protid, + file_t file, + task_t oldtask, + int flags, + char *filename, mach_msg_type_number_t filenamelen, + char *argv, mach_msg_type_number_t argvlen, boolean_t argv_copy, + char *envp, mach_msg_type_number_t envplen, boolean_t envp_copy, + mach_port_t *dtable, mach_msg_type_number_t dtablesize, + boolean_t dtable_copy, + mach_port_t *portarray, mach_msg_type_number_t nports, + boolean_t portarray_copy, + int *intarray, mach_msg_type_number_t nints, + boolean_t intarray_copy, + mach_port_t *deallocnames, mach_msg_type_number_t ndeallocnames, + mach_port_t *destroynames, mach_msg_type_number_t ndestroynames) +{ if (! protid) return EOPNOTSUPP; @@ -2093,7 +2128,7 @@ S_exec_exec (struct trivfs_protid *protid, trivfs_protid_portclasses[0]); if (protid) { - err = do_exec (file, oldtask, 0, NULL, + err = do_exec (file, oldtask, 0, filename, argv, argvlen, argv_copy, envp, envplen, envp_copy, dtable, dtablesize, dtable_copy, @@ -2140,7 +2175,7 @@ S_exec_exec (struct trivfs_protid *protid, /* There were no user-specified exec servers, or none of them could be found. */ - return do_exec (file, oldtask, flags, NULL, + return do_exec (file, oldtask, flags, filename, argv, argvlen, argv_copy, envp, envplen, envp_copy, dtable, dtablesize, dtable_copy, diff --git a/hurd/exec.defs b/hurd/exec.defs index 2888fb1..ad558a2 100644 --- a/hurd/exec.defs +++ b/hurd/exec.defs @@ -29,6 +29,7 @@ EXEC_IMPORTS INTR_INTERFACE +/* Deprecated. Use exec_exec_file_name instead. */ routine exec_exec ( execserver: file_t; file: mach_port_send_t; @@ -42,7 +43,20 @@ routine exec_exec ( deallocnames: mach_port_name_array_t; destroynames: mach_port_name_array_t); -skip; /* obsolete exec_startup */ +routine exec_exec_file_name ( + execserver: file_t; + file: mach_port_send_t; + oldtask: task_t; + flags: int; + filename: data_t; + argv: data_t SCP; + envp: data_t SCP; + dtable: portarray_t SCP; + portarray: portarray_t SCP; + intarray: intarray_t SCP; + deallocnames: mach_port_name_array_t; + destroynames: mach_port_name_array_t); + /* This call is made by the bootstrapping filesystem to give the execserver its auth handle. */ -- 1.7.1