From: Timo Sirainen Date: Thu, 13 Aug 2009 16:22:45 +0000 (-0400) Subject: Added i_stream_set_init_buffer_size(). X-Git-Tag: 2.0.alpha1~275 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7662010b03ffe5f2a6ecf4b4eb220d1c65efea76;p=thirdparty%2Fdovecot%2Fcore.git Added i_stream_set_init_buffer_size(). --HG-- branch : HEAD --- diff --git a/src/lib/istream-internal.h b/src/lib/istream-internal.h index 8ebad18b8e..1085b17fb2 100644 --- a/src/lib/istream-internal.h +++ b/src/lib/istream-internal.h @@ -28,7 +28,7 @@ struct istream_private { 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 --git a/src/lib/istream.c b/src/lib/istream.c index 1637c642d1..440cbe63d4 100644 --- a/src/lib/istream.c +++ b/src/lib/istream.c @@ -54,6 +54,11 @@ void i_stream_close(struct istream *stream) 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); @@ -418,8 +423,8 @@ void i_stream_grow_buffer(struct istream_private *stream, size_t bytes) 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); @@ -561,6 +566,8 @@ i_stream_create(struct istream_private *_stream, struct istream *parent, int fd) _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 --git a/src/lib/istream.h b/src/lib/istream.h index bac9ca74b1..9d8bdd1de1 100644 --- a/src/lib/istream.h +++ b/src/lib/istream.h @@ -55,6 +55,10 @@ void i_stream_close(struct istream *stream); 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);