]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Added i_stream_set_init_buffer_size().
authorTimo Sirainen <tss@iki.fi>
Thu, 13 Aug 2009 16:22:45 +0000 (12:22 -0400)
committerTimo Sirainen <tss@iki.fi>
Thu, 13 Aug 2009 16:22:45 +0000 (12:22 -0400)
--HG--
branch : HEAD

src/lib/istream-internal.h
src/lib/istream.c
src/lib/istream.h

index 8ebad18b8e672aed3e8e8df56a77f45dd4d0f140..1085b17fb2fe73bd88cb99d38f51c39eae9cee02 100644 (file)
@@ -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 */
index 1637c642d1702c62daf87febdeaa2581df617dfb..440cbe63d407075482818b0f9e4c23ac6802e9b0 100644 (file)
@@ -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;
index bac9ca74b11b54e83cbd9ae67b36a4676f77455c..9d8bdd1de154c84459ea0c6e77dc28281a9b0bd0 100644 (file)
@@ -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);