aboutsummaryrefslogtreecommitdiff
path: root/libbb/vfork_daemon_rexec.c
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2006-06-07 21:48:30 +0000
committerMike Frysinger <vapier@gentoo.org>2006-06-07 21:48:30 +0000
commit6fb5847faf690099f6323a35bb0d4e41f65c0d3c (patch)
tree845e3487ae54b0961985fb0f60f913faf7b5c9e9 /libbb/vfork_daemon_rexec.c
parentca70774293a3ebb0f1ca4b0626b135cc74cfdea8 (diff)
downloadbusybox-6fb5847faf690099f6323a35bb0d4e41f65c0d3c.tar.gz
sometimes daemonizing and vfork()/exit() is ok
Diffstat (limited to 'libbb/vfork_daemon_rexec.c')
-rw-r--r--libbb/vfork_daemon_rexec.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/libbb/vfork_daemon_rexec.c b/libbb/vfork_daemon_rexec.c
index 59a2287b0..05c9c0dab 100644
--- a/libbb/vfork_daemon_rexec.c
+++ b/libbb/vfork_daemon_rexec.c
@@ -23,12 +23,9 @@
#ifdef BB_NOMMU
-void vfork_daemon_rexec(int nochdir, int noclose,
- int argc, char **argv, char *foreground_opt)
+static void vfork_daemon_common(int nochdir, int noclose)
{
int fd;
- char **vfork_args;
- int a = 0;
setsid();
@@ -41,7 +38,24 @@ void vfork_daemon_rexec(int nochdir, int noclose,
dup2(fd, STDERR_FILENO);
if (fd > 2)
close(fd);
- }
+ }
+}
+
+void vfork_daemon(int nochdir, int noclose)
+{
+ vfork_daemon_common(nochdir, noclose);
+
+ if (vfork())
+ exit(0);
+}
+
+void vfork_daemon_rexec(int nochdir, int noclose,
+ int argc, char **argv, char *foreground_opt)
+{
+ char **vfork_args;
+ int a = 0;
+
+ vfork_daemon_common(nochdir, noclose);
vfork_args = xcalloc(sizeof(char *), argc + 3);
vfork_args[a++] = "/bin/busybox";