changeset 9315:70593ef74836 HEAD

Added i_stream_set_init_buffer_size().
author Timo Sirainen <tss@iki.fi>
date Thu, 13 Aug 2009 12:22:45 -0400
parents 68c1d3ab515d
children 2fd8d3a2bd52
files src/lib/istream-internal.h src/lib/istream.c src/lib/istream.h
diffstat 3 files changed, 14 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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 */
--- 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;
--- 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);