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