changeset 12589:2fd54529e7d6

imapc: Call istream_opened() method if it's set for mail.
author Timo Sirainen <tss@iki.fi>
date Fri, 21 Jan 2011 01:05:00 +0200
parents 1b8fb4ff2bb3
children 9e471f267fb4
files src/lib-storage/index/imapc/imapc-search.c
diffstat 1 files changed, 18 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/imapc/imapc-search.c	Thu Jan 20 22:45:41 2011 +0200
+++ b/src/lib-storage/index/imapc/imapc-search.c	Fri Jan 21 01:05:00 2011 +0200
@@ -96,9 +96,10 @@
 {
 	struct mail *_mail = &imail->mail.mail;
 	struct istream *input;
-	size_t size = strlen(value);
+	size_t value_len = strlen(value);
+	uoff_t size;
 	const char *path;
-	int fd;
+	int fd, ret;
 
 	if (imail->data.stream != NULL)
 		return;
@@ -106,7 +107,7 @@
 	fd = create_temp_fd(_mail->box->storage->user, &path);
 	if (fd == -1)
 		return;
-	if (write_full(fd, value, size) < 0) {
+	if (write_full(fd, value, value_len) < 0) {
 		(void)close(fd);
 		return;
 	}
@@ -115,7 +116,21 @@
 	i_stream_set_name(imail->data.stream, path);
 	index_mail_set_read_buffer_size(_mail, imail->data.stream);
 
+	if (imail->mail.v.istream_opened != NULL) {
+		if (imail->mail.v.istream_opened(_mail,
+						 &imail->data.stream) < 0) {
+			i_stream_unref(&imail->data.stream);
+			return;
+		}
+	}
+
 	if (body) {
+		ret = i_stream_get_size(imail->data.stream, TRUE, &size);
+		if (ret < 0) {
+			i_stream_unref(&imail->data.stream);
+			return;
+		}
+		i_assert(ret != 0);
 		imail->data.physical_size = size;
 		imail->data.virtual_size = size;
 	}