[BACK]Return to popen.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / mail

Diff for /src/usr.bin/mail/popen.c between version 1.20 and 1.21

version 1.20, 1998/09/08 15:24:38 version 1.21, 1998/09/10 16:06:40
Line 383 
Line 383 
 {  {
         struct child *cp;          struct child *cp;
         sigset_t nset, oset;          sigset_t nset, oset;
           int rv = 0;
   
         sigemptyset(&nset);          sigemptyset(&nset);
         sigaddset(&nset, SIGCHLD);          sigaddset(&nset, SIGCHLD);
         sigprocmask(SIG_BLOCK, &nset, &oset);          sigprocmask(SIG_BLOCK, &nset, &oset);
           /*
         if ((cp = findchild(pid, 0)) == NULL)           * If we have not already waited on the pid (via sigchild)
                 return(-1);           * wait on it now.  Otherwise, use the wait status stashed
            * by sigchild.
         while (!cp->done)           */
                 sigsuspend(&oset);          cp = findchild(pid, 1);
         wait_status = cp->status;          if (cp == NULL || !cp->done)
         delchild(cp);                  rv = waitpid(pid, &wait_status, 0);
           else
                   wait_status = cp->status;
           if (cp != NULL)
                   delchild(cp);
         sigprocmask(SIG_SETMASK, &oset, NULL);          sigprocmask(SIG_SETMASK, &oset, NULL);
         return((WIFEXITED(wait_status) && WEXITSTATUS(wait_status)) ? -1 : 0);          if (rv == -1 || (WIFEXITED(wait_status) && WEXITSTATUS(wait_status)))
                   return(-1);
           else
                   return(0);
 }  }
   
 /*  /*
Line 412 
Line 420 
         sigemptyset(&nset);          sigemptyset(&nset);
         sigaddset(&nset, SIGCHLD);          sigaddset(&nset, SIGCHLD);
         sigprocmask(SIG_BLOCK, &nset, &oset);          sigprocmask(SIG_BLOCK, &nset, &oset);
           if ((cp = findchild(pid, 0)) != NULL) {
         if ((cp = findchild(pid, 0)) == NULL)                  if (cp->done)
                 return;                          delchild(cp);
                   else
         if (cp->done)                          cp->free = 1;
                 delchild(cp);          }
         else  
                 cp->free = 1;  
         sigprocmask(SIG_SETMASK, &oset, NULL);          sigprocmask(SIG_SETMASK, &oset, NULL);
 }  }
   

Legend:
Removed from v.1.20  
changed lines
  Added in v.1.21