[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