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)