1 fd04aace 2003-11-23 devnull #define NOPLAN9DEFINES
2 fd04aace 2003-11-23 devnull #include <lib9.h>
5 fd04aace 2003-11-23 devnull p9rfork(int flags)
9 1c8efa18 2003-12-04 devnull if((flags&(RFPROC|RFFDG|RFMEM)) == (RFPROC|RFFDG)){
10 1c8efa18 2003-12-04 devnull /* check other flags before we commit */
11 1c8efa18 2003-12-04 devnull flags &= ~(RFPROC|RFFDG);
12 32f69c36 2003-12-11 devnull if(flags & ~(RFNOTEG|RFNAMEG)){
13 1c8efa18 2003-12-04 devnull werrstr("unknown flags %08ux in rfork", flags);
14 1c8efa18 2003-12-04 devnull return -1;
16 1c8efa18 2003-12-04 devnull pid = fork();
17 1c8efa18 2003-12-04 devnull if(pid != 0)
18 1c8efa18 2003-12-04 devnull return pid;
20 fd04aace 2003-11-23 devnull if(flags&RFPROC){
21 32f69c36 2003-12-11 devnull werrstr("cannot use rfork for shared memory -- use ffork");
22 fd04aace 2003-11-23 devnull return -1;
24 32f69c36 2003-12-11 devnull if(flags&RFNAMEG){
25 32f69c36 2003-12-11 devnull /* XXX set $NAMESPACE to a new directory */
26 32f69c36 2003-12-11 devnull flags &= ~RFNAMEG;
28 fd04aace 2003-11-23 devnull if(flags&RFNOTEG){
29 1c253ceb 2003-11-23 devnull setpgid(0, getpid());
30 fd04aace 2003-11-23 devnull flags &= ~RFNOTEG;
32 fd04aace 2003-11-23 devnull if(flags){
33 fd04aace 2003-11-23 devnull werrstr("unknown flags %08ux in rfork", flags);
34 fd04aace 2003-11-23 devnull return -1;
36 fd04aace 2003-11-23 devnull return 0;