[dovecot-cvs] dovecot/src/lib-storage/index index-mail.c, 1.50,
1.51 index-mail.h, 1.21, 1.22 index-search.c, 1.92, 1.93
cras at dovecot.org
cras at dovecot.org
Sat Aug 28 13:32:19 EEST 2004
Update of /home/cvs/dovecot/src/lib-storage/index
In directory talvi:/tmp/cvs-serv21625/lib-storage/index
Modified Files:
index-mail.c index-mail.h index-search.c
Log Message:
Added mail.get_physical_size().
Index: index-mail.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/index/index-mail.c,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -d -r1.50 -r1.51
--- index-mail.c 23 Aug 2004 14:41:06 -0000 1.50
+++ index-mail.c 28 Aug 2004 10:32:17 -0000 1.51
@@ -21,6 +21,8 @@
sizeof(time_t), 0 },
{ "size.virtual", 0, MAIL_CACHE_FIELD_FIXED_SIZE,
sizeof(uoff_t), 0 },
+ { "size.physical", 0, MAIL_CACHE_FIELD_FIXED_SIZE,
+ sizeof(uoff_t), 0 },
{ "imap.body", 0, MAIL_CACHE_FIELD_STRING, 0, 0 },
{ "imap.bodystructure", 0, MAIL_CACHE_FIELD_STRING, 0, 0 },
{ "imap.envelope", 0, MAIL_CACHE_FIELD_STRING, 0, 0 },
@@ -125,6 +127,12 @@
return index_mail_get_cached_uoff_t(mail, MAIL_CACHE_VIRTUAL_FULL_SIZE);
}
+static uoff_t index_mail_get_cached_physical_size(struct index_mail *mail)
+{
+ return index_mail_get_cached_uoff_t(mail,
+ MAIL_CACHE_PHYSICAL_FULL_SIZE);
+}
+
time_t index_mail_get_cached_received_date(struct index_mail *mail)
{
time_t t;
@@ -251,36 +259,56 @@
}
data->body_size = data->parts->body_size;
data->body_size_set = TRUE;
- data->size = data->parts->header_size.virtual_size +
+ data->virtual_size = data->parts->header_size.virtual_size +
data->body_size.virtual_size;
+ data->physical_size = data->parts->header_size.physical_size +
+ data->body_size.physical_size;
}
return data->parts != NULL;
}
-uoff_t index_mail_get_size(struct mail *_mail)
+uoff_t index_mail_get_virtual_size(struct mail *_mail)
{
struct index_mail *mail = (struct index_mail *) _mail;
struct index_mail_data *data = &mail->data;
struct message_size hdr_size, body_size;
- if (data->size != (uoff_t)-1)
- return data->size;
+ if (data->virtual_size != (uoff_t)-1)
+ return data->virtual_size;
- data->size = index_mail_get_cached_virtual_size(mail);
- if (data->size != (uoff_t)-1)
- return data->size;
+ data->virtual_size = index_mail_get_cached_virtual_size(mail);
+ if (data->virtual_size != (uoff_t)-1)
+ return data->virtual_size;
if (get_cached_msgpart_sizes(mail))
- return data->size;
+ return data->virtual_size;
if (_mail->get_stream(_mail, &hdr_size, &body_size) == NULL)
return (uoff_t)-1;
mail_cache_add(mail->trans->cache_trans, mail->data.seq,
cache_fields[MAIL_CACHE_VIRTUAL_FULL_SIZE].idx,
- &data->size, sizeof(data->size));
- return data->size;
+ &data->virtual_size, sizeof(data->virtual_size));
+ return data->virtual_size;
+}
+
+uoff_t index_mail_get_physical_size(struct mail *_mail)
+{
+ struct index_mail *mail = (struct index_mail *) _mail;
+ struct index_mail_data *data = &mail->data;
+
+ if (data->physical_size != (uoff_t)-1)
+ return data->physical_size;
+
+ data->physical_size = index_mail_get_cached_physical_size(mail);
+ if (data->physical_size != (uoff_t)-1)
+ return data->physical_size;
+
+ if (get_cached_msgpart_sizes(mail))
+ return data->physical_size;
+
+ return (uoff_t)-1;
}
static void parse_bodystructure_part_header(struct message_part *part,
@@ -295,7 +323,6 @@
static void index_mail_parse_body(struct index_mail *mail, int need_parts)
{
struct index_mail_data *data = &mail->data;
- enum mail_cache_record_flag cache_flags;
enum mail_cache_decision_type decision;
buffer_t *buffer;
const void *buf_data;
@@ -398,8 +425,10 @@
}
if (data->hdr_size_set && data->body_size_set) {
- data->size = data->hdr_size.virtual_size +
+ data->virtual_size = data->hdr_size.virtual_size +
data->body_size.virtual_size;
+ data->physical_size = data->hdr_size.physical_size +
+ data->body_size.physical_size;
}
i_stream_seek(data->stream, 0);
@@ -615,7 +644,8 @@
data->rec = rec;
data->seq = seq;
- data->size = (uoff_t)-1;
+ data->virtual_size = (uoff_t)-1;
+ data->physical_size = (uoff_t)-1;
data->received_date = data->sent_date.time = (time_t)-1;
t_push();
@@ -633,8 +663,10 @@
data->bodystructure = index_mail_get_cached_string(mail,
MAIL_CACHE_BODYSTRUCTURE);
}
- if (mail->wanted_fields & MAIL_FETCH_SIZE)
- data->size = index_mail_get_cached_virtual_size(mail);
+ if (mail->wanted_fields & MAIL_FETCH_VIRTUAL_SIZE)
+ data->virtual_size = index_mail_get_cached_virtual_size(mail);
+ if (mail->wanted_fields & MAIL_FETCH_PHYSICAL_SIZE)
+ data->physical_size = index_mail_get_cached_physical_size(mail);
if (mail->wanted_fields & MAIL_FETCH_DATE)
get_cached_sent_date(mail, &data->sent_date);
Index: index-mail.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/index/index-mail.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- index-mail.h 23 Jul 2004 18:36:10 -0000 1.21
+++ index-mail.h 28 Aug 2004 10:32:17 -0000 1.22
@@ -11,6 +11,7 @@
MAIL_CACHE_SENT_DATE,
MAIL_CACHE_RECEIVED_DATE,
MAIL_CACHE_VIRTUAL_FULL_SIZE,
+ MAIL_CACHE_PHYSICAL_FULL_SIZE,
/* variable sized field */
MAIL_CACHE_BODY,
@@ -54,7 +55,7 @@
struct index_mail_data {
struct mail_full_flags flags;
time_t date, received_date;
- uoff_t size;
+ uoff_t virtual_size, physical_size;
struct mail_sent_date sent_date;
struct index_mail_line parse_line;
@@ -130,7 +131,8 @@
const struct message_part *index_mail_get_parts(struct mail *_mail);
time_t index_mail_get_received_date(struct mail *_mail);
time_t index_mail_get_date(struct mail *_mail, int *timezone);
-uoff_t index_mail_get_size(struct mail *_mail);
+uoff_t index_mail_get_virtual_size(struct mail *mail);
+uoff_t index_mail_get_physical_size(struct mail *mail);
struct istream *index_mail_init_stream(struct index_mail *mail,
struct message_size *hdr_size,
struct message_size *body_size);
Index: index-search.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/index/index-search.c,v
retrieving revision 1.92
retrieving revision 1.93
diff -u -d -r1.92 -r1.93
--- index-search.c 18 Jul 2004 02:25:07 -0000 1.92
+++ index-search.c 28 Aug 2004 10:32:17 -0000 1.93
@@ -236,7 +236,7 @@
/* sizes */
case SEARCH_SMALLER:
case SEARCH_LARGER:
- virtual_size = ctx->mail->get_size(ctx->mail);
+ virtual_size = ctx->mail->get_virtual_size(ctx->mail);
if (virtual_size == (uoff_t)-1)
return -1;
More information about the dovecot-cvs
mailing list