Mercurial > dovecot > original-hg > dovecot-1.2
changeset 131:4dd31e34e72f HEAD
Removed buffering, it's done by io_buffer_send() now.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 03 Sep 2002 23:15:45 +0300 |
parents | c2ec223e37ba |
children | 4dc5d31e2282 |
files | src/lib-mail/message-send.c |
diffstat | 1 files changed, 9 insertions(+), 30 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-mail/message-send.c Tue Sep 03 23:12:34 2002 +0300 +++ b/src/lib-mail/message-send.c Tue Sep 03 23:15:45 2002 +0300 @@ -5,13 +5,11 @@ #include "message-send.h" #include "message-size.h" -#define OUTPUT_BUFFER_SIZE 1024 - int message_send(IOBuffer *outbuf, IOBuffer *inbuf, MessageSize *msg_size, uoff_t virtual_skip, uoff_t max_virtual_size) { - unsigned char *msg, buf[OUTPUT_BUFFER_SIZE]; - unsigned int i, size, pos; + unsigned char *msg; + unsigned int i, size; int cr_skipped, add_cr; if (msg_size->physical_size == 0 || @@ -24,13 +22,13 @@ if (msg_size->physical_size == msg_size->virtual_size) { /* no need to kludge with CRs, we can use sendfile() */ io_buffer_skip(inbuf, virtual_skip); - return io_buffer_send_buf(outbuf, inbuf, max_virtual_size) > 0; + return io_buffer_send_iobuffer(outbuf, inbuf, + max_virtual_size) > 0; } message_skip_virtual(inbuf, virtual_skip, NULL, &cr_skipped); /* go through the message data and insert CRs where needed. */ - pos = 0; while (io_buffer_read_data(inbuf, &msg, &size, 0) >= 0) { add_cr = FALSE; for (i = 0; i < size; i++) { @@ -54,30 +52,14 @@ } } - if (pos + i >= OUTPUT_BUFFER_SIZE) { - /* buffer is full, flush it */ - if (io_buffer_send(outbuf, buf, pos) <= 0) - return FALSE; - pos = 0; - } - - if (i >= OUTPUT_BUFFER_SIZE) { - /* data larger than buffer, send it directly */ - if (io_buffer_send(outbuf, msg, i) <= 0) - return FALSE; + if (io_buffer_send(outbuf, msg, i) <= 0) + return FALSE; - i_assert(pos == 0); - } else { - /* put the data into buffer */ - memcpy(buf + pos, msg, i); - pos += i; - - i_assert(pos < OUTPUT_BUFFER_SIZE); + if (add_cr) { + if (io_buffer_send(outbuf, "\r", 1) <= 0) + return FALSE; } - if (add_cr) - buf[pos++] = '\r'; - /* see if we've reached the limit */ if (max_virtual_size == 0) break; @@ -86,8 +68,5 @@ io_buffer_skip(inbuf, i); } - if (io_buffer_send(outbuf, buf, pos) <= 0) - return FALSE; - return TRUE; }