rump: import librumpclient
This commit is contained in:
parent
dc0601aab4
commit
377739cc06
|
|
@ -872,6 +872,9 @@
|
||||||
./usr/lib/librump.so.0.0 minix-base rump
|
./usr/lib/librump.so.0.0 minix-base rump
|
||||||
./usr/lib/librump.so.0 minix-base rump
|
./usr/lib/librump.so.0 minix-base rump
|
||||||
./usr/lib/librump.so minix-base rump
|
./usr/lib/librump.so minix-base rump
|
||||||
|
./usr/lib/librumpclient.so.0.0 minix-base rump
|
||||||
|
./usr/lib/librumpclient.so.0 minix-base rump
|
||||||
|
./usr/lib/librumpclient.so minix-base rump
|
||||||
./usr/lib/librumpdev.so.0.0 minix-base rump
|
./usr/lib/librumpdev.so.0.0 minix-base rump
|
||||||
./usr/lib/librumpdev.so.0 minix-base rump
|
./usr/lib/librumpdev.so.0 minix-base rump
|
||||||
./usr/lib/librumpdev.so minix-base rump
|
./usr/lib/librumpdev.so minix-base rump
|
||||||
|
|
|
||||||
|
|
@ -1724,6 +1724,7 @@
|
||||||
./usr/include/rump/rump_namei.h minix-comp rump
|
./usr/include/rump/rump_namei.h minix-comp rump
|
||||||
./usr/include/rump/rump_syscalls.h minix-comp rump
|
./usr/include/rump/rump_syscalls.h minix-comp rump
|
||||||
./usr/include/rump/rump_syscalls_compat.h minix-comp rump
|
./usr/include/rump/rump_syscalls_compat.h minix-comp rump
|
||||||
|
./usr/include/rump/rumpclient.h minix-comp rump
|
||||||
./usr/include/rump/rumpdefs.h minix-comp rump
|
./usr/include/rump/rumpdefs.h minix-comp rump
|
||||||
./usr/include/rump/rumperr.h minix-comp rump
|
./usr/include/rump/rumperr.h minix-comp rump
|
||||||
./usr/include/rump/rumperrno2host.h minix-comp rump
|
./usr/include/rump/rumperrno2host.h minix-comp rump
|
||||||
|
|
@ -2304,6 +2305,8 @@
|
||||||
./usr/lib/librmt.a minix-comp
|
./usr/lib/librmt.a minix-comp
|
||||||
./usr/lib/librump.a minix-comp rump
|
./usr/lib/librump.a minix-comp rump
|
||||||
./usr/lib/librump_pic.a minix-comp rump
|
./usr/lib/librump_pic.a minix-comp rump
|
||||||
|
./usr/lib/librumpclient.a minix-comp rump
|
||||||
|
./usr/lib/librumpclient_pic.a minix-comp rump
|
||||||
./usr/lib/librumpdev.a minix-comp rump
|
./usr/lib/librumpdev.a minix-comp rump
|
||||||
./usr/lib/librumpdev_audio.a minix-comp rump
|
./usr/lib/librumpdev_audio.a minix-comp rump
|
||||||
./usr/lib/librumpdev_audio_pic.a minix-comp rump
|
./usr/lib/librumpdev_audio_pic.a minix-comp rump
|
||||||
|
|
|
||||||
|
|
@ -2716,6 +2716,7 @@
|
||||||
./usr/man/man3/rump.3 minix-man rump
|
./usr/man/man3/rump.3 minix-man rump
|
||||||
./usr/man/man3/rump_etfs.3 minix-man rump
|
./usr/man/man3/rump_etfs.3 minix-man rump
|
||||||
./usr/man/man3/rump_lwproc.3 minix-man rump
|
./usr/man/man3/rump_lwproc.3 minix-man rump
|
||||||
|
./usr/man/man3/rumpclient.3 minix-man rump
|
||||||
./usr/man/man3/ruserok.3 minix-man
|
./usr/man/man3/ruserok.3 minix-man
|
||||||
./usr/man/man3/saslc.d.3 minix-man crypto
|
./usr/man/man3/saslc.d.3 minix-man crypto
|
||||||
./usr/man/man3/saslc_alloc.3 minix-man crypto
|
./usr/man/man3/saslc_alloc.3 minix-man crypto
|
||||||
|
|
|
||||||
|
|
@ -99,7 +99,7 @@ SUBDIR+= libc_vfp
|
||||||
.endif
|
.endif
|
||||||
.endif
|
.endif
|
||||||
.if (${MKRUMP} != "no")
|
.if (${MKRUMP} != "no")
|
||||||
#SUBDIR+= librumpclient
|
SUBDIR+= librumpclient
|
||||||
.endif
|
.endif
|
||||||
.if (${MKSKEY} != "no")
|
.if (${MKSKEY} != "no")
|
||||||
SUBDIR+= libskey
|
SUBDIR+= libskey
|
||||||
|
|
|
||||||
40
lib/librumpclient/Makefile
Normal file
40
lib/librumpclient/Makefile
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
# $NetBSD: Makefile,v 1.10 2013/09/10 17:39:10 pooka Exp $
|
||||||
|
#
|
||||||
|
|
||||||
|
.PATH: ${.CURDIR}/../../sys/rump/librump/rumpkern
|
||||||
|
|
||||||
|
LIB= rumpclient
|
||||||
|
USE_SHLIBDIR= yes
|
||||||
|
MAN= rumpclient.3
|
||||||
|
|
||||||
|
.if defined(__MINIX)
|
||||||
|
RUMPUSER_THREADS=fiber
|
||||||
|
.endif
|
||||||
|
|
||||||
|
.include <bsd.own.mk>
|
||||||
|
|
||||||
|
INCS= rumpclient.h
|
||||||
|
INCSDIR= /usr/include/rump
|
||||||
|
|
||||||
|
.for lib in ${RUMPCLIENT_EXTERNAL_DPLIBS}
|
||||||
|
LIBDO.${lib}= _external
|
||||||
|
LIBDPLIBS+= ${lib} lib
|
||||||
|
.endfor
|
||||||
|
|
||||||
|
CPPFLAGS+= -DRUMP_CLIENT
|
||||||
|
CPPFLAGS+= -I${.OBJDIR} -I${.CURDIR}
|
||||||
|
CPPFLAGS+= -I${.CURDIR}/../librumpuser
|
||||||
|
SRCS= rumpclient.c
|
||||||
|
SRCS+= rump_syscalls.c
|
||||||
|
|
||||||
|
CLEANFILES+= srcsys
|
||||||
|
|
||||||
|
COPTS.rump_syscalls.c+= -fno-strict-aliasing
|
||||||
|
|
||||||
|
.if !make(obj) && !make(clean) && !make(cleandir)
|
||||||
|
.BEGIN:
|
||||||
|
@rm -f srcsys
|
||||||
|
@ln -s ${NETBSDSRCDIR}/sys/sys srcsys
|
||||||
|
.endif
|
||||||
|
|
||||||
|
.include <bsd.lib.mk>
|
||||||
204
lib/librumpclient/rumpclient.3
Normal file
204
lib/librumpclient/rumpclient.3
Normal file
|
|
@ -0,0 +1,204 @@
|
||||||
|
.\" $NetBSD: rumpclient.3,v 1.3 2013/03/08 08:30:44 wiz Exp $
|
||||||
|
.\"
|
||||||
|
.\" Copyright (c) 2011 Antti Kantee. All rights reserved.
|
||||||
|
.\"
|
||||||
|
.\" Redistribution and use in source and binary forms, with or without
|
||||||
|
.\" modification, are permitted provided that the following conditions
|
||||||
|
.\" are met:
|
||||||
|
.\" 1. Redistributions of source code must retain the above copyright
|
||||||
|
.\" notice, this list of conditions and the following disclaimer.
|
||||||
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
.\" notice, this list of conditions and the following disclaimer in the
|
||||||
|
.\" documentation and/or other materials provided with the distribution.
|
||||||
|
.\"
|
||||||
|
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||||
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
.\" SUCH DAMAGE.
|
||||||
|
.\"
|
||||||
|
.Dd February 16, 2011
|
||||||
|
.Dt RUMPCLIENT 3
|
||||||
|
.Os
|
||||||
|
.Sh NAME
|
||||||
|
.Nm rumpclient
|
||||||
|
.Nd rump client library
|
||||||
|
.Sh LIBRARY
|
||||||
|
.Lb rumpclient
|
||||||
|
.Sh SYNOPSIS
|
||||||
|
.In rump/rumpclient.h
|
||||||
|
.In rump/rump_syscalls.h
|
||||||
|
.Ft int
|
||||||
|
.Fn rumpclient_init
|
||||||
|
.Ft pid_t
|
||||||
|
.Fn rumpclient_fork
|
||||||
|
.Ft pid_t
|
||||||
|
.Fn rumpclient_vfork
|
||||||
|
.Ft struct rumpclient_fork *
|
||||||
|
.Fn rumpclient_prefork
|
||||||
|
.Ft int
|
||||||
|
.Fn rumpclient_fork_init "struct rumpclient_fork *rfp"
|
||||||
|
.Ft void
|
||||||
|
.Fn rumpclient_fork_cancel "struct rumpclient_fork *rfp"
|
||||||
|
.Ft int
|
||||||
|
.Fn rumpclient_exec "const char *path" "char *const argv[]" "char *const envp[]"
|
||||||
|
.Ft int
|
||||||
|
.Fn rumpclient_daemon "int nochdir" "int noclose"
|
||||||
|
.Ft void
|
||||||
|
.Fn rumpclient_setconnretry "time_t retrytime"
|
||||||
|
.Ft int
|
||||||
|
.Fo rumpclient_syscall
|
||||||
|
.Fa "int num" "const void *sysarg" "size_t argsize" "register_t *retval"
|
||||||
|
.Fc
|
||||||
|
.Sh DESCRIPTION
|
||||||
|
.Nm
|
||||||
|
is the clientside implementation of the
|
||||||
|
.Xr rump_sp 7
|
||||||
|
facility.
|
||||||
|
It can be used to connect to a rump kernel server and make system call
|
||||||
|
style requests.
|
||||||
|
.Pp
|
||||||
|
Every connection to a rump kernel server creates a new process
|
||||||
|
context in the rump kernel.
|
||||||
|
By default a process is inherited from init, but through existing
|
||||||
|
connections and the forking facility offered by
|
||||||
|
.Nm
|
||||||
|
it is possible to form process trees.
|
||||||
|
.Bl -tag -width xxxx
|
||||||
|
.It Fn rumpclient_init
|
||||||
|
Initialize
|
||||||
|
.Nm .
|
||||||
|
The server address is determined from the environment variable
|
||||||
|
.Ev RUMP_SERVER
|
||||||
|
according to syntax described in
|
||||||
|
.Xr rump_sp 7 .
|
||||||
|
The new process is registered to the rump kernel with the command
|
||||||
|
name from
|
||||||
|
.Xr getprogname 3 .
|
||||||
|
.It Fn rumpclient_fork
|
||||||
|
Fork a rump client process.
|
||||||
|
This also causes a host process fork via
|
||||||
|
.Xr fork 2 .
|
||||||
|
The child will have a copy of the parent's rump kernel file descriptors.
|
||||||
|
.It Fn rumpclient_vfork
|
||||||
|
Like above, but the host uses
|
||||||
|
.Xr vfork 2 .
|
||||||
|
.It Fn rumpclient_prefork
|
||||||
|
Low-level routine which instructs the rump kernel that the current
|
||||||
|
process is planning to fork.
|
||||||
|
The routine returns a
|
||||||
|
.Pf non- Dv NULL
|
||||||
|
cookie if successful.
|
||||||
|
.It Fn rumpclient_fork_init rfp
|
||||||
|
Low-level routine which works like
|
||||||
|
.Fn rumpclient_init ,
|
||||||
|
with the exception that it uses the
|
||||||
|
.Ar rfp
|
||||||
|
context created by a call to
|
||||||
|
.Fn rumpclient_prefork .
|
||||||
|
This is typically called from the child of a
|
||||||
|
.Xr fork 2
|
||||||
|
call.
|
||||||
|
.It Fn rumpclient_fork_cancel rfp
|
||||||
|
Cancel previously initiated prefork context.
|
||||||
|
This is useful for error handling in case a full fork could not
|
||||||
|
be carried through.
|
||||||
|
.It Fn rumpclient_exec path argv envp
|
||||||
|
This call is a
|
||||||
|
.Nm
|
||||||
|
wrapper around
|
||||||
|
.Xr execve 2 .
|
||||||
|
The wrapper makes sure that the rump kernel process context stays
|
||||||
|
the same in the newly executed program.
|
||||||
|
This means that the rump kernel PID remains the same and the same
|
||||||
|
rump file descriptors are available (apart from ones which
|
||||||
|
were marked with
|
||||||
|
.Dv FD_CLOEXEC ) .
|
||||||
|
.Pp
|
||||||
|
It should be noted that the newly executed program must call
|
||||||
|
.Fn rumpclient_init
|
||||||
|
before any other rump kernel communication can take place.
|
||||||
|
The wrapper cannot do it because it no longer has program control.
|
||||||
|
However, since all rump clients call the init routine,
|
||||||
|
this should not be a problem.
|
||||||
|
.It Fn rumpclient_daemon noclose nochdir
|
||||||
|
This function performs the equivalent of
|
||||||
|
.Xr daemon 3 ,
|
||||||
|
but also ensures that the internal call to
|
||||||
|
.Xr fork 2
|
||||||
|
is handled properly.
|
||||||
|
This routine is provided for convenience.
|
||||||
|
.It Fn rumpclient_setconnretry retrytime
|
||||||
|
Set the timeout for how long the client attempts to reconnect to
|
||||||
|
the server in case of a broken connection.
|
||||||
|
After the timeout expires the client will return a failure
|
||||||
|
for that particular request.
|
||||||
|
It is critical to note that after a restablished connection the
|
||||||
|
rump kernel context will be that of a newly connected client.
|
||||||
|
This means all previous kernel state such as file descriptors
|
||||||
|
will be lost.
|
||||||
|
It is largely up to a particular application if this has impact
|
||||||
|
or not.
|
||||||
|
For example, web browsers tend to recover fairly smoothly from a
|
||||||
|
kernel server reconnect, while
|
||||||
|
.Xr sshd 8
|
||||||
|
gets confused if its sockets go missing.
|
||||||
|
.Pp
|
||||||
|
If
|
||||||
|
.Ar retrytime
|
||||||
|
is a positive integer, it means the number of seconds for which
|
||||||
|
reconnection will be attempted.
|
||||||
|
The value 0 means that reconnection will not be attempted, and all
|
||||||
|
subsequent operations will return the errno
|
||||||
|
.Er ENOTCONN .
|
||||||
|
.Pp
|
||||||
|
Additionally, the following special values are accepted:
|
||||||
|
.Bl -tag -width xxxx
|
||||||
|
.It Dv RUMPCLIENT_RETRYCONN_INFTIME
|
||||||
|
Attempt reconnection indefinitely.
|
||||||
|
.It Dv RUMPCLIENT_RETRYCONN_ONCE
|
||||||
|
Attempt reconnect exactly once.
|
||||||
|
What this precisely means depends on the situation: e.g. getting
|
||||||
|
.Er EHOSTUNREACH
|
||||||
|
immediately or the TCP connection request timeouting are considered
|
||||||
|
to be one retry.
|
||||||
|
.It Dv RUMPCLIENT_RETRYCONN_DIE
|
||||||
|
In case of a broken connection is detected at runtime, call
|
||||||
|
.Xr exit 3 .
|
||||||
|
This is useful for example in testing.
|
||||||
|
It ensures that clients are killed immediately when they attempt
|
||||||
|
to communicate with a halted server.
|
||||||
|
.El
|
||||||
|
.It Fn rumpclient_syscall num sysarg argsize retval
|
||||||
|
Execute an "indirect" system call.
|
||||||
|
In the normal case system calls are executed through the interfaces in
|
||||||
|
.In rump/rump_syscalls.h
|
||||||
|
(for example
|
||||||
|
.Fn rump_sys_read fd buf nbytes ) .
|
||||||
|
This interface allows calling the server with pre-marshalled arguments.
|
||||||
|
.El
|
||||||
|
.Pp
|
||||||
|
Additionally, all of the supported rump system calls are available
|
||||||
|
through this library.
|
||||||
|
See
|
||||||
|
.In rump/rump_syscalls.h
|
||||||
|
for a list.
|
||||||
|
.Sh RETURN VALUES
|
||||||
|
.Nm
|
||||||
|
routines return \-1 in case of error and set errno.
|
||||||
|
In case of success a non-negative integer is returned, where applicable.
|
||||||
|
.Sh SEE ALSO
|
||||||
|
.Xr rump_server 1 ,
|
||||||
|
.Xr rump 3 ,
|
||||||
|
.Xr rump_sp 7
|
||||||
|
.Sh CAVEATS
|
||||||
|
Interfaces for a cryptographically authenticated client-server
|
||||||
|
handshake do not currently exist.
|
||||||
|
This can be worked around with e.g. host access control and an ssh
|
||||||
|
tunnel.
|
||||||
1267
lib/librumpclient/rumpclient.c
Normal file
1267
lib/librumpclient/rumpclient.c
Normal file
File diff suppressed because it is too large
Load Diff
120
lib/librumpclient/rumpclient.h
Normal file
120
lib/librumpclient/rumpclient.h
Normal file
|
|
@ -0,0 +1,120 @@
|
||||||
|
/* $NetBSD: rumpclient.h,v 1.15 2013/01/20 15:23:21 pooka Exp $ */
|
||||||
|
|
||||||
|
/*-
|
||||||
|
* Copyright (c) 2010 Antti Kantee. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
||||||
|
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _RUMP_RUMPCLIENT_H_
|
||||||
|
#define _RUMP_RUMPCLIENT_H_
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#if !defined(__returns_twice)
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#define __returns_twice __attribute__((__returns_twice__))
|
||||||
|
#else /* __GNUC__ */
|
||||||
|
#define __returns_twice
|
||||||
|
#endif /* !__GNUC__ */
|
||||||
|
#endif /* !__returns_twice */
|
||||||
|
|
||||||
|
#if defined(__sun__) && !defined(RUMP_REGISTER_T)
|
||||||
|
#define RUMP_REGISTER_T long
|
||||||
|
typedef RUMP_REGISTER_T register_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct rumpclient_fork;
|
||||||
|
|
||||||
|
#define rumpclient_vfork() rumpclient__dofork(vfork)
|
||||||
|
|
||||||
|
#ifdef __BEGIN_DECLS
|
||||||
|
__BEGIN_DECLS
|
||||||
|
#elif defined(__cplusplus)
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int rumpclient_syscall(int, const void *, size_t, register_t *);
|
||||||
|
int rumpclient_init(void);
|
||||||
|
|
||||||
|
struct rumpclient_fork *rumpclient_prefork(void);
|
||||||
|
int rumpclient_fork_init(struct rumpclient_fork *);
|
||||||
|
void rumpclient_fork_cancel(struct rumpclient_fork *);
|
||||||
|
void rumpclient_fork_vparent(struct rumpclient_fork *);
|
||||||
|
|
||||||
|
pid_t rumpclient_fork(void);
|
||||||
|
int rumpclient_exec(const char *, char *const [], char *const[]);
|
||||||
|
int rumpclient_daemon(int, int);
|
||||||
|
|
||||||
|
#define RUMPCLIENT_RETRYCONN_INFTIME ((time_t)-1)
|
||||||
|
#define RUMPCLIENT_RETRYCONN_ONCE ((time_t)-2)
|
||||||
|
#define RUMPCLIENT_RETRYCONN_DIE ((time_t)-3)
|
||||||
|
void rumpclient_setconnretry(time_t);
|
||||||
|
|
||||||
|
enum rumpclient_closevariant {
|
||||||
|
RUMPCLIENT_CLOSE_CLOSE,
|
||||||
|
RUMPCLIENT_CLOSE_DUP2,
|
||||||
|
RUMPCLIENT_CLOSE_FCLOSEM
|
||||||
|
};
|
||||||
|
int rumpclient__closenotify(int *, enum rumpclient_closevariant);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* vfork needs to be implemented as an inline to make everything
|
||||||
|
* run in the caller's stackframe.
|
||||||
|
*/
|
||||||
|
static __attribute__((__always_inline__)) __returns_twice inline pid_t
|
||||||
|
rumpclient__dofork(pid_t (*forkfn)(void))
|
||||||
|
{
|
||||||
|
struct rumpclient_fork *rf;
|
||||||
|
pid_t pid;
|
||||||
|
int childran = 0;
|
||||||
|
|
||||||
|
if (!(rf = rumpclient_prefork()))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
switch ((pid = forkfn())) {
|
||||||
|
case -1:
|
||||||
|
rumpclient_fork_cancel(rf);
|
||||||
|
break;
|
||||||
|
case 0:
|
||||||
|
childran = 1;
|
||||||
|
if (rumpclient_fork_init(rf) == -1)
|
||||||
|
pid = -1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
/* XXX: multithreaded vforker? do they exist? */
|
||||||
|
if (childran)
|
||||||
|
rumpclient_fork_vparent(rf);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return pid;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __END_DECLS
|
||||||
|
__END_DECLS
|
||||||
|
#elif defined(__cplusplus)
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _RUMP_RUMPCLIENT_H_ */
|
||||||
4
lib/librumpclient/shlib_version
Normal file
4
lib/librumpclient/shlib_version
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
# $NetBSD: shlib_version,v 1.1 2010/11/04 21:01:29 pooka Exp $
|
||||||
|
#
|
||||||
|
major=0
|
||||||
|
minor=0
|
||||||
|
|
@ -48,7 +48,12 @@
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <poll.h>
|
#include <poll.h>
|
||||||
|
#if defined(__minix)
|
||||||
|
#define _MTHREADIFY_PTHREADS
|
||||||
|
#include <minix/mthread.h>
|
||||||
|
#else
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
|
#endif
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user