[dovecot-cvs] dovecot/src/lib-mail message-send.c,1.15,1.16 message-send.h,1.8,1.9

cras at procontrol.fi cras at procontrol.fi
Tue Jan 21 07:37:37 EET 2003


Update of /home/cvs/dovecot/src/lib-mail
In directory danu:/tmp/cvs-serv21976/lib-mail

Modified Files:
	message-send.c message-send.h 
Log Message:
Partial fetches are working fast again - faster than ever actually.



Index: message-send.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-mail/message-send.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- message-send.c	20 Jan 2003 14:52:51 -0000	1.15
+++ message-send.c	21 Jan 2003 05:37:35 -0000	1.16
@@ -7,18 +7,19 @@
 #include "message-send.h"
 #include "message-size.h"
 
-int message_send(struct ostream *output, struct istream *input,
-		 const struct message_size *msg_size,
-		 uoff_t virtual_skip, uoff_t max_virtual_size)
+off_t message_send(struct ostream *output, struct istream *input,
+		   const struct message_size *msg_size,
+		   uoff_t virtual_skip, uoff_t max_virtual_size)
 {
 	const unsigned char *msg;
 	uoff_t old_limit, limit;
 	size_t i, size;
-	int cr_skipped, add_cr, ret;
+	off_t ret;
+	int cr_skipped, add_cr;
 
 	if (msg_size->physical_size == 0 ||
 	    virtual_skip >= msg_size->virtual_size)
-		return TRUE;
+		return 0;
 
 	if (max_virtual_size > msg_size->virtual_size - virtual_skip)
 		max_virtual_size = msg_size->virtual_size - virtual_skip;
@@ -39,6 +40,7 @@
 	message_skip_virtual(input, virtual_skip, NULL, &cr_skipped);
 
 	/* go through the message data and insert CRs where needed.  */
+	ret = 0;
 	while (max_virtual_size > 0 &&
 	       i_stream_read_data(input, &msg, &size, 0) > 0) {
 		add_cr = FALSE;
@@ -55,12 +57,14 @@
 			}
 		}
 
+		ret += i;
 		if (o_stream_send(output, msg, i) < 0)
-			return FALSE;
+			return -1;
 
 		if (add_cr) {
+			ret++;
 			if (o_stream_send(output, "\r", 1) < 0)
-				return FALSE;
+				return -1;
 			cr_skipped = TRUE;
 		} else {
 			cr_skipped = i > 0 && msg[i-1] == '\r';
@@ -69,5 +73,5 @@
 		i_stream_skip(input, i);
 	}
 
-	return TRUE;
+	return ret;
 }

Index: message-send.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib-mail/message-send.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- message-send.h	20 Jan 2003 14:52:51 -0000	1.8
+++ message-send.h	21 Jan 2003 05:37:35 -0000	1.9
@@ -6,9 +6,10 @@
 /* Send message to client inserting CRs if needed. Only max_virtual_size
    bytes if sent (relative to virtual_skip), if you want it unlimited,
    use (uoff_t)-1. Remember that if input begins with LF, CR is inserted
-   before it unless virtual_skip = 1. Returns TRUE if successful. */
-int message_send(struct ostream *output, struct istream *input,
-		 const struct message_size *msg_size,
-		 uoff_t virtual_skip, uoff_t max_virtual_size);
+   before it unless virtual_skip = 1. Returns number of bytes sent, or -1
+   if error. */
+off_t message_send(struct ostream *output, struct istream *input,
+		   const struct message_size *msg_size,
+		   uoff_t virtual_skip, uoff_t max_virtual_size);
 
 #endif




More information about the dovecot-cvs mailing list