=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/rsh/Attic/rsh.c,v retrieving revision 1.33 retrieving revision 1.34 diff -c -r1.33 -r1.34 *** src/usr.bin/rsh/Attic/rsh.c 2003/08/11 20:10:00 1.33 --- src/usr.bin/rsh/Attic/rsh.c 2003/08/11 20:43:31 1.34 *************** *** 1,4 **** ! /* $OpenBSD: rsh.c,v 1.33 2003/08/11 20:10:00 millert Exp $ */ /*- * Copyright (c) 1983, 1990 The Regents of the University of California. --- 1,4 ---- ! /* $OpenBSD: rsh.c,v 1.34 2003/08/11 20:43:31 millert Exp $ */ /*- * Copyright (c) 1983, 1990 The Regents of the University of California. *************** *** 37,43 **** #ifndef lint /*static const char sccsid[] = "from: @(#)rsh.c 5.24 (Berkeley) 7/1/91";*/ ! static const char rcsid[] = "$OpenBSD: rsh.c,v 1.33 2003/08/11 20:10:00 millert Exp $"; #endif /* not lint */ #include --- 37,43 ---- #ifndef lint /*static const char sccsid[] = "from: @(#)rsh.c 5.24 (Berkeley) 7/1/91";*/ ! static const char rcsid[] = "$OpenBSD: rsh.c,v 1.34 2003/08/11 20:43:31 millert Exp $"; #endif /* not lint */ #include *************** *** 46,62 **** #include #include - #include #include #include #include #include - #include - #include - #include #include ! #include #include "pathnames.h" #ifdef KERBEROS --- 46,64 ---- #include #include + #include + #include + #include + #include #include #include + #include #include #include #include ! #include ! #include "pathnames.h" #ifdef KERBEROS *************** *** 310,337 **** { int cc, wc; char *bp; ! fd_set readfrom, ready, rembits; char buf[BUFSIZ]; if (!nflag && pid == 0) { (void)close(rfd2); reread: errno = 0; ! if ((cc = read(0, buf, sizeof buf)) <= 0) goto done; bp = buf; ! rewrite: FD_ZERO(&rembits); ! if (rem >= FD_SETSIZE) ! errx(1, "descriptor too large"); ! FD_SET(rem, &rembits); ! if (select(rem + 1, 0, &rembits, 0, 0) < 0) { if (errno != EINTR) ! err(1, "select"); goto rewrite; } - if (!FD_ISSET(rem, &rembits)) - goto rewrite; #ifdef KERBEROS if (doencrypt) wc = des_write(rem, bp, cc); --- 312,336 ---- { int cc, wc; char *bp; ! struct pollfd pfd[2]; char buf[BUFSIZ]; if (!nflag && pid == 0) { (void)close(rfd2); reread: errno = 0; ! if ((cc = read(STDIN_FILENO, buf, sizeof buf)) <= 0) goto done; bp = buf; ! pfd[0].fd = rem; ! pfd[0].events = POLLOUT; ! rewrite: ! if (poll(pfd, 1, INFTIM) < 0) { if (errno != EINTR) ! err(1, "poll"); goto rewrite; } #ifdef KERBEROS if (doencrypt) wc = des_write(rem, bp, cc); *************** *** 354,374 **** } sigprocmask(SIG_SETMASK, omask, NULL); ! FD_ZERO(&readfrom); ! if (rfd2 >= FD_SETSIZE) ! errx(1, "descriptor too large"); ! FD_SET(rfd2, &readfrom); ! if (rem >= FD_SETSIZE) ! errx(1, "descriptor too large"); ! FD_SET(rem, &readfrom); do { ! FD_COPY(&readfrom, &ready); ! if (select(MAX(rfd2, rem) + 1, &ready, 0, 0, 0) < 0) { if (errno != EINTR) ! err(1, "select"); continue; } ! if (FD_ISSET(rfd2, &ready)) { errno = 0; #ifdef KERBEROS if (doencrypt) --- 353,369 ---- } sigprocmask(SIG_SETMASK, omask, NULL); ! pfd[1].fd = rfd2; ! pfd[1].events = POLLIN; ! pfd[0].fd = rem; ! pfd[0].events = POLLIN; do { ! if (poll(pfd, 2, INFTIM) < 0) { if (errno != EINTR) ! err(1, "poll"); continue; } ! if (pfd[1].revents & POLLIN) { errno = 0; #ifdef KERBEROS if (doencrypt) *************** *** 378,388 **** cc = read(rfd2, buf, sizeof buf); if (cc <= 0) { if (errno != EWOULDBLOCK) ! FD_CLR(rfd2, &readfrom); } else ! (void)write(2, buf, cc); } ! if (FD_ISSET(rem, &ready)) { errno = 0; #ifdef KERBEROS if (doencrypt) --- 373,383 ---- cc = read(rfd2, buf, sizeof buf); if (cc <= 0) { if (errno != EWOULDBLOCK) ! pfd[1].revents = 0; } else ! (void)write(STDERR_FILENO, buf, cc); } ! if (pfd[0].revents & POLLIN) { errno = 0; #ifdef KERBEROS if (doencrypt) *************** *** 392,402 **** cc = read(rem, buf, sizeof buf); if (cc <= 0) { if (errno != EWOULDBLOCK) ! FD_CLR(rem, &readfrom); } else ! (void)write(1, buf, cc); } ! } while (FD_ISSET(rem, &readfrom) || FD_ISSET(rfd2, &readfrom)); } void --- 387,397 ---- cc = read(rem, buf, sizeof buf); if (cc <= 0) { if (errno != EWOULDBLOCK) ! pfd[0].revents = 0; } else ! (void)write(STDOUT_FILENO, buf, cc); } ! } while ((pfd[0].revents & POLLIN) || (pfd[1].revents & POLLIN)); } void