const unsigned char *buffer;
unsigned char *w_buffer; /* may be NULL */
- size_t buffer_size, max_buffer_size;
+ size_t buffer_size, max_buffer_size, init_buffer_size;
size_t skip, pos;
struct istream *parent; /* for filter streams */
stream->stream_errno = ENOENT;
}
+void i_stream_set_init_buffer_size(struct istream *stream, size_t size)
+{
+ stream->real_stream->init_buffer_size = size;
+}
+
void i_stream_set_max_buffer_size(struct istream *stream, size_t max_size)
{
io_stream_set_max_buffer_size(&stream->real_stream->iostream, max_size);
old_size = stream->buffer_size;
stream->buffer_size = stream->pos + bytes;
- if (stream->buffer_size <= I_STREAM_MIN_SIZE)
- stream->buffer_size = I_STREAM_MIN_SIZE;
+ if (stream->buffer_size <= stream->init_buffer_size)
+ stream->buffer_size = stream->init_buffer_size;
else
stream->buffer_size = nearest_power(stream->buffer_size);
_stream->iostream.set_max_buffer_size =
i_stream_default_set_max_buffer_size;
}
+ if (_stream->init_buffer_size == 0)
+ _stream->init_buffer_size = I_STREAM_MIN_SIZE;
memset(&_stream->statbuf, 0, sizeof(_stream->statbuf));
_stream->statbuf.st_size = -1;
modified, flush any cached data. */
void i_stream_sync(struct istream *stream);
+/* Change the initial size for stream's input buffer. This basically just
+ grows the read buffer size from the default. This function has no effect
+ unless it's called before reading anything. */
+void i_stream_set_init_buffer_size(struct istream *stream, size_t size);
/* Change the maximum size for stream's input buffer to grow. Useful only
for buffered streams (currently only file). */
void i_stream_set_max_buffer_size(struct istream *stream, size_t max_size);