changeset 14979:e0a3812771fd

imap-parser: Allow calling imap_parser_read_args() multiple times with larger count parameter.
author Timo Sirainen <tss@iki.fi>
date Wed, 29 Aug 2012 21:04:45 +0300
parents f6a9e6d7e5bd
children c73086239699
files src/lib-imap/imap-parser.c
diffstat 1 files changed, 9 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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;
 	}