Blob
1 #define NOPLAN9DEFINES2 #include <lib9.h>4 int5 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 }