[dovecot-cvs] dovecot/src/lib-imap imap-parser.c,1.34,1.35 imap-parser.h,1.10,1.11

cras at procontrol.fi cras at procontrol.fi
Thu Jan 23 05:17:12 EET 2003


Update of /home/cvs/dovecot/src/lib-imap
In directory danu:/tmp/cvs-serv2821/src/lib-imap

Modified Files:
	imap-parser.c imap-parser.h 
Log Message:
Support for LITERAL+ extension.



Index: imap-parser.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-imap/imap-parser.c,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -d -r1.34 -r1.35
--- imap-parser.c	22 Jan 2003 18:41:29 -0000	1.34
+++ imap-parser.c	23 Jan 2003 03:17:10 -0000	1.35
@@ -42,6 +42,7 @@
 	const char *error;
 
 	unsigned int literal_skip_crlf:1;
+	unsigned int literal_nonsync:1;
 	unsigned int inside_bracket:1;
 	unsigned int eol:1;
 };
@@ -233,7 +234,9 @@
 			arg->_data.str = p_strndup(parser->pool, data, size);
 		} else {
 			/* save literal size */
-			arg->type = IMAP_ARG_LITERAL_SIZE;
+			arg->type = parser->literal_nonsync ?
+				IMAP_ARG_LITERAL_SIZE_NONSYNC :
+				IMAP_ARG_LITERAL_SIZE;
 			arg->_data.literal_size = parser->literal_size;
 		}
 		break;
@@ -334,7 +337,7 @@
 			return FALSE;
 		}
 
-		if (parser->output != NULL) {
+		if (parser->output != NULL && !parser->literal_nonsync) {
 			o_stream_send(parser->output, "+ OK\r\n", 6);
 			o_stream_flush(parser->output);
 		}
@@ -360,6 +363,16 @@
 			return imap_parser_literal_end(parser);
 		}
 
+		if (parser->literal_nonsync) {
+			parser->error = "Expecting '}' after '+'";
+			return FALSE;
+		}
+
+		if (data[i] == '+') {
+			parser->literal_nonsync = TRUE;
+			continue;
+		}
+
 		if (data[i] < '0' || data[i] > '9') {
 			parser->error = "Invalid literal size";
 			return FALSE;
@@ -455,6 +468,7 @@
 		case '{':
 			parser->cur_type = ARG_PARSE_LITERAL;
 			parser->literal_size = 0;
+			parser->literal_nonsync = FALSE;
 			break;
 		case '(':
 			imap_parser_open_list(parser);

Index: imap-parser.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib-imap/imap-parser.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- imap-parser.h	8 Jan 2003 20:47:38 -0000	1.10
+++ imap-parser.h	23 Jan 2003 03:17:10 -0000	1.11
@@ -16,6 +16,7 @@
 	IMAP_ARG_ATOM,
 	IMAP_ARG_STRING,
 	IMAP_ARG_LITERAL_SIZE,
+	IMAP_ARG_LITERAL_SIZE_NONSYNC,
 	IMAP_ARG_LIST,
 
 	IMAP_ARG_EOL /* end of argument list */
@@ -40,7 +41,8 @@
 	 (arg)->_data.str : _imap_arg_str_error(arg))
 
 #define IMAP_ARG_LITERAL_SIZE(arg) \
-	((arg)->type == IMAP_ARG_LITERAL_SIZE ? \
+	(((arg)->type == IMAP_ARG_LITERAL_SIZE || \
+	 (arg)->type == IMAP_ARG_LITERAL_SIZE_NONSYNC) ? \
 	 (arg)->_data.literal_size : _imap_arg_literal_size_error(arg))
 
 #define IMAP_ARG_LIST(arg) \




More information about the dovecot-cvs mailing list