From 174dc1b8cd932fb5cd3d50fe5317e0c29ee26c59 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Wed, 11 Oct 2000 22:51:00 +0000 Subject: Reorg unistd dir --- libc/unistd/execlp.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 libc/unistd/execlp.c (limited to 'libc/unistd/execlp.c') diff --git a/libc/unistd/execlp.c b/libc/unistd/execlp.c new file mode 100644 index 000000000..571ab71b0 --- /dev/null +++ b/libc/unistd/execlp.c @@ -0,0 +1,51 @@ + +#include +#include +#include + +extern char **environ; + +int execlp(__const char *file, __const char *arg, ...) +{ + const char *shortargv[16]; + const char **argv; + const char *c; + int i; + va_list args; + + i = 1; + + va_start(args, arg); + + do { + c = va_arg(args, const char *); + + i++; + } while (c); + + va_end(args); + + if (i <= 16) + argv = shortargv; + else { + argv = (const char **) malloc(sizeof(char *) * i); + } + + argv[0] = arg; + i = 1; + + va_start(args, arg); + + do { + argv[i] = va_arg(args, const char *); + } while (argv[i++]); + + va_end(args); + + i = execvep(file, (char *const *) argv, environ); + + if (argv != shortargv) + free(argv); + + return i; +} -- cgit v1.2.3