diff options
author | davidxu <davidxu@FreeBSD.org> | 2008-06-17 06:26:29 +0000 |
---|---|---|
committer | davidxu <davidxu@FreeBSD.org> | 2008-06-17 06:26:29 +0000 |
commit | 3c1842a44c305fc36a39fec10fab78ad2db84f9e (patch) | |
tree | 3becab100d0d969a37794d8b43bde8568de3d68d /lib/libc/gen/exec.c | |
parent | 0b0ecff057d6974579e798f31444aae33a98c1b8 (diff) | |
download | FreeBSD-src-3c1842a44c305fc36a39fec10fab78ad2db84f9e.zip FreeBSD-src-3c1842a44c305fc36a39fec10fab78ad2db84f9e.tar.gz |
Add POSIX routines called posix_spawn() and posix_spawnp(), which
can be used as replacements for exec/fork in a lot of cases. This
change also added execvpe() which allows environment variable
PATH to be used for searching executable file, it is used for
implementing posix_spawnp().
PR: standards/122051
Diffstat (limited to 'lib/libc/gen/exec.c')
-rw-r--r-- | lib/libc/gen/exec.c | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/lib/libc/gen/exec.c b/lib/libc/gen/exec.c index 2cf7a36..4525ce2 100644 --- a/lib/libc/gen/exec.c +++ b/lib/libc/gen/exec.c @@ -140,20 +140,15 @@ execv(name, argv) int execvp(const char *name, char * const *argv) { - const char *path; - - /* Get the path we're searching. */ - if ((path = getenv("PATH")) == NULL) - path = _PATH_DEFPATH; - - return (execvP(name, path, argv)); + return (execvpe(name, argv, environ)); } -int -execvP(name, path, argv) +static int +execvPe(name, path, argv, envp) const char *name; const char *path; char * const *argv; + char * const *envp; { char **memp; int cnt, lp, ln; @@ -269,3 +264,21 @@ retry: (void)_execve(bp, argv, environ); done: return (-1); } + +int +execvP(const char *name, const char *path, char * const argv[]) +{ + return execvPe(name, path, argv, environ); +} + +int +execvpe(const char *name, char * const argv[], char * const envp[]) +{ + const char *path; + + /* Get the path we're searching. */ + if ((path = getenv("PATH")) == NULL) + path = _PATH_DEFPATH; + + return (execvPe(name, path, argv, envp)); +} |