#define NOPLAN9DEFINES | |
#include <lib9.h> | |
int | |
p9rfork(int flags) | |
{ | |
int pid; | |
if((flags&(RFPROC|RFFDG|RFMEM)) == (RFPROC|RFFDG)){ | |
/* check other flags before we commit */ | |
flags &= ~(RFPROC|RFFDG); | |
if(flags & ~(RFNOTEG|RFNAMEG)){ | |
werrstr("unknown flags %08ux in rfork", flags); | |
return -1; | |
} | |
pid = fork(); | |
if(pid != 0) | |
return pid; | |
} | |
if(flags&RFPROC){ | |
werrstr("cannot use rfork for shared memory -- use ffork"); | |
return -1; | |
} | |
if(flags&RFNAMEG){ | |
/* XXX set $NAMESPACE to a new directory */ | |
flags &= ~RFNAMEG; | |
} | |
if(flags&RFNOTEG){ | |
setpgid(0, getpid()); | |
flags &= ~RFNOTEG; | |
} | |
if(flags){ | |
werrstr("unknown flags %08ux in rfork", flags); | |
return -1; | |
} | |
return 0; | |
} |