]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Partial body fetches were buggy
authorTimo Sirainen <tss@iki.fi>
Tue, 18 Mar 2003 00:29:49 +0000 (02:29 +0200)
committerTimo Sirainen <tss@iki.fi>
Tue, 18 Mar 2003 00:29:49 +0000 (02:29 +0200)
--HG--
branch : HEAD

src/imap/imap-fetch-body-section.c

index 8a1ea8abd95cdf1b2cf5e2d1645a33b8595900a8..bb59af69f03f32dd4ce1f4554ee99602a8e92bc7 100644 (file)
@@ -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) {