95 lines
1.9 KiB
C
95 lines
1.9 KiB
C
#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);
|
|
}
|