dovecot-2.0: istream_next_line() optimization.

dovecot at dovecot.org dovecot at dovecot.org
Wed Sep 1 18:24:56 EEST 2010


details:   http://hg.dovecot.org/dovecot-2.0/rev/e9358064c45e
changeset: 12053:e9358064c45e
user:      Timo Sirainen <tss at iki.fi>
date:      Wed Sep 01 16:22:00 2010 +0100
description:
istream_next_line() optimization.
Based on patch by Len7hir

diffstat:

 src/lib/istream.c |  21 ++++++++-------------
 1 files changed, 8 insertions(+), 13 deletions(-)

diffs (39 lines):

diff -r e275c4f02501 -r e9358064c45e src/lib/istream.c
--- a/src/lib/istream.c	Wed Sep 01 16:21:30 2010 +0100
+++ b/src/lib/istream.c	Wed Sep 01 16:22:00 2010 +0100
@@ -336,8 +336,7 @@
 char *i_stream_next_line(struct istream *stream)
 {
 	struct istream_private *_stream = stream->real_stream;
-	char *ret_buf;
-        size_t i;
+	const unsigned char *pos;
 
 	if (_stream->skip >= _stream->pos) {
 		stream->stream_errno = 0;
@@ -350,18 +349,14 @@
 		return NULL;
 	}
 
-	/* @UNSAFE */
-	ret_buf = NULL;
-	for (i = _stream->skip; i < _stream->pos; i++) {
-		if (_stream->buffer[i] == 10) {
-			/* got it */
-			ret_buf = i_stream_next_line_finish(_stream, i);
-                        break;
-		}
+	pos = memchr(_stream->buffer + _stream->skip, '\n',
+		     _stream->pos - _stream->skip);
+	if (pos == NULL) {
+		return i_stream_next_line_finish(_stream,
+						 pos - _stream->buffer);
+	} else {
+		return i_stream_last_line(_stream);
 	}
-	if (ret_buf == NULL)
-		return i_stream_last_line(_stream);
-        return ret_buf;
 }
 
 char *i_stream_read_next_line(struct istream *stream)


More information about the dovecot-cvs mailing list