URI: 
       tallow rfork(RFNOTEG|RFPROC|RFFDG) for rc. - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 1c8efa18ee49ae70138ae4cbc7b9fff5c17a89c8
   DIR parent 683c5e534ad7902669f8d92537f9e370380248de
  HTML Author: rsc <devnull@localhost>
       Date:   Thu,  4 Dec 2003 00:17:10 +0000
       
       allow rfork(RFNOTEG|RFPROC|RFFDG) for rc.
       
       Diffstat:
         M src/lib9/dirread.c                  |       8 +++++---
         M src/lib9/rfork.c                    |      14 ++++++++++++++
       
       2 files changed, 19 insertions(+), 3 deletions(-)
       ---
   DIR diff --git a/src/lib9/dirread.c b/src/lib9/dirread.c
       t@@ -50,8 +50,7 @@ countde(char *p, int n)
                                de->d_name[0] = 0;
                        else if(de->d_name[0]=='.' && de->d_name[1]=='.' && de->d_name[2]==0)
                                de->d_name[0] = 0;
       -                else
       -                        m++;
       +                m++;
                        p += de->d_reclen;
                }
                return m;
       t@@ -78,9 +77,12 @@ dirpackage(int fd, char *buf, int n, Dir **dp)
                        
                p = buf;
                nstr = 0;
       +
                for(i=0; i<n; i++){
                        de = (struct dirent*)p;
       -                if(stat(de->d_name, &st) < 0)
       +                if(de->d_name[0] == 0)
       +                        /* nothing */ {}
       +                else if(stat(de->d_name, &st) < 0)
                                de->d_name[0] = 0;
                        else
                                nstr += _p9dir(&st, de->d_name, nil, nil, nil);
   DIR diff --git a/src/lib9/rfork.c b/src/lib9/rfork.c
       t@@ -4,6 +4,20 @@
        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)){
       +                        werrstr("unknown flags %08ux in rfork", flags);
       +                        return -1;
       +                }
       +                pid = fork();
       +                if(pid != 0)
       +                        return pid;
       +        }
       +
                if(flags&RFPROC){
                        werrstr("cannot use rfork to fork -- use ffork");
                        return -1;