Files
rosetta/lib/libc/exec/unistd/exec.c
T

95 lines
1.9 KiB
C
Raw Normal View History

2026-05-30 10:02:45 +01:00
#include <errno.h>
#include <stdarg.h>
#define LD_EXTERN extern __attribute__((weak))
LD_EXTERN int ld_execl(const char *path, const char *arg1, va_list arg);
LD_EXTERN int ld_execlp(const char *file, const char *arg1, va_list arg);
LD_EXTERN int ld_execle(const char *path, const char *arg1, va_list arg);
LD_EXTERN int ld_execv(const char *path, char *const argv[]);
LD_EXTERN int ld_execvp(const char *file, char *const argv[]);
LD_EXTERN int ld_execvpe(
const char *file,
char *const argv[],
char *const envp[]);
int execl(const char *path, const char *arg, ...)
{
va_list arglist;
va_start(arglist, arg);
int err = ld_execl(path, arg, arglist);
va_end(arglist);
if (err < 0) {
return __set_errno(-err);
}
/* this shouldn't happen */
return __set_errno(ENOEXEC);
}
int execlp(const char *file, const char *arg, ...)
{
va_list arglist;
va_start(arglist, arg);
int err = ld_execlp(file, arg, arglist);
va_end(arglist);
if (err < 0) {
return __set_errno(-err);
}
/* this shouldn't happen */
return __set_errno(ENOEXEC);
}
int execle(const char *path, const char *arg, ...)
{
va_list arglist;
va_start(arglist, arg);
int err = ld_execle(path, arg, arglist);
va_end(arglist);
if (err < 0) {
return __set_errno(-err);
}
/* this shouldn't happen */
return __set_errno(ENOEXEC);
}
int execv(const char *path, char *const argv[])
{
int err = ld_execv(path, argv);
if (err < 0) {
return __set_errno(-err);
}
/* this shouldn't happen */
return __set_errno(ENOEXEC);
}
int execvp(const char *file, char *const argv[])
{
int err = ld_execvp(file, argv);
if (err < 0) {
return __set_errno(-err);
}
/* this shouldn't happen */
return __set_errno(ENOEXEC);
}
int execvpe(const char *file, char *const argv[], char *const envp[])
{
int err = ld_execvpe(file, argv, envp);
if (err < 0) {
return __set_errno(-err);
}
/* this shouldn't happen */
return __set_errno(ENOEXEC);
}