Mercurial > dovecot > original-hg > dovecot-1.2
changeset 6558:4a1caf69ca14 HEAD
Added i_stream_get_buffer_space() to remove code duplication.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sat, 20 Oct 2007 19:12:32 +0300 |
parents | b56ed305a8bf |
children | 15a9ce2cc0ab |
files | src/lib/istream-crlf.c src/lib/istream-file.c src/lib/istream-internal.h src/lib/istream.c |
diffstat | 4 files changed, 27 insertions(+), 34 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib/istream-crlf.c Sat Oct 20 19:11:20 2007 +0300 +++ b/src/lib/istream-crlf.c Sat Oct 20 19:12:32 2007 +0300 @@ -49,19 +49,8 @@ data = i_stream_get_data(cstream->input, &size); i_assert(size != 0); - if (size > stream->buffer_size - stream->pos) { - if (stream->skip > 0) { - /* remove the unused bytes from beginning of buffer */ - i_stream_compress(stream); - } else if (stream->max_buffer_size == 0 || - stream->buffer_size < stream->max_buffer_size) { - /* buffer is full - grow it */ - i_stream_grow_buffer(stream, I_STREAM_MIN_SIZE); - } - - if (stream->pos == stream->buffer_size) - return -2; - } + if (!i_stream_get_buffer_space(stream, size, NULL)) + return -2; /* @UNSAFE */ dest = stream->pos;
--- a/src/lib/istream-file.c Sat Oct 20 19:11:20 2007 +0300 +++ b/src/lib/istream-file.c Sat Oct 20 19:12:32 2007 +0300 @@ -45,28 +45,9 @@ size_t size; ssize_t ret; - if (stream->istream.closed) - return -1; - stream->istream.stream_errno = 0; - - if (stream->pos == stream->buffer_size) { - if (stream->skip > 0) { - /* remove the unused bytes from beginning of buffer */ - i_stream_compress(stream); - } else if (stream->max_buffer_size == 0 || - stream->buffer_size < stream->max_buffer_size) { - /* buffer is full - grow it */ - i_stream_grow_buffer(stream, I_STREAM_MIN_SIZE); - } - - if (stream->pos == stream->buffer_size) - return -2; /* buffer full */ - } - - size = stream->buffer_size - stream->pos; - - ret = -1; + if (!i_stream_get_buffer_space(stream, 1, &size)) + return -2; do { if (fstream->file) {
--- a/src/lib/istream-internal.h Sat Oct 20 19:11:20 2007 +0300 +++ b/src/lib/istream-internal.h Sat Oct 20 19:12:32 2007 +0300 @@ -39,5 +39,7 @@ void i_stream_compress(struct istream_private *stream); void i_stream_grow_buffer(struct istream_private *stream, size_t bytes); +bool i_stream_get_buffer_space(struct istream_private *stream, + size_t wanted_size, size_t *size_r); #endif
--- a/src/lib/istream.c Sat Oct 20 19:11:20 2007 +0300 +++ b/src/lib/istream.c Sat Oct 20 19:12:32 2007 +0300 @@ -289,6 +289,27 @@ i_realloc(stream->w_buffer, old_size, stream->buffer_size); } +bool i_stream_get_buffer_space(struct istream_private *stream, + size_t wanted_size, size_t *size_r) +{ + i_assert(wanted_size > 0); + + if (wanted_size > stream->buffer_size - stream->pos) { + if (stream->skip > 0) { + /* remove the unused bytes from beginning of buffer */ + i_stream_compress(stream); + } else if (stream->max_buffer_size == 0 || + stream->buffer_size < stream->max_buffer_size) { + /* buffer is full - grow it */ + i_stream_grow_buffer(stream, I_STREAM_MIN_SIZE); + } + } + + if (size_r != NULL) + *size_r = stream->buffer_size - stream->pos; + return stream->pos != stream->buffer_size; +} + static void i_stream_default_set_max_buffer_size(struct iostream_private *stream, size_t max_size)