struct istream_private istream;
size_t prev_stream_left, prev_skip;
+ bool have_explicit_max_buffer_size;
struct istream_chain chain;
};
i_stream_ref(stream);
if (chain->head == NULL && stream != NULL) {
- if (chain->stream->istream.max_buffer_size == 0) {
- chain->stream->istream.max_buffer_size =
- stream->real_stream->max_buffer_size;
- } else {
+ struct chain_istream *cstream = (struct chain_istream *)stream;
+
+ if (cstream->have_explicit_max_buffer_size) {
i_stream_set_max_buffer_size(stream,
chain->stream->istream.max_buffer_size);
}
struct chain_istream *cstream = (struct chain_istream *)stream;
struct istream_chain_link *link = cstream->chain.head;
+ cstream->have_explicit_max_buffer_size = TRUE;
cstream->istream.max_buffer_size = max_size;
while (link != NULL) {
if (link->stream != NULL)
struct istream_chain_link *link = cstream->chain.head;
struct istream *prev_input;
const unsigned char *data;
- size_t data_size, size, cur_data_pos;
+ size_t data_size, cur_data_pos;
i_assert(link != NULL && link->stream != NULL);
i_assert(link->stream->eof);
cstream->prev_stream_left = 0;
}
- /* we already verified that the data size is less than the
- maximum buffer size */
if (data_size > 0) {
- if (!i_stream_try_alloc(&cstream->istream, data_size, &size))
- i_unreached();
- i_assert(size >= data_size);
+ memcpy(i_stream_alloc(&cstream->istream, data_size),
+ data, data_size);
+ cstream->istream.pos += data_size;
+ cstream->prev_stream_left += data_size;
}
- memcpy(cstream->istream.w_buffer + cstream->istream.pos,
- data, data_size);
- cstream->istream.pos += data_size;
- cstream->prev_stream_left += data_size;
i_stream_skip(prev_input, i_stream_get_data_size(prev_input));
i_stream_unref(&prev_input);
struct chain_istream *cstream = (struct chain_istream *)stream;
struct istream_chain_link *link = cstream->chain.head;
const unsigned char *data;
- size_t size, data_size, cur_data_pos, new_pos;
+ size_t data_size, cur_data_pos, new_pos;
size_t new_bytes_count;
ssize_t ret;
new data with it. */
i_assert(data_size > cur_data_pos);
new_bytes_count = data_size - cur_data_pos;
- if (!i_stream_try_alloc(stream, new_bytes_count, &size)) {
- stream->buffer = stream->w_buffer;
- return -2;
- }
- stream->buffer = stream->w_buffer;
-
- if (new_bytes_count > size)
- new_bytes_count = size;
- memcpy(stream->w_buffer + stream->pos,
+ memcpy(i_stream_alloc(stream, new_bytes_count),
data + cur_data_pos, new_bytes_count);
+ stream->buffer = stream->w_buffer;
new_pos = stream->pos + new_bytes_count;
}
cstream = i_new(struct chain_istream, 1);
cstream->chain.stream = cstream;
- cstream->istream.max_buffer_size = 256;
cstream->istream.iostream.close = i_stream_chain_close;
cstream->istream.iostream.destroy = i_stream_chain_destroy;