diff options
Diffstat (limited to 'lib/libc/unistd/execlp.c')
| -rw-r--r-- | lib/libc/unistd/execlp.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/lib/libc/unistd/execlp.c b/lib/libc/unistd/execlp.c new file mode 100644 index 00000000..4613a7ee --- /dev/null +++ b/lib/libc/unistd/execlp.c @@ -0,0 +1,27 @@ +#include <stdarg.h> +#include <stddef.h> +#include <syscall.h> + +// TODO: need to find in path and call execl +int execlp(const char *path, const char *argv0, ...) +{ + int argc; + va_list ap; + va_start(ap, argv0); + + argc = 1; + while (va_arg(ap, const char *) != NULL) { + argc++; + } + va_end(ap); + + char *argv[argc + 1]; + va_start(ap, argv0); + for (int i = 1; i < argc; i++) { + argv[i] = (char *)va_arg(ap, const char *); + } + argv[argc] = NULL; + va_end(ap); + + return syscall(execve, path, argv, 0); +} |
