[dovecot-cvs]
dovecot/src/lib-storage/index index-mail-headers.c,1.9,1.10
cras at procontrol.fi
cras at procontrol.fi
Wed Sep 10 06:07:07 EEST 2003
Update of /home/cvs/dovecot/src/lib-storage/index
In directory danu:/tmp/cvs-serv6353/lib-storage/index
Modified Files:
index-mail-headers.c
Log Message:
Headers were returned twice sometimes
Index: index-mail-headers.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/index/index-mail-headers.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- index-mail-headers.c 10 Sep 2003 01:50:26 -0000 1.9
+++ index-mail-headers.c 10 Sep 2003 02:07:05 -0000 1.10
@@ -470,6 +470,17 @@
return TRUE;
}
+static void trash_partial_headers(struct index_mail *mail)
+{
+ struct index_mail_data *data = &mail->data;
+
+ data->header_data_cached_partial = FALSE;
+ data->header_data_cached = data->header_data_cached_contiguous;
+
+ str_truncate(data->header_data, data->header_data_uncached_offset);
+ cached_headers_clear_values(mail);
+}
+
int index_mail_parse_headers(struct index_mail *mail)
{
struct mail_cache *cache = mail->ibox->index->cache;
@@ -489,13 +500,7 @@
if (!data->header_fully_parsed && index_mail_can_cache_headers(mail)) {
if (data->header_data_cached_partial) {
/* too difficult to handle efficiently, trash it */
- data->header_data_cached_partial = FALSE;
- data->header_data_cached =
- data->header_data_cached_contiguous;
-
- str_truncate(data->header_data,
- data->header_data_uncached_offset);
- cached_headers_clear_values(mail);
+ trash_partial_headers(mail);
}
/* add all cached headers to beginning of header_data */
@@ -610,12 +615,17 @@
i_assert(*minimum_fields != NULL);
- if (mail->data.header_data == NULL)
- mail->data.header_data = str_new(mail->pool, 4096);
+ if (data->header_data == NULL)
+ data->header_data = str_new(mail->pool, 4096);
idx = mail_find_wanted_headers(mail, minimum_fields);
if (idx >= 0) {
/* copy from cache to header_data */
+ if (data->header_data_cached_partial) {
+ /* Some headers may already partially be in
+ header_data, we don't want them twice */
+ trash_partial_headers(mail);
+ }
for (i = data->header_data_cached; i <= idx; i++) {
str = mail_cache_lookup_string_field(
mail->ibox->index->cache, data->rec,
@@ -626,11 +636,8 @@
str_append(data->header_data, str);
}
data->header_data_cached = idx+1;
- if (!data->header_data_cached_partial) {
- data->header_data_uncached_offset =
- str_len(data->header_data);
- data->header_data_cached_contiguous = idx+1;
- }
+ data->header_data_uncached_offset = str_len(data->header_data);
+ data->header_data_cached_contiguous = idx+1;
} else {
/* it's not cached yet - see if we have them parsed */
all_saved = TRUE;
More information about the dovecot-cvs
mailing list