Blob


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