unsigned int send_last_lf:1;
};
-static void i_stream_dot_destroy(struct iostream_private *stream)
-{
- struct dot_istream *dstream = (struct dot_istream *)stream;
-
- i_free(dstream->istream.w_buffer);
- i_stream_unref(&dstream->istream.parent);
-}
-
-static void
-i_stream_dot_set_max_buffer_size(struct iostream_private *stream,
- size_t max_size)
-{
- struct dot_istream *dstream = (struct dot_istream *)stream;
-
- dstream->istream.max_buffer_size = max_size;
- i_stream_set_max_buffer_size(dstream->istream.parent, max_size);
-}
-
static int i_stream_dot_read_some(struct dot_istream *dstream)
{
struct istream_private *stream = &dstream->istream;
{
struct dot_istream *dstream;
- i_stream_ref(input);
-
dstream = i_new(struct dot_istream, 1);
dstream->istream.max_buffer_size = input->real_stream->max_buffer_size;
- dstream->istream.iostream.destroy = i_stream_dot_destroy;
- dstream->istream.iostream.set_max_buffer_size =
- i_stream_dot_set_max_buffer_size;
-
dstream->istream.read = i_stream_dot_read;
dstream->istream.seek = i_stream_dot_seek;
dstream->istream.stat = i_stream_dot_stat;
pool_unref(&mstream->pool);
}
-static void
-i_stream_header_filter_set_max_buffer_size(struct iostream_private *stream,
- size_t max_size)
-{
- struct header_filter_istream *mstream =
- (struct header_filter_istream *)stream;
-
- mstream->istream.max_buffer_size = max_size;
- i_stream_set_max_buffer_size(mstream->istream.parent, max_size);
-}
-
static ssize_t
read_mixed(struct header_filter_istream *mstream, size_t body_highwater_size)
{
mstream->add_missing_eoh = (flags & HEADER_FILTER_ADD_MISSING_EOH) != 0;
mstream->istream.iostream.destroy = i_stream_header_filter_destroy;
- mstream->istream.iostream.set_max_buffer_size =
- i_stream_header_filter_set_max_buffer_size;
-
mstream->istream.read = i_stream_header_filter_read;
mstream->istream.seek = i_stream_header_filter_seek;
mstream->istream.sync = i_stream_header_filter_sync;
mstream->istream.istream.blocking = input->blocking;
mstream->istream.istream.seekable = input->seekable;
- i_stream_ref(input);
return i_stream_create(&mstream->istream, input, -1);
}
i_stream_unref(&mstream->istream.parent);
}
-static void
-i_stream_mail_stats_set_max_buffer_size(struct iostream_private *stream,
- size_t max_size)
-{
- struct mail_stats_istream *mstream =
- (struct mail_stats_istream *)stream;
-
- mstream->istream.max_buffer_size = max_size;
- i_stream_set_max_buffer_size(mstream->istream.parent, max_size);
-}
-
static ssize_t
i_stream_mail_stats_read_mail_stats(struct istream_private *stream)
{
mstream->istream.max_buffer_size = input->real_stream->max_buffer_size;
mstream->istream.iostream.destroy = i_stream_mail_stats_destroy;
- mstream->istream.iostream.set_max_buffer_size =
- i_stream_mail_stats_set_max_buffer_size;
-
mstream->istream.parent = input;
mstream->istream.read = i_stream_mail_stats_read_mail_stats;
mstream->istream.seek = i_stream_mail_stats_seek;
i_stream_unref(&rstream->istream.parent);
}
-static void
-i_stream_raw_mbox_set_max_buffer_size(struct iostream_private *stream,
- size_t max_size)
-{
- struct raw_mbox_istream *rstream = (struct raw_mbox_istream *)stream;
-
- rstream->istream.max_buffer_size = max_size;
- i_stream_set_max_buffer_size(rstream->istream.parent, max_size);
-}
-
static int mbox_read_from_line(struct raw_mbox_istream *rstream)
{
const unsigned char *buf, *p;
rstream->next_received_time = (time_t)-1;
rstream->istream.iostream.destroy = i_stream_raw_mbox_destroy;
- rstream->istream.iostream.set_max_buffer_size =
- i_stream_raw_mbox_set_max_buffer_size;
-
rstream->istream.max_buffer_size = input->real_stream->max_buffer_size;
rstream->istream.read = i_stream_raw_mbox_read;
rstream->istream.seek = i_stream_raw_mbox_seek;
rstream->istream.istream.blocking = input->blocking;
rstream->istream.istream.seekable = input->seekable;
- i_stream_ref(input);
return i_stream_create(&rstream->istream, input, -1);
}
unsigned int last_cr:1;
};
-static void i_stream_crlf_destroy(struct iostream_private *stream)
-{
- struct crlf_istream *cstream = (struct crlf_istream *)stream;
-
- i_free(cstream->istream.w_buffer);
- i_stream_unref(&cstream->istream.parent);
-}
-
-static void
-i_stream_crlf_set_max_buffer_size(struct iostream_private *stream,
- size_t max_size)
-{
- struct crlf_istream *cstream = (struct crlf_istream *)stream;
-
- cstream->istream.max_buffer_size = max_size;
- i_stream_set_max_buffer_size(cstream->istream.parent, max_size);
-}
-
static int i_stream_crlf_read_common(struct crlf_istream *cstream)
{
struct istream_private *stream = &cstream->istream;
{
struct crlf_istream *cstream;
- i_stream_ref(input);
-
cstream = i_new(struct crlf_istream, 1);
cstream->istream.max_buffer_size = input->real_stream->max_buffer_size;
- cstream->istream.iostream.destroy = i_stream_crlf_destroy;
- cstream->istream.iostream.set_max_buffer_size =
- i_stream_crlf_set_max_buffer_size;
-
cstream->istream.read = crlf ? i_stream_crlf_read_crlf :
i_stream_crlf_read_lf;
cstream->istream.seek = i_stream_crlf_seek;
_stream->fd = -1;
}
-static void i_stream_file_destroy(struct iostream_private *stream)
-{
- struct istream_private *_stream = (struct istream_private *)stream;
-
- i_free(_stream->w_buffer);
-}
-
static ssize_t i_stream_file_read(struct istream_private *stream)
{
struct file_istream *fstream = (struct file_istream *) stream;
fstream->autoclose_fd = autoclose_fd;
fstream->istream.iostream.close = i_stream_file_close;
- fstream->istream.iostream.destroy = i_stream_file_destroy;
-
fstream->istream.max_buffer_size = max_buffer_size;
fstream->istream.read = i_stream_file_read;
fstream->istream.seek = i_stream_file_seek;
uoff_t v_size;
};
-static void i_stream_limit_destroy(struct iostream_private *stream)
-{
- struct limit_istream *lstream = (struct limit_istream *) stream;
- uoff_t v_offset;
-
- v_offset = lstream->istream.parent_start_offset +
- lstream->istream.istream.v_offset;
- if (lstream->istream.parent->seekable ||
- v_offset > lstream->istream.parent->v_offset) {
- /* get to same position in parent stream */
- i_stream_seek(lstream->istream.parent, v_offset);
- }
- i_stream_unref(&lstream->istream.parent);
-}
-
-static void
-i_stream_limit_set_max_buffer_size(struct iostream_private *stream,
- size_t max_size)
-{
- struct limit_istream *lstream = (struct limit_istream *) stream;
-
- lstream->istream.max_buffer_size = max_size;
- i_stream_set_max_buffer_size(lstream->istream.parent, max_size);
-}
-
static ssize_t i_stream_limit_read(struct istream_private *stream)
{
struct limit_istream *lstream = (struct limit_istream *) stream;
{
struct limit_istream *lstream;
- i_stream_ref(input);
-
lstream = i_new(struct limit_istream, 1);
lstream->v_size = v_size;
lstream->istream.max_buffer_size = input->real_stream->max_buffer_size;
- lstream->istream.iostream.destroy = i_stream_limit_destroy;
- lstream->istream.iostream.set_max_buffer_size =
- i_stream_limit_set_max_buffer_size;
-
lstream->istream.parent = input;
lstream->istream.read = i_stream_limit_read;
lstream->istream.seek = i_stream_limit_seek;
struct istream_private *_stream = (struct istream_private *)stream;
_stream->max_buffer_size = max_size;
+ if (_stream->parent != NULL)
+ i_stream_set_max_buffer_size(_stream->parent, max_size);
+}
+
+static void i_stream_default_destroy(struct iostream_private *stream)
+{
+ struct istream_private *_stream = (struct istream_private *)stream;
+ uoff_t v_offset;
+
+ i_free(_stream->w_buffer);
+ if (_stream->parent != NULL) {
+ v_offset = _stream->parent_start_offset +
+ _stream->istream.v_offset;
+ if (_stream->parent->seekable ||
+ v_offset > _stream->parent->v_offset) {
+ /* get to same position in parent stream */
+ i_stream_seek(_stream->parent, v_offset);
+ }
+ i_stream_unref(&_stream->parent);
+ }
}
static const struct stat *
_stream->parent_start_offset = parent->v_offset;
_stream->abs_start_offset = parent->v_offset +
parent->real_stream->abs_start_offset;
+ i_stream_ref(parent);
}
_stream->istream.real_stream = _stream;
+ if (_stream->iostream.destroy == NULL)
+ _stream->iostream.destroy = i_stream_default_destroy;
if (_stream->stat == NULL)
_stream->stat = i_stream_default_stat;
if (_stream->get_size == NULL)
}
}
-static void i_stream_zlib_destroy(struct iostream_private *stream ATTR_UNUSED)
-{
- struct istream_private *_stream = (struct istream_private *)stream;
-
- i_free(_stream->w_buffer);
-}
-
static ssize_t i_stream_zlib_read(struct istream_private *stream)
{
struct zlib_istream *zstream = (struct zlib_istream *)stream;
zstream->cached_size = (uoff_t)-1;
zstream->istream.iostream.close = i_stream_zlib_close;
- zstream->istream.iostream.destroy = i_stream_zlib_destroy;
-
zstream->istream.max_buffer_size = DEFAULT_MAX_BUFFER_SIZE;
zstream->istream.read = i_stream_zlib_read;
zstream->istream.seek = i_stream_zlib_seek;