| 1234567891011121314151617181920212223242526272829303132333435363738 |
- /* include readn */
- #include "unp.h"
- ssize_t /* Read "n" bytes from a descriptor. */
- readn(int fd, void *vptr, size_t n)
- {
- size_t nleft;
- ssize_t nread;
- char *ptr;
- ptr = vptr;
- nleft = n;
- while (nleft > 0) {
- if ( (nread = read(fd, ptr, nleft)) < 0) {
- if (errno == EINTR)
- nread = 0; /* and call read() again */
- else
- return(-1);
- } else if (nread == 0)
- break; /* EOF */
- nleft -= nread;
- ptr += nread;
- }
- return(n - nleft); /* return >= 0 */
- }
- /* end readn */
- ssize_t
- Readn(int fd, void *ptr, size_t nbytes)
- {
- ssize_t n;
- if ( (n = readn(fd, ptr, nbytes)) < 0)
- err_sys("readn error");
- return(n);
- }
|