Mercurial > dovecot > core-2.2
changeset 2471:4fa0f02369b1 HEAD
o_stream_sendv() returned wrong value if sending more than UIO_MAXIOV
iovecs.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 23 Aug 2004 07:47:58 +0300 |
parents | aabebe4dc5bf |
children | 90e72abe74bf |
files | src/lib/ostream-file.c |
diffstat | 1 files changed, 5 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib/ostream-file.c Mon Aug 23 07:36:40 2004 +0300 +++ b/src/lib/ostream-file.c Mon Aug 23 07:47:58 2004 +0300 @@ -133,12 +133,13 @@ const struct const_iovec *iov, int iov_size) { ssize_t ret; - size_t size; + size_t size, sent; int i; if (iov_size == 1) ret = write(fstream->fd, iov->iov_base, iov->iov_len); else { + sent = 0; while (iov_size > UIO_MAXIOV) { size = 0; for (i = 0; i < UIO_MAXIOV; i++) @@ -149,6 +150,7 @@ if (ret != (ssize_t)size) break; + sent += ret; iov += UIO_MAXIOV; iov_size -= UIO_MAXIOV; } @@ -156,6 +158,8 @@ if (iov_size <= UIO_MAXIOV) { ret = writev(fstream->fd, (const struct iovec *)iov, iov_size); + if (ret > 0) + ret += sent; } }