=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/sudo/Attic/tgetpass.c,v retrieving revision 1.1 retrieving revision 1.2 diff -c -r1.1 -r1.2 *** src/usr.bin/sudo/Attic/tgetpass.c 1999/11/18 16:29:01 1.1 --- src/usr.bin/sudo/Attic/tgetpass.c 1999/12/10 06:45:12 1.2 *************** *** 78,84 **** #endif /* TCSASOFT */ #ifndef lint ! static const char rcsid[] = "$Sudo: tgetpass.c,v 1.90 1999/11/01 15:58:46 millert Exp $"; #endif /* lint */ static char *tgetline __P((int, char *, size_t, int)); --- 78,84 ---- #endif /* TCSASOFT */ #ifndef lint ! static const char rcsid[] = "$Sudo: tgetpass.c,v 1.91 1999/12/05 02:18:47 millert Exp $"; #endif /* lint */ static char *tgetline __P((int, char *, size_t, int)); *************** *** 188,193 **** --- 188,196 ---- if (bufsiz == 0) return(NULL); /* sanity */ + cp = buf; + left = bufsiz; + /* * Timeout of <= 0 means no timeout. */ *************** *** 196,224 **** n = howmany(fd + 1, NFDBITS) * sizeof(fd_mask); readfds = (fd_set *) emalloc(n); (void) memset((VOID *)readfds, 0, n); - FD_SET(fd, readfds); /* Set timeout for select */ tv.tv_sec = timeout; tv.tv_usec = 0; ! /* ! * Make sure there is something to read or timeout ! */ ! while ((n = select(fd + 1, readfds, 0, 0, &tv)) == -1 && ! errno == EINTR) ! ; ! if (n == 0) ! return(NULL); /* timeout */ ! } ! if (readfds) ! free(readfds); ! /* Keep reading until out of space, EOF, error, or newline */ ! cp = buf; ! left = bufsiz; ! while (--left && (n = read(fd, &c, 1)) == 1 && c != '\n') ! *cp++ = c; *cp = '\0'; return(cp == buf ? NULL : buf); --- 199,231 ---- n = howmany(fd + 1, NFDBITS) * sizeof(fd_mask); readfds = (fd_set *) emalloc(n); (void) memset((VOID *)readfds, 0, n); /* Set timeout for select */ tv.tv_sec = timeout; tv.tv_usec = 0; ! while (--left) { ! FD_SET(fd, readfds); ! /* Make sure there is something to read (or timeout) */ ! while ((n = select(fd + 1, readfds, 0, 0, &tv)) == -1 && ! errno == EINTR) ! ; ! if (n == 0) ! return(NULL); /* timeout */ ! ! /* Read a character, exit loop on error, EOF or EOL */ ! n = read(fd, &c, 1); ! if (n != 1 || c == '\n') ! break; ! *cp++ = c; ! } ! free(readfds); ! } else { ! /* Keep reading until out of space, EOF, error, or newline */ ! while (--left && (n = read(fd, &c, 1)) == 1 && c != '\n') ! *cp++ = c; ! } *cp = '\0'; return(cp == buf ? NULL : buf);