--- Makefile +++ Makefile 1994/02/22 14:36:06 @@ -0,0 +1,14 @@ +CFLAGS = -O2 -fomit-frame-pointer -m486 -include /usr/include/bsd/bsd.h \ + -I/usr/include/bsd # -DKERBEROS -DCRYPT +LDLIBS = -lbsd # -lkrb -ldes +LDFLAGS = -s -v + +rsh: rsh.o # krcmd.o kcmd.o des_rw.o + +install: rsh + install -m4755 rsh /usr/bin/rsh + install -m644 rsh.1 /usr/man/man1 + +clean: + rm -f *.o rsh + --- rsh.c +++ rsh.c 1994/02/22 14:27:55 @@ -58,6 +58,7 @@ #include #include +#include #include #include #include @@ -317,9 +318,11 @@ { register int cc, wc; register char *bp; - int readfrom, ready, rembits; + fd_set readfrom, rembits; char buf[BUFSIZ]; + FD_ZERO(&rembits); + if (!nflag && pid == 0) { (void)close(rfd2); @@ -328,7 +331,8 @@ goto done; bp = buf; -rewrite: rembits = 1 << rem; +rewrite: FD_ZERO(&rembits); + FD_SET(rem, &rembits); if (select(16, 0, &rembits, 0, 0) < 0) { if (errno != EINTR) { (void)fprintf(stderr, @@ -337,7 +341,7 @@ } goto rewrite; } - if ((rembits & (1 << rem)) == 0) + if (! FD_ISSET(rem, &rembits)) goto rewrite; #ifdef KERBEROS #ifdef CRYPT @@ -363,10 +367,11 @@ } (void)sigsetmask(omask); - readfrom = (1 << rfd2) | (1 << rem); do { - ready = readfrom; - if (select(16, &ready, 0, 0, 0) < 0) { + FD_ZERO(&readfrom); + FD_SET(rfd2, &readfrom); + FD_SET(rem, &readfrom); + if (select(16, &readfrom, 0, 0, 0) < 0) { if (errno != EINTR) { (void)fprintf(stderr, "rsh: select: %s.\n", strerror(errno)); @@ -374,7 +379,7 @@ } continue; } - if (ready & (1 << rfd2)) { + if (FD_ISSET(rfd2, &readfrom)) { errno = 0; #ifdef KERBEROS #ifdef CRYPT @@ -386,11 +391,11 @@ cc = read(rfd2, buf, sizeof buf); if (cc <= 0) { if (errno != EWOULDBLOCK) - readfrom &= ~(1 << rfd2); + FD_CLR(rfd2, &readfrom); } else (void)write(2, buf, cc); } - if (ready & (1 << rem)) { + if (FD_ISSET(rem, &readfrom)) { errno = 0; #ifdef KERBEROS #ifdef CRYPT @@ -402,11 +407,11 @@ cc = read(rem, buf, sizeof buf); if (cc <= 0) { if (errno != EWOULDBLOCK) - readfrom &= ~(1 << rem); + FD_CLR(rem, &readfrom); } else (void)write(1, buf, cc); } - } while (readfrom); + } while (FD_ISSET(rem, &readfrom) || FD_ISSET(rfd2, &readfrom)); } void