aboutsummaryrefslogtreecommitdiff
path: root/lib/libc
diff options
context:
space:
mode:
authorBrooks Davis <brooks@FreeBSD.org>2023-12-11 19:24:53 +0000
committerBrooks Davis <brooks@FreeBSD.org>2023-12-11 19:24:53 +0000
commit8ccd0b876e67fda6249f294ff484798cc1e1569f (patch)
tree774c484ae2831917500c6a4487837b1dd911327b /lib/libc
parent7df526eb10c9095e4988e77900f60ba00c42b095 (diff)
Diffstat (limited to 'lib/libc')
-rw-r--r--lib/libc/gen/Symbol.map4
-rw-r--r--lib/libc/gen/exec.324
-rw-r--r--lib/libc/gen/exec.c4
-rw-r--r--lib/libc/gen/posix_spawn.c4
-rw-r--r--lib/libc/include/libc_private.h3
5 files changed, 28 insertions, 11 deletions
diff --git a/lib/libc/gen/Symbol.map b/lib/libc/gen/Symbol.map
index b68d63b279f3..51c7348c5cc4 100644
--- a/lib/libc/gen/Symbol.map
+++ b/lib/libc/gen/Symbol.map
@@ -457,6 +457,10 @@ FBSD_1.7 {
__cpuset_free;
};
+FBSD_1.8 {
+ execvpe;
+};
+
FBSDprivate_1.0 {
/* needed by thread libraries */
__thr_jtable;
diff --git a/lib/libc/gen/exec.3 b/lib/libc/gen/exec.3
index 539a4b2ba42d..8f866e5ab321 100644
--- a/lib/libc/gen/exec.3
+++ b/lib/libc/gen/exec.3
@@ -25,7 +25,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd March 22, 2020
+.Dd December 11, 2023
.Dt EXEC 3
.Os
.Sh NAME
@@ -35,6 +35,7 @@
.Nm exect ,
.Nm execv ,
.Nm execvp ,
+.Nm execvpe ,
.Nm execvP
.Nd execute a file
.Sh LIBRARY
@@ -56,6 +57,8 @@
.Ft int
.Fn execvp "const char *file" "char *const argv[]"
.Ft int
+.Fn execvpe "const char *file" "char *const argv[]" "char *const envp[]"
+.Ft int
.Fn execvP "const char *file" "const char *search_path" "char *const argv[]"
.Sh DESCRIPTION
The
@@ -97,6 +100,7 @@ The
.Fn exect ,
.Fn execv ,
.Fn execvp ,
+.Fn execvpe ,
and
.Fn execvP
functions provide an array of pointers to null-terminated strings that
@@ -110,9 +114,10 @@ be terminated by a
pointer.
.Pp
The
-.Fn execle
+.Fn execle ,
+.Fn exect ,
and
-.Fn exect
+.Fn execvpe
functions also specify the environment of the executed process by following
the
.Dv NULL
@@ -134,6 +139,7 @@ Some of these functions have special semantics.
The functions
.Fn execlp ,
.Fn execvp ,
+.Fn execvpe ,
and
.Fn execvP
will duplicate the actions of the shell in searching for an executable file
@@ -144,6 +150,7 @@ For
.Fn execlp
and
.Fn execvp ,
+.Fn execvpe ,
search path is the path specified in the environment by
.Dq Ev PATH
variable.
@@ -269,7 +276,8 @@ The
.Fn execl ,
.Fn execle ,
.Fn execlp ,
-.Fn execvp
+.Fn execvp ,
+.Fn execvpe ,
and
.Fn execvP
functions
@@ -307,6 +315,9 @@ and
functions
conform to
.St -p1003.1-88 .
+The
+.Fn execvpe
+function is a GNU extension.
.Sh HISTORY
The
.Fn exec
@@ -330,6 +341,10 @@ The
.Fn execvP
function first appeared in
.Fx 5.2 .
+The
+.Fn execvpe
+function first appeared in
+.Fx 15.0 .
.Sh BUGS
The type of the
.Fa argv
@@ -340,6 +355,7 @@ parameters to
.Fn exect ,
.Fn execv ,
.Fn execvp ,
+.Fn execvpe ,
and
.Fn execvP
is a historical accident and no sane implementation should modify the provided
diff --git a/lib/libc/gen/exec.c b/lib/libc/gen/exec.c
index d2181c6e2b91..d9285733e965 100644
--- a/lib/libc/gen/exec.c
+++ b/lib/libc/gen/exec.c
@@ -136,7 +136,7 @@ execv(const char *name, char * const *argv)
int
execvp(const char *name, char * const *argv)
{
- return (_execvpe(name, argv, environ));
+ return (execvpe(name, argv, environ));
}
static int
@@ -288,7 +288,7 @@ execvP(const char *name, const char *path, char * const argv[])
}
int
-_execvpe(const char *name, char * const argv[], char * const envp[])
+execvpe(const char *name, char * const argv[], char * const envp[])
{
const char *path;
diff --git a/lib/libc/gen/posix_spawn.c b/lib/libc/gen/posix_spawn.c
index b1bb49d63ffd..a067d1f68ea5 100644
--- a/lib/libc/gen/posix_spawn.c
+++ b/lib/libc/gen/posix_spawn.c
@@ -226,7 +226,7 @@ struct posix_spawn_args {
#if defined(__i386__) || defined(__amd64__)
/*
* Below we'll assume that _RFORK_THREAD_STACK_SIZE is appropriately aligned for
- * the posix_spawn() case where we do not end up calling _execvpe and won't ever
+ * the posix_spawn() case where we do not end up calling execvpe and won't ever
* try to allocate space on the stack for argv[].
*/
#define _RFORK_THREAD_STACK_SIZE 4096
@@ -253,7 +253,7 @@ _posix_spawn_thr(void *data)
}
envp = psa->envp != NULL ? psa->envp : environ;
if (psa->use_env_path)
- _execvpe(psa->path, psa->argv, envp);
+ execvpe(psa->path, psa->argv, envp);
else
_execve(psa->path, psa->argv, envp);
psa->error = errno;
diff --git a/lib/libc/include/libc_private.h b/lib/libc/include/libc_private.h
index a9ad2ef21b0b..bfeada696538 100644
--- a/lib/libc/include/libc_private.h
+++ b/lib/libc/include/libc_private.h
@@ -422,9 +422,6 @@ int __sys_futimens(int fd, const struct timespec *times) __hidden;
int __sys_utimensat(int fd, const char *path,
const struct timespec *times, int flag) __hidden;
-/* execve() with PATH processing to implement posix_spawnp() */
-int _execvpe(const char *, char * const *, char * const *);
-
int _elf_aux_info(int aux, void *buf, int buflen);
struct dl_phdr_info;
int __elf_phdr_match_addr(struct dl_phdr_info *, void *);