From: Timo Sirainen Date: Tue, 18 Mar 2003 00:29:49 +0000 (+0200) Subject: Partial body fetches were buggy X-Git-Tag: 1.1.alpha1~4800 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d76d32b8dbad576dc7db859eef3652280b631c9c;p=thirdparty%2Fdovecot%2Fcore.git Partial body fetches were buggy --HG-- branch : HEAD --- diff --git a/src/imap/imap-fetch-body-section.c b/src/imap/imap-fetch-body-section.c index 8a1ea8abd9..bb59af69f0 100644 --- a/src/imap/imap-fetch-body-section.c +++ b/src/imap/imap-fetch-body-section.c @@ -78,6 +78,7 @@ static int fetch_body(struct imap_fetch_context *ctx, struct istream *stream; const char *str; int skip_cr; + uoff_t size; off_t ret; stream = mail->get_stream(mail, &hdr_size, &body_size); @@ -87,8 +88,13 @@ static int fetch_body(struct imap_fetch_context *ctx, if (fetch_header) message_size_add(&body_size, &hdr_size); - str = t_strdup_printf("%s {%"PRIuUOFF_T"}\r\n", - ctx->prefix, body_size.virtual_size); + if (body->skip >= body_size.virtual_size) + size = 0; + else { + size = body_size.virtual_size - body->skip; + if (size > body->max_size) size = body->max_size; + } + str = t_strdup_printf("%s {%"PRIuUOFF_T"}\r\n", ctx->prefix, size); if (o_stream_send_str(ctx->output, str) < 0) return FALSE; @@ -96,6 +102,7 @@ static int fetch_body(struct imap_fetch_context *ctx, &partial, stream, fetch_header ? 0 : hdr_size.physical_size, body->skip); + ret = message_send(ctx->output, stream, &body_size, skip_cr, body->max_size); if (ret > 0) {