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