summaryrefslogtreecommitdiffstats
path: root/lib/libc/gen/exec.c
diff options
context:
space:
mode:
authordavidxu <davidxu@FreeBSD.org>2008-06-17 06:26:29 +0000
committerdavidxu <davidxu@FreeBSD.org>2008-06-17 06:26:29 +0000
commit3c1842a44c305fc36a39fec10fab78ad2db84f9e (patch)
tree3becab100d0d969a37794d8b43bde8568de3d68d /lib/libc/gen/exec.c
parent0b0ecff057d6974579e798f31444aae33a98c1b8 (diff)
downloadFreeBSD-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.c31
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));
+}
OpenPOWER on IntegriCloud