From 6d6bd8ba78434ecb09395582b5f3e41febd4d4ee Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Thu, 13 Aug 2009 07:49:07 -0400 Subject: daemon: fix up INTERNAL_SYSCALL() usage Make sure we declare the error properly in case a port uses it, and fix the invocation of exit(). Since clone() will be returning a pid, assume that the value will not have the MSB set (negative) to simplify the error test a bit more. If gcc supports it, force this function to always be heavily optimized in a bid to avoid stack usage as much as possible. Signed-off-by: James Coleman Signed-off-by: Mike Frysinger --- libc/unistd/daemon.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'libc/unistd') diff --git a/libc/unistd/daemon.c b/libc/unistd/daemon.c index 3dcd995d2..741672ec0 100644 --- a/libc/unistd/daemon.c +++ b/libc/unistd/daemon.c @@ -55,12 +55,14 @@ /* use clone() to get fork() like behavior here -- we just want to disassociate * from the controlling terminal */ -static inline pid_t _fork_parent(void) +static inline attribute_optimize("O3") +pid_t _fork_parent(void) { - register unsigned long ret = INTERNAL_SYSCALL(clone, wtf, 2, CLONE_VM, 0); - if (ret != -1 && ret != 0) + INTERNAL_SYSCALL_DECL(err); + register long ret = INTERNAL_SYSCALL(clone, err, 2, CLONE_VM, 0); + if (ret > 0) /* parent needs to die now w/out touching stack */ - INTERNAL_SYSCALL(exit, wtf, 0); + INTERNAL_SYSCALL(exit, err, 1, 0); return ret; } static inline pid_t fork_parent(void) -- cgit v1.2.3