changeset 5086:68076557b05d HEAD

cleanup
author Timo Sirainen <tss@iki.fi>
date Fri, 26 Jan 2007 02:42:29 +0200
parents dd4c4a0c0aae
children 37e3fac0aa2f
files src/lib/istream-seekable.c
diffstat 1 files changed, 10 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib/istream-seekable.c	Fri Jan 26 02:31:36 2007 +0200
+++ b/src/lib/istream-seekable.c	Fri Jan 26 02:42:29 2007 +0200
@@ -269,6 +269,8 @@
 	ssize_t ret;
 
 	if (sstream->buffer != NULL) {
+		/* we want to know the full size of the file, so read until
+		   we're finished */
 		old_offset = stream->istream.v_offset;
 		do {
 			i_stream_skip(&stream->istream, stream->skip);
@@ -281,11 +283,16 @@
 		i_stream_seek(&stream->istream, old_offset);
 	}
 
-	if (sstream->fd_input != NULL)
+	if (sstream->fd_input != NULL) {
+		/* using a file backed buffer, we can use real fstat() */
 		return i_stream_stat(sstream->fd_input, exact);
+	} else {
+		/* buffer is completely in memory */
+		i_assert(sstream->buffer != NULL);
 
-	stream->statbuf.st_size = sstream->buffer->used;
-	return &stream->statbuf;
+		stream->statbuf.st_size = sstream->buffer->used;
+		return &stream->statbuf;
+	}
 }
 
 struct istream *