diff options
| author | 2001-04-02 21:43:10 +0000 | |
|---|---|---|
| committer | 2001-04-02 21:43:10 +0000 | |
| commit | 1e2a4b7de664136cad86537230bd68eb56844410 (patch) | |
| tree | c0245488cf1e184eeab8583de6b0869cff989cb1 /sys/compat/linux/linux_misc.c | |
| parent | ATA_POLL should have been AT_POLL (diff) | |
| download | wireguard-openbsd-1e2a4b7de664136cad86537230bd68eb56844410.tar.xz wireguard-openbsd-1e2a4b7de664136cad86537230bd68eb56844410.zip | |
On popular demand, the Linux-compatibility clone(2) implementation based
on NetBSD's code, as well as some faked Posix RT extensions by me. This makes
at least simple linuxthreads tests work.
Diffstat (limited to 'sys/compat/linux/linux_misc.c')
| -rw-r--r-- | sys/compat/linux/linux_misc.c | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/sys/compat/linux/linux_misc.c b/sys/compat/linux/linux_misc.c index a4e73229cc5..30262a7c8b0 100644 --- a/sys/compat/linux/linux_misc.c +++ b/sys/compat/linux/linux_misc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: linux_misc.c,v 1.34 2001/01/23 05:48:05 csapuntz Exp $ */ +/* $OpenBSD: linux_misc.c,v 1.35 2001/04/02 21:43:11 niklas Exp $ */ /* $NetBSD: linux_misc.c,v 1.27 1996/05/20 01:59:21 fvdl Exp $ */ /* @@ -71,7 +71,9 @@ #include <compat/linux/linux_types.h> #include <compat/linux/linux_fcntl.h> +#include <compat/linux/linux_misc.h> #include <compat/linux/linux_mmap.h> +#include <compat/linux/linux_sched.h> #include <compat/linux/linux_signal.h> #include <compat/linux/linux_syscallargs.h> #include <compat/linux/linux_util.h> @@ -80,17 +82,16 @@ #include <compat/common/compat_dir.h> /* linux_misc.c */ -static void bsd_to_linux_wstat __P((int *)); static void bsd_to_linux_statfs __P((struct statfs *, struct linux_statfs *)); -int linux_select1 __P((struct proc *, register_t *, int, fd_set *, fd_set *, - fd_set *, struct timeval *)); +int linux_select1 __P((struct proc *, register_t *, int, fd_set *, + fd_set *, fd_set *, struct timeval *)); /* * The information on a terminated (or stopped) process needs * to be converted in order for Linux binaries to get a valid signal * number out of it. */ -static void +void bsd_to_linux_wstat(status) int *status; { @@ -166,7 +167,7 @@ linux_sys_wait4(p, v, retval) syscallarg(struct rusage *) rusage; } */ *uap = v; struct sys_wait4_args w4a; - int error, *status, tstat; + int error, *status, tstat, linux_options, options; caddr_t sg; if (SCARG(uap, status) != NULL) { @@ -175,9 +176,22 @@ linux_sys_wait4(p, v, retval) } else status = NULL; + linux_options = SCARG(uap, options); + options = 0; + if (linux_options & + ~(LINUX_WAIT4_WNOHANG|LINUX_WAIT4_WUNTRACED|LINUX_WAIT4_WCLONE)) + return (EINVAL); + + if (linux_options & LINUX_WAIT4_WNOHANG) + options |= WNOHANG; + if (linux_options & LINUX_WAIT4_WUNTRACED) + options |= WUNTRACED; + if (linux_options & LINUX_WAIT4_WCLONE) + options |= WALTSIG; + SCARG(&w4a, pid) = SCARG(uap, pid); SCARG(&w4a, status) = status; - SCARG(&w4a, options) = SCARG(uap, options); + SCARG(&w4a, options) = options; SCARG(&w4a, rusage) = SCARG(uap, rusage); if ((error = sys_wait4(p, &w4a, retval))) |
