Damn it; my lovely resilient scheme falls down when you have a protocol

that switches from line-oriented to byte-oriented partway through, such as
HTTP.
This commit is contained in:
Michael Brown
2007-01-12 18:09:14 +00:00
parent ad22cccc09
commit 83b7933f8a
3 changed files with 61 additions and 85 deletions

View File

@@ -5,8 +5,8 @@
static const char data1[] =
"Hello world\r\n"
"This is a particularly mean set of lines\n"
"with a mixture of terminators\r\r\n"
"This is a reasonably nice set of lines\n"
"with not many different terminators\r\n\r\n"
"There should be exactly one blank line above\n"
"and this line should never appear at all since it has no terminator";
@@ -14,13 +14,18 @@ void linebuf_test ( void ) {
struct line_buffer linebuf;
const char *data = data1;
size_t len = ( sizeof ( data1 ) - 1 /* be mean; strip the NUL */ );
size_t buffered;
char *line;
int rc;
memset ( &linebuf, 0, sizeof ( linebuf ) );
while ( ( buffered = line_buffer ( &linebuf, data, len ) ) != len ) {
printf ( "\"%s\"\n", buffered_line ( &linebuf ) );
data += buffered;
len -= buffered;
while ( len ) {
if ( ( rc = line_buffer ( &linebuf, &data, &len ) ) != 0 ) {
printf ( "line_buffer() failed: %s\n",
strerror ( rc ) );
return;
}
if ( ( line = buffered_line ( &linebuf ) ) )
printf ( "\"%s\"\n", line );
}
empty_line_buffer ( &linebuf );