# HG changeset patch # User Timo Sirainen # Date 1295564700 -7200 # Node ID 2fd54529e7d66c54db5f68a3efaf61cf0d07c94a # Parent 1b8fb4ff2bb3a79cc2f3e480a369ecc19969e078 imapc: Call istream_opened() method if it's set for mail. diff -r 1b8fb4ff2bb3 -r 2fd54529e7d6 src/lib-storage/index/imapc/imapc-search.c --- 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; }