[BACK]Return to popen.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / lib / libc / gen

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/lib/libc/gen/popen.c between version 1.2 and 1.3

version 1.2, 1993/07/30 08:23:01 version 1.3, 1993/08/21 00:11:47
Line 52  static char rcsid[] = "$Id$";
Line 52  static char rcsid[] = "$Id$";
 static pid_t *pids;  static pid_t *pids;
   
 FILE *  FILE *
 popen(program, type)  popen(command, type)
         const char *program;          const char *command;
         const char *type;          const char *type;
 {  {
         FILE *iop;          FILE *iop;
         int pdes[2], fds, pid;          int pdes[2], fds, pid;
   
         if (*type != 'r' && *type != 'w' || type[1])          if (*type != 'r' && *type != 'w' || type[1]) {
                   errno = EINVAL;
                 return (NULL);                  return (NULL);
           }
   
         if (pids == NULL) {          if (pids == NULL) {
                 if ((fds = getdtablesize()) <= 0)                  if ((fds = getdtablesize()) <= 0)
Line 91  popen(program, type)
Line 93  popen(program, type)
                         }                          }
                         (void) close(pdes[1]);                          (void) close(pdes[1]);
                 }                  }
                 execl(_PATH_BSHELL, "sh", "-c", program, NULL);                  execl(_PATH_BSHELL, "sh", "-c", command, (char *) 0);
                 _exit(127);                  _exit(127);
                 /* NOTREACHED */                  /* NOTREACHED */
         }          }
Line 113  pclose(iop)
Line 115  pclose(iop)
 {  {
         register int fdes;          register int fdes;
         int omask;          int omask;
         union wait pstat;          int pstat;
         pid_t pid;          pid_t pid;
   
         /*          /*
Line 126  pclose(iop)
Line 128  pclose(iop)
         (void) fclose(iop);          (void) fclose(iop);
         omask = sigblock(sigmask(SIGINT)|sigmask(SIGQUIT)|sigmask(SIGHUP));          omask = sigblock(sigmask(SIGINT)|sigmask(SIGQUIT)|sigmask(SIGHUP));
         do {          do {
                 pid = waitpid(pids[fdes], (int *) &pstat, 0);                  pid = waitpid(pids[fdes], &pstat, 0);
         } while (pid == -1 && errno == EINTR);          } while (pid == -1 && errno == EINTR);
         (void) sigsetmask(omask);          (void) sigsetmask(omask);
         pids[fdes] = 0;          pids[fdes] = 0;
         return (pid == -1 ? -1 : pstat.w_status);          return (pid == -1 ? -1 : pstat);
 }  }

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

CVSweb <webmaster@jp.NetBSD.org>