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

Diff for /src/usr.bin/rsh/Attic/rsh.c between version 1.33 and 1.34

version 1.33, 2003/08/11 20:10:00 version 1.34, 2003/08/11 20:43:31
Line 46 
Line 46 
 #include <sys/file.h>  #include <sys/file.h>
   
 #include <netinet/in.h>  #include <netinet/in.h>
 #include <netdb.h>  
   
   #include <err.h>
   #include <errno.h>
   #include <netdb.h>
   #include <poll.h>
 #include <pwd.h>  #include <pwd.h>
 #include <signal.h>  #include <signal.h>
   #include <stdarg.h>
 #include <stdio.h>  #include <stdio.h>
 #include <stdlib.h>  #include <stdlib.h>
 #include <unistd.h>  
 #include <errno.h>  
 #include <err.h>  
 #include <string.h>  #include <string.h>
 #include <stdarg.h>  #include <unistd.h>
   
 #include "pathnames.h"  #include "pathnames.h"
   
 #ifdef KERBEROS  #ifdef KERBEROS
Line 310 
Line 312 
 {  {
         int cc, wc;          int cc, wc;
         char *bp;          char *bp;
         fd_set readfrom, ready, rembits;          struct pollfd pfd[2];
         char buf[BUFSIZ];          char buf[BUFSIZ];
   
         if (!nflag && pid == 0) {          if (!nflag && pid == 0) {
                 (void)close(rfd2);                  (void)close(rfd2);
   
 reread:         errno = 0;  reread:         errno = 0;
                 if ((cc = read(0, buf, sizeof buf)) <= 0)                  if ((cc = read(STDIN_FILENO, buf, sizeof buf)) <= 0)
                         goto done;                          goto done;
                 bp = buf;                  bp = buf;
   
 rewrite:        FD_ZERO(&rembits);                  pfd[0].fd = rem;
                 if (rem >= FD_SETSIZE)                  pfd[0].events = POLLOUT;
                         errx(1, "descriptor too large");  rewrite:
                 FD_SET(rem, &rembits);                  if (poll(pfd, 1, INFTIM) < 0) {
                 if (select(rem + 1, 0, &rembits, 0, 0) < 0) {  
                         if (errno != EINTR)                          if (errno != EINTR)
                                 err(1, "select");                                  err(1, "poll");
                         goto rewrite;                          goto rewrite;
                 }                  }
                 if (!FD_ISSET(rem, &rembits))  
                         goto rewrite;  
 #ifdef KERBEROS  #ifdef KERBEROS
                 if (doencrypt)                  if (doencrypt)
                         wc = des_write(rem, bp, cc);                          wc = des_write(rem, bp, cc);
Line 354 
Line 353 
         }          }
   
         sigprocmask(SIG_SETMASK, omask, NULL);          sigprocmask(SIG_SETMASK, omask, NULL);
         FD_ZERO(&readfrom);          pfd[1].fd = rfd2;
         if (rfd2 >= FD_SETSIZE)          pfd[1].events = POLLIN;
                 errx(1, "descriptor too large");          pfd[0].fd = rem;
         FD_SET(rfd2, &readfrom);          pfd[0].events = POLLIN;
         if (rem >= FD_SETSIZE)  
                 errx(1, "descriptor too large");  
         FD_SET(rem, &readfrom);  
         do {          do {
                 FD_COPY(&readfrom, &ready);                  if (poll(pfd, 2, INFTIM) < 0) {
                 if (select(MAX(rfd2, rem) + 1, &ready, 0, 0, 0) < 0) {  
                         if (errno != EINTR)                          if (errno != EINTR)
                                 err(1, "select");                                  err(1, "poll");
                         continue;                          continue;
                 }                  }
                 if (FD_ISSET(rfd2, &ready)) {                  if (pfd[1].revents & POLLIN) {
                         errno = 0;                          errno = 0;
 #ifdef KERBEROS  #ifdef KERBEROS
                         if (doencrypt)                          if (doencrypt)
Line 378 
Line 373 
                                 cc = read(rfd2, buf, sizeof buf);                                  cc = read(rfd2, buf, sizeof buf);
                         if (cc <= 0) {                          if (cc <= 0) {
                                 if (errno != EWOULDBLOCK)                                  if (errno != EWOULDBLOCK)
                                         FD_CLR(rfd2, &readfrom);                                          pfd[1].revents = 0;
                         } else                          } else
                                 (void)write(2, buf, cc);                                  (void)write(STDERR_FILENO, buf, cc);
                 }                  }
                 if (FD_ISSET(rem, &ready)) {                  if (pfd[0].revents & POLLIN) {
                         errno = 0;                          errno = 0;
 #ifdef KERBEROS  #ifdef KERBEROS
                         if (doencrypt)                          if (doencrypt)
Line 392 
Line 387 
                                 cc = read(rem, buf, sizeof buf);                                  cc = read(rem, buf, sizeof buf);
                         if (cc <= 0) {                          if (cc <= 0) {
                                 if (errno != EWOULDBLOCK)                                  if (errno != EWOULDBLOCK)
                                         FD_CLR(rem, &readfrom);                                          pfd[0].revents = 0;
                         } else                          } else
                                 (void)write(1, buf, cc);                                  (void)write(STDOUT_FILENO, buf, cc);
                 }                  }
         } while (FD_ISSET(rem, &readfrom) || FD_ISSET(rfd2, &readfrom));          } while ((pfd[0].revents & POLLIN) || (pfd[1].revents & POLLIN));
 }  }
   
 void  void

Legend:
Removed from v.1.33  
changed lines
  Added in v.1.34