}
offset = stream->istream.v_offset + (stream->pos - stream->skip);
- do {
- if (fstream->file) {
- ret = pread(stream->fd, stream->w_buffer + stream->pos,
- size, offset);
- } else if (fstream->seen_eof) {
- /* don't try to read() again. EOF from keyboard (^D)
- requires this to work right. */
- ret = 0;
- } else {
- ret = read(stream->fd, stream->w_buffer + stream->pos,
- size);
- }
- } while (unlikely(ret < 0 && errno == EINTR &&
- stream->istream.blocking));
+
+ if (fstream->file) {
+ ret = pread(stream->fd, stream->w_buffer + stream->pos,
+ size, offset);
+ } else if (fstream->seen_eof) {
+ /* don't try to read() again. EOF from keyboard (^D)
+ requires this to work right. */
+ ret = 0;
+ } else {
+ ret = read(stream->fd, stream->w_buffer + stream->pos,
+ size);
+ }
if (ret == 0) {
/* EOF */
}
if (unlikely(ret < 0)) {
- if (errno == EINTR || errno == EAGAIN) {
- i_assert(!stream->istream.blocking);
+ if ((errno == EINTR || errno == EAGAIN) &&
+ !stream->istream.blocking) {
ret = 0;
} else {
i_assert(errno != 0);
if (!i_stream_try_alloc(stream, 1, &size))
return -2;
- do {
- ret = fd_read(stream->fd,
- stream->w_buffer + stream->pos, size,
- &ustream->read_fd);
- } while (unlikely(ret < 0 && errno == EINTR &&
- stream->istream.blocking));
+ ret = fd_read(stream->fd, stream->w_buffer + stream->pos, size,
+ &ustream->read_fd);
if (ustream->read_fd != -1)
ustream->next_read_fd = FALSE;
}
if (unlikely(ret < 0)) {
- if (errno == EINTR || errno == EAGAIN) {
- i_assert(!stream->istream.blocking);
+ if ((errno == EINTR || errno == EAGAIN) &&
+ !stream->istream.blocking) {
return 0;
} else {
i_assert(errno != 0);