aboutsummaryrefslogtreecommitdiff
path: root/libc/bionic/exec.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libc/bionic/exec.cpp')
-rw-r--r--libc/bionic/exec.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/libc/bionic/exec.cpp b/libc/bionic/exec.cpp
index 3309585d5..fd2c401bb 100644
--- a/libc/bionic/exec.cpp
+++ b/libc/bionic/exec.cpp
@@ -44,9 +44,10 @@
extern "C" char** environ;
-enum ExecVariant { kIsExecL, kIsExecLE, kIsExecLP };
+enum { ExecL, ExecLE, ExecLP };
-static int __execl(const char* name, const char* argv0, ExecVariant variant, va_list ap) {
+template <int variant>
+static int __execl(const char* name, const char* argv0, va_list ap) {
// Count the arguments.
va_list count_ap;
va_copy(count_ap, ap);
@@ -65,17 +66,17 @@ static int __execl(const char* name, const char* argv0, ExecVariant variant, va_
}
// Collect the argp too.
- char** argp = (variant == kIsExecLE) ? va_arg(ap, char**) : environ;
+ char** argp = (variant == ExecLE) ? va_arg(ap, char**) : environ;
va_end(ap);
- return (variant == kIsExecLP) ? execvp(name, argv) : execve(name, argv, argp);
+ return (variant == ExecLP) ? execvp(name, argv) : execve(name, argv, argp);
}
int execl(const char* name, const char* arg, ...) {
va_list ap;
va_start(ap, arg);
- int result = __execl(name, arg, kIsExecL, ap);
+ int result = __execl<ExecL>(name, arg, ap);
va_end(ap);
return result;
}
@@ -83,7 +84,7 @@ int execl(const char* name, const char* arg, ...) {
int execle(const char* name, const char* arg, ...) {
va_list ap;
va_start(ap, arg);
- int result = __execl(name, arg, kIsExecLE, ap);
+ int result = __execl<ExecLE>(name, arg, ap);
va_end(ap);
return result;
}
@@ -91,7 +92,7 @@ int execle(const char* name, const char* arg, ...) {
int execlp(const char* name, const char* arg, ...) {
va_list ap;
va_start(ap, arg);
- int result = __execl(name, arg, kIsExecLP, ap);
+ int result = __execl<ExecLP>(name, arg, ap);
va_end(ap);
return result;
}