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;
 		}
 	}