Blob
1 #include <u.h>2 #include <libc.h>3 #include "9proc.h"4 #undef rfork6 int7 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 }