diff options
Diffstat (limited to 'atomicio.c')
-rw-r--r-- | atomicio.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/atomicio.c b/atomicio.c index f854a06f5..cffa9fa7d 100644 --- a/atomicio.c +++ b/atomicio.c | |||
@@ -57,9 +57,11 @@ atomicio6(ssize_t (*f) (int, void *, size_t), int fd, void *_s, size_t n, | |||
57 | ssize_t res; | 57 | ssize_t res; |
58 | struct pollfd pfd; | 58 | struct pollfd pfd; |
59 | 59 | ||
60 | #ifndef BROKEN_READ_COMPARISON | ||
61 | pfd.fd = fd; | 60 | pfd.fd = fd; |
61 | #ifndef BROKEN_READ_COMPARISON | ||
62 | pfd.events = f == read ? POLLIN : POLLOUT; | 62 | pfd.events = f == read ? POLLIN : POLLOUT; |
63 | #else | ||
64 | pfd.events = POLLIN|POLLOUT; | ||
63 | #endif | 65 | #endif |
64 | while (n > pos) { | 66 | while (n > pos) { |
65 | res = (f) (fd, s + pos, n - pos); | 67 | res = (f) (fd, s + pos, n - pos); |
@@ -68,9 +70,7 @@ atomicio6(ssize_t (*f) (int, void *, size_t), int fd, void *_s, size_t n, | |||
68 | if (errno == EINTR) | 70 | if (errno == EINTR) |
69 | continue; | 71 | continue; |
70 | if (errno == EAGAIN || errno == EWOULDBLOCK) { | 72 | if (errno == EAGAIN || errno == EWOULDBLOCK) { |
71 | #ifndef BROKEN_READ_COMPARISON | ||
72 | (void)poll(&pfd, 1, -1); | 73 | (void)poll(&pfd, 1, -1); |
73 | #endif | ||
74 | continue; | 74 | continue; |
75 | } | 75 | } |
76 | return 0; | 76 | return 0; |
@@ -114,9 +114,11 @@ atomiciov6(ssize_t (*f) (int, const struct iovec *, int), int fd, | |||
114 | /* Make a copy of the iov array because we may modify it below */ | 114 | /* Make a copy of the iov array because we may modify it below */ |
115 | memcpy(iov, _iov, (size_t)iovcnt * sizeof(*_iov)); | 115 | memcpy(iov, _iov, (size_t)iovcnt * sizeof(*_iov)); |
116 | 116 | ||
117 | #ifndef BROKEN_READV_COMPARISON | ||
118 | pfd.fd = fd; | 117 | pfd.fd = fd; |
118 | #ifndef BROKEN_READV_COMPARISON | ||
119 | pfd.events = f == readv ? POLLIN : POLLOUT; | 119 | pfd.events = f == readv ? POLLIN : POLLOUT; |
120 | #else | ||
121 | pfd.events = POLLIN|POLLOUT; | ||
120 | #endif | 122 | #endif |
121 | for (; iovcnt > 0 && iov[0].iov_len > 0;) { | 123 | for (; iovcnt > 0 && iov[0].iov_len > 0;) { |
122 | res = (f) (fd, iov, iovcnt); | 124 | res = (f) (fd, iov, iovcnt); |
@@ -125,9 +127,7 @@ atomiciov6(ssize_t (*f) (int, const struct iovec *, int), int fd, | |||
125 | if (errno == EINTR) | 127 | if (errno == EINTR) |
126 | continue; | 128 | continue; |
127 | if (errno == EAGAIN || errno == EWOULDBLOCK) { | 129 | if (errno == EAGAIN || errno == EWOULDBLOCK) { |
128 | #ifndef BROKEN_READV_COMPARISON | ||
129 | (void)poll(&pfd, 1, -1); | 130 | (void)poll(&pfd, 1, -1); |
130 | #endif | ||
131 | continue; | 131 | continue; |
132 | } | 132 | } |
133 | return 0; | 133 | return 0; |