[dovecot-cvs] dovecot/src/lib ostream-crlf.c,1.4,1.5

cras at dovecot.org cras at dovecot.org
Mon Aug 23 07:36:42 EEST 2004


Update of /home/cvs/dovecot/src/lib
In directory talvi:/tmp/cvs-serv1719

Modified Files:
	ostream-crlf.c 
Log Message:
fixes



Index: ostream-crlf.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib/ostream-crlf.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- ostream-crlf.c	23 Aug 2004 03:58:08 -0000	1.4
+++ ostream-crlf.c	23 Aug 2004 04:36:40 -0000	1.5
@@ -81,22 +81,21 @@
 	   size_t iov_count, const char *diff, ssize_t *total_r)
 {
 	ssize_t ret;
-	size_t pos;
+	size_t i, pos;
 
 	ret = o_stream_sendv(cstream->output, iov, iov_count);
 	if (ret > 0) {
 		pos = (size_t)ret - 1;
-		while (pos >= iov->iov_len) {
-			*total_r += iov->iov_len + *diff;
-			pos -= iov->iov_len;
-			iov++;
-			diff++;
+		for (i = 0; i < iov_count && pos >= iov[i].iov_len; i++) {
+			*total_r += iov[i].iov_len + diff[i];
+			pos -= iov[i].iov_len;
 		}
 
-		cstream->last_cr = *((const char *)iov->iov_base + pos) == '\r';
+		cstream->last_cr =
+			*((const char *)iov[i].iov_base + pos) == '\r';
 
-		if (pos + 1 == iov->iov_len)
-			*total_r += iov->iov_len + *diff;
+		if (pos + 1 == iov[i].iov_len)
+			*total_r += iov[i].iov_len + diff[i];
 		else
 			*total_r += pos;
 	}
@@ -198,16 +197,14 @@
 	 size_t iov_count, const char *diff, ssize_t *total_r)
 {
 	ssize_t ret;
-	size_t left;
+	size_t i, left;
 
 	ret = o_stream_sendv(cstream->output, iov, iov_count);
 	if (ret >= 0) {
 		left = (size_t)ret;
-		while (left >= iov->iov_len) {
-			*total_r += iov->iov_len + *diff;
-			left -= iov->iov_len;
-			iov++;
-			diff++;
+		for (i = 0; i < iov_count && left >= iov[i].iov_len; i++) {
+			*total_r += iov[i].iov_len + diff[i];
+			left -= iov[i].iov_len;
 		}
 		*total_r += left;
 	}
@@ -281,7 +278,7 @@
 
 			start = i = next;
 
-			if (new_iov_count == IOVBUF_COUNT) {
+			if (new_iov_count >= IOVBUF_COUNT-1) {
 				ret = sendv_lf(cstream, iov_buf->data,
 					       new_iov_count, diff_buf->data,
 					       &total);



More information about the dovecot-cvs mailing list