[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