dovecot: Added i_stream_get_buffer_space() to remove code duplic...
dovecot at dovecot.org
dovecot at dovecot.org
Sat Oct 20 19:17:05 EEST 2007
details: http://hg.dovecot.org/dovecot/rev/4a1caf69ca14
changeset: 6558:4a1caf69ca14
user: Timo Sirainen <tss at iki.fi>
date: Sat Oct 20 19:12:32 2007 +0300
description:
Added i_stream_get_buffer_space() to remove code duplication.
diffstat:
4 files changed, 27 insertions(+), 34 deletions(-)
src/lib/istream-crlf.c | 15 ++-------------
src/lib/istream-file.c | 23 ++---------------------
src/lib/istream-internal.h | 2 ++
src/lib/istream.c | 21 +++++++++++++++++++++
diffs (101 lines):
diff -r b56ed305a8bf -r 4a1caf69ca14 src/lib/istream-crlf.c
--- 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 @@ static ssize_t i_stream_crlf_read(struct
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;
diff -r b56ed305a8bf -r 4a1caf69ca14 src/lib/istream-file.c
--- 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 @@ static ssize_t i_stream_file_read(struct
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) {
diff -r b56ed305a8bf -r 4a1caf69ca14 src/lib/istream-internal.h
--- 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 @@ i_stream_create(struct istream_private *
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
diff -r b56ed305a8bf -r 4a1caf69ca14 src/lib/istream.c
--- 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 @@ void i_stream_grow_buffer(struct istream
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)
More information about the dovecot-cvs
mailing list