[dovecot-cvs] dovecot/src/lib-imap imap-message-cache.c,1.29,1.30
cras at procontrol.fi
cras at procontrol.fi
Fri Dec 27 15:05:55 EET 2002
- Previous message: [dovecot-cvs] dovecot/src/lib-imap imap-message-cache.c,1.28,1.29
- Next message: [dovecot-cvs] dovecot/src/lib-mail message-parser.c,1.27,1.28 message-send.c,1.12,1.13 message-size.c,1.9,1.10 message-size.h,1.6,1.7
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /home/cvs/dovecot/src/lib-imap
In directory danu:/tmp/cvs-serv6080/lib-imap
Modified Files:
imap-message-cache.c
Log Message:
Some bugfixes and speedups for partial fetch handling.
Index: imap-message-cache.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-imap/imap-message-cache.c,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -d -r1.29 -r1.30
--- imap-message-cache.c 27 Dec 2002 10:34:14 -0000 1.29
+++ imap-message-cache.c 27 Dec 2002 13:05:53 -0000 1.30
@@ -507,11 +507,14 @@
return TRUE;
}
-static void get_partial_size(IStream *stream,
- uoff_t virtual_skip, uoff_t max_virtual_size,
- MessageSize *partial, MessageSize *dest,
- int *cr_skipped)
+static uoff_t get_partial_size(IStream *stream,
+ uoff_t virtual_skip, uoff_t max_virtual_size,
+ MessageSize *partial, MessageSize *dest,
+ int *cr_skipped)
{
+ uoff_t physical_skip;
+ int last_cr;
+
/* see if we can use the existing partial */
if (partial->virtual_size > virtual_skip)
memset(partial, 0, sizeof(MessageSize));
@@ -521,23 +524,31 @@
}
message_skip_virtual(stream, virtual_skip, partial, cr_skipped);
+ physical_skip = partial->physical_size;
if (*cr_skipped && max_virtual_size != (uoff_t)-1) {
/* get_body_size() sees \n first, counting it as \r\n */
max_virtual_size++;
}
- message_get_body_size(stream, dest, max_virtual_size);
+ message_get_body_size(stream, dest, max_virtual_size, &last_cr);
if (*cr_skipped) {
/* extra virtual \r counted, drop it */
dest->virtual_size--;
+ }
+
+ message_size_add(partial, dest);
+ if (last_cr != 0) {
/* we'll see \n as first character next time, so make sure
we don't count the (virtual) \r twice. */
+ i_assert(partial->physical_size > 0);
+
+ if (last_cr == 1)
+ partial->physical_size--;
partial->virtual_size--;
}
-
- // FIXME: add dest to partial
+ return physical_skip;
}
int imap_msgcache_get_rfc822_partial(ImapMessageCache *cache,
@@ -596,11 +607,10 @@
if (!get_header)
virtual_skip += msg->hdr_size->virtual_size;
- get_partial_size(cache->open_stream, virtual_skip,
- max_virtual_size, msg->partial_size, size,
- cr_skipped);
-
- physical_skip = msg->partial_size->physical_size;
+ physical_skip =
+ get_partial_size(cache->open_stream, virtual_skip,
+ max_virtual_size, msg->partial_size,
+ size, cr_skipped);
}
/* seek to wanted position */
- Previous message: [dovecot-cvs] dovecot/src/lib-imap imap-message-cache.c,1.28,1.29
- Next message: [dovecot-cvs] dovecot/src/lib-mail message-parser.c,1.27,1.28 message-send.c,1.12,1.13 message-size.c,1.9,1.10 message-size.h,1.6,1.7
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the dovecot-cvs
mailing list