dovecot-2.2: imap-parser: Allow calling imap_parser_read_args() ...

dovecot at dovecot.org dovecot at dovecot.org
Wed Aug 29 21:08:20 EEST 2012


details:   http://hg.dovecot.org/dovecot-2.2/rev/e0a3812771fd
changeset: 14979:e0a3812771fd
user:      Timo Sirainen <tss at iki.fi>
date:      Wed Aug 29 21:04:45 2012 +0300
description:
imap-parser: Allow calling imap_parser_read_args() multiple times with larger count parameter.

diffstat:

 src/lib-imap/imap-parser.c |  10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletions(-)

diffs (44 lines):

diff -r f6a9e6d7e5bd -r e0a3812771fd src/lib-imap/imap-parser.c
--- a/src/lib-imap/imap-parser.c	Wed Aug 29 21:04:09 2012 +0300
+++ b/src/lib-imap/imap-parser.c	Wed Aug 29 21:04:45 2012 +0300
@@ -49,6 +49,7 @@
 	unsigned int literal8:1;
 	unsigned int literal_size_return:1;
 	unsigned int eol:1;
+	unsigned int args_added_extra_eol:1;
 	unsigned int fatal_error:1;
 };
 
@@ -110,6 +111,7 @@
 
 	parser->literal_skip_crlf = FALSE;
 	parser->eol = FALSE;
+	parser->args_added_extra_eol = FALSE;
 	parser->literal_size_return = FALSE;
 }
 
@@ -624,6 +626,11 @@
 	arg = array_append_space(&parser->root_list);
 	arg->type = IMAP_ARG_EOL;
 
+	if (!parser->eol)
+		parser->args_added_extra_eol = TRUE;
+	else
+		i_assert(!parser->literal_size_return);
+
 	*args_r = array_get(&parser->root_list, &count);
 	return ret;
 }
@@ -634,10 +641,11 @@
 {
 	parser->flags = flags;
 
-	if (parser->literal_size_return) {
+	if (parser->args_added_extra_eol) {
 		/* delete EOL */
 		array_delete(&parser->root_list,
 			     array_count(&parser->root_list)-1, 1);
+		parser->args_added_extra_eol = FALSE;
 		parser->literal_size_return = FALSE;
 	}
 


More information about the dovecot-cvs mailing list