# HG changeset patch # User Timo Sirainen # Date 1250180565 14400 # Node ID 70593ef74836eb55fa5ebd820f2704fa7ef49532 # Parent 68c1d3ab515d73b050cb8c3c7b3a4247ad7a5e17 Added i_stream_set_init_buffer_size(). diff -r 68c1d3ab515d -r 70593ef74836 src/lib/istream-internal.h --- a/src/lib/istream-internal.h Wed Aug 12 18:12:59 2009 -0400 +++ b/src/lib/istream-internal.h Thu Aug 13 12:22:45 2009 -0400 @@ -27,7 +27,7 @@ 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 */ diff -r 68c1d3ab515d -r 70593ef74836 src/lib/istream.c --- a/src/lib/istream.c Wed Aug 12 18:12:59 2009 -0400 +++ b/src/lib/istream.c Thu Aug 13 12:22:45 2009 -0400 @@ -54,6 +54,11 @@ 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); @@ -399,8 +404,8 @@ 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); @@ -481,6 +486,8 @@ _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; diff -r 68c1d3ab515d -r 70593ef74836 src/lib/istream.h --- a/src/lib/istream.h Wed Aug 12 18:12:59 2009 -0400 +++ b/src/lib/istream.h Thu Aug 13 12:22:45 2009 -0400 @@ -55,6 +55,10 @@ 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);