Blob


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