summaryrefslogtreecommitdiffstats
path: root/libdaemon/dexec.c
diff options
context:
space:
mode:
Diffstat (limited to 'libdaemon/dexec.c')
-rw-r--r--libdaemon/dexec.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/libdaemon/dexec.c b/libdaemon/dexec.c
index 3726565..10c757c 100644
--- a/libdaemon/dexec.c
+++ b/libdaemon/dexec.c
@@ -44,14 +44,13 @@
#define MAX_ARGS 100
-int daemon_exec(const char *dir, int *ret, const char *prog, ...) {
+int daemon_execv(const char *dir, int *ret, const char *prog, va_list ap) {
pid_t pid;
int p[2];
unsigned n = 0;
static char buf[256];
int sigfd, r;
fd_set fds;
- va_list ap;
assert(daemon_signal_fd() >= 0);
@@ -93,12 +92,10 @@ int daemon_exec(const char *dir, int *ret, const char *prog, ...) {
chdir("/");
}
- va_start(ap, prog);
for (i = 0; i < MAX_ARGS-1; i++)
if (!(args[i] = va_arg(ap, char*)))
break;
args[i] = NULL;
- va_end(ap);
execv(prog, args);
@@ -128,7 +125,6 @@ int daemon_exec(const char *dir, int *ret, const char *prog, ...) {
return -1;
}
-
if (FD_ISSET(p[0], &qfds)) {
char c;
@@ -190,3 +186,14 @@ int daemon_exec(const char *dir, int *ret, const char *prog, ...) {
}
}
}
+
+int daemon_exec(const char *dir, int *ret, const char *prog, ...) {
+ va_list ap;
+ int r;
+
+ va_start(ap, prog);
+ r = daemon_execv(dir, ret, prog, ap);
+ va_end(ap);
+
+ return r;
+}