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