aboutsummaryrefslogtreecommitdiff
path: root/exec/exec.c
diff options
context:
space:
mode:
Diffstat (limited to 'exec/exec.c')
-rw-r--r--exec/exec.c51
1 files changed, 47 insertions, 4 deletions
diff --git a/exec/exec.c b/exec/exec.c
index 2d74ee1c..cc613527 100644
--- a/exec/exec.c
+++ b/exec/exec.c
@@ -1,6 +1,6 @@
/* GNU Hurd standard exec server.
- Copyright (C) 1992,93,94,95,96,98,99,2000,01,02,04
- Free Software Foundation, Inc.
+ Copyright (C) 1992 ,1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+ 2002, 2004, 2010 Free Software Foundation, Inc.
Written by Roland McGrath.
Can exec ELF format directly.
@@ -793,6 +793,8 @@ static error_t
do_exec (file_t file,
task_t oldtask,
int flags,
+ char *path,
+ char *abspath,
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,
@@ -852,7 +854,7 @@ do_exec (file_t file,
{
/* Check for a #! executable file. */
check_hashbang (&e,
- file, oldtask, flags,
+ file, oldtask, flags, path,
argv, argvlen, argv_copy,
envp, envplen, envp_copy,
dtable, dtablesize, dtable_copy,
@@ -1440,6 +1442,7 @@ do_exec (file_t file,
return e.error;
}
+/* Deprecated. */
kern_return_t
S_exec_exec (struct trivfs_protid *protid,
file_t file,
@@ -1456,13 +1459,53 @@ 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_paths (protid,
+ file,
+ oldtask,
+ flags,
+ "",
+ "",
+ 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_paths (struct trivfs_protid *protid,
+ file_t file,
+ task_t oldtask,
+ int flags,
+ char *path,
+ char *abspath,
+ 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;
/* There were no user-specified exec servers,
or none of them could be found. */
- return do_exec (file, oldtask, flags,
+ return do_exec (file, oldtask, flags, path, abspath,
argv, argvlen, argv_copy,
envp, envplen, envp_copy,
dtable, dtablesize, dtable_copy,