diff options
author | Emilio Pozuelo Monfort <pochu27@gmail.com> | 2010-05-26 00:15:37 +0200 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2018-01-08 22:40:18 +0100 |
commit | 67fa50fb8f0a6894e5ed6534936afb8044e66613 (patch) | |
tree | 1097db000b7c9520a67a0f07b481cc487585a895 /exec/hashexec.c | |
parent | 6868c17b7def25beb69e7b685496e078340d8b12 (diff) | |
download | hurd-67fa50fb8f0a6894e5ed6534936afb8044e66613.tar.gz hurd-67fa50fb8f0a6894e5ed6534936afb8044e66613.tar.bz2 hurd-67fa50fb8f0a6894e5ed6534936afb8044e66613.zip |
Add a new exec_exec_paths RPC
* hurd/exec.defs (exec_exec): Label as deprecated.
(exec_exec_paths): New RPC.
* doc/hurd.texi: Update accordingly.
* exec/hashexec.c (check_hashbang): Add file_name_exec argument.
Don't guess the file name if file_name_exec is set.
* exec/priv.h (check_hashbang): Add path argument.
* exec/exec.c (S_exec_exec): Label as deprecated.
(S_exec_exec_paths): New function.
(do_exec): Add path and abspath arguments, pass path to check_hashbang.
Diffstat (limited to 'exec/hashexec.c')
-rw-r--r-- | exec/hashexec.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/exec/hashexec.c b/exec/hashexec.c index 68b48816..e8e94844 100644 --- a/exec/hashexec.c +++ b/exec/hashexec.c @@ -1,5 +1,6 @@ /* GNU Hurd standard exec server, #! script execution support. - Copyright (C) 1995,96,97,98,99,2000,02 Free Software Foundation, Inc. + Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2010 + Free Software Foundation, Inc. Written by Roland McGrath. This file is part of the GNU Hurd. @@ -35,6 +36,7 @@ check_hashbang (struct execdata *e, file_t file, task_t oldtask, int flags, + char *file_name_exec, char *argv, u_int argvlen, boolean_t argv_copy, char *envp, u_int envplen, boolean_t envp_copy, mach_port_t *dtable, u_int dtablesize, boolean_t dtable_copy, @@ -227,10 +229,12 @@ check_hashbang (struct execdata *e, file_name = NULL; else if (! (flags & EXEC_SECURE)) { - /* Try to figure out the file's name. We guess that if ARGV[0] - contains a slash, it might be the name of the file; and that - if it contains no slash, looking for files named by ARGV[0] in - the `PATH' environment variable might find it. */ + /* Try to figure out the file's name. If FILE_NAME_EXEC + is not NULL, then it's the file's name. Otherwise we + guess that if ARGV[0] contains a slash, it might be + the name of the file; and that if it contains no slash, + looking for files named by ARGV[0] in the `PATH' + environment variable might find it. */ error_t error; char *name; @@ -280,7 +284,9 @@ check_hashbang (struct execdata *e, else name = argv; - if (strchr (name, '/') != NULL) + if (file_name_exec && file_name_exec[0] != '\0') + error = lookup (name = file_name_exec, 0, &name_file); + else if (strchr (name, '/') != NULL) error = lookup (name, 0, &name_file); else if ((error = hurd_catch_signal (sigmask (SIGBUS) | sigmask (SIGSEGV), |