diff --git a/Userland/Libraries/LibC/unistd.cpp b/Userland/Libraries/LibC/unistd.cpp index 0d01ff2f17..5236cf73b5 100644 --- a/Userland/Libraries/LibC/unistd.cpp +++ b/Userland/Libraries/LibC/unistd.cpp @@ -160,6 +160,26 @@ int execl(const char* filename, const char* arg0, ...) return execve(filename, const_cast(args.data()), environ); } +int execle(char const* filename, char const* arg0, ...) +{ + Vector args; + args.append(arg0); + + va_list ap; + va_start(ap, arg0); + char const* arg; + do { + arg = va_arg(ap, char const*); + args.append(arg); + } while (arg); + + auto argv = const_cast(args.data()); + auto envp = const_cast(va_arg(ap, char* const*)); + va_end(ap); + + return execve(filename, argv, envp); +} + int execlp(const char* filename, const char* arg0, ...) { Vector args; diff --git a/Userland/Libraries/LibC/unistd.h b/Userland/Libraries/LibC/unistd.h index 136581266a..dc0d26ee9e 100644 --- a/Userland/Libraries/LibC/unistd.h +++ b/Userland/Libraries/LibC/unistd.h @@ -49,6 +49,7 @@ int execve(const char* filename, char* const argv[], char* const envp[]); int execvpe(const char* filename, char* const argv[], char* const envp[]); int execvp(const char* filename, char* const argv[]); int execl(const char* filename, const char* arg, ...); +int execle(const char* filename, const char* arg, ...); int execlp(const char* filename, const char* arg, ...); int chroot(const char* path); int chroot_with_mount_flags(const char* path, int mount_flags);