|
|
@ -1,10 +1,15 @@ |
|
|
|
|
|
#define _GNU_SOURCE |
|
|
#include <unistd.h> |
|
|
#include <unistd.h> |
|
|
#include <errno.h> |
|
|
#include <errno.h> |
|
|
|
|
|
#include <fcntl.h> |
|
|
|
|
|
#include "syscall.h" |
|
|
|
|
|
|
|
|
void __procfdname(char *, unsigned); |
|
|
void __procfdname(char *, unsigned); |
|
|
|
|
|
|
|
|
int fexecve(int fd, char *const argv[], char *const envp[]) |
|
|
int fexecve(int fd, char *const argv[], char *const envp[]) |
|
|
{ |
|
|
{ |
|
|
|
|
|
int r = __syscall(SYS_execveat, fd, "", argv, envp, AT_EMPTY_PATH); |
|
|
|
|
|
if (r != -ENOSYS) return __syscall_ret(r); |
|
|
char buf[15 + 3*sizeof(int)]; |
|
|
char buf[15 + 3*sizeof(int)]; |
|
|
__procfdname(buf, fd); |
|
|
__procfdname(buf, fd); |
|
|
execve(buf, argv, envp); |
|
|
execve(buf, argv, envp); |
|
|
|