From b284896c8c561ff8d431de984725da3c01bfea1e Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Thu, 27 Feb 2003 23:37:34 +0000 Subject: Add a 'flushed' state variable to the private struct. (do_read): Set 2003-02-27 Jeffrey Stedfast * camel-stream-filter.c: Add a 'flushed' state variable to the private struct. (do_read): Set p->flushed to TRUE after we call camel_mime_filter_complete() on all the filters. (do_reset): Set p->flushed to FALSE. (do_eos): Make sure the filters have been flushed before returning that the stream is at EOS. * camel-mime-filter-canon.c (complete): Don't add a eol - otherwise we will fail to verify some mutt signatures that do not have a blank line before the boundary line (and note that the last \n before the boundary really belongs to the boundary anyway) so #if 0 this code out for now. svn path=/trunk/; revision=20096 --- camel/camel-stream-filter.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'camel/camel-stream-filter.c') diff --git a/camel/camel-stream-filter.c b/camel/camel-stream-filter.c index febfb04e24..0e529c0071 100644 --- a/camel/camel-stream-filter.c +++ b/camel/camel-stream-filter.c @@ -19,11 +19,16 @@ * Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include #include #include "camel-stream-filter.h" #define d(x) -/*#include */ /* use my malloc debugger? */ /*extern void g_check(void *mp);*/ @@ -45,7 +50,8 @@ struct _CamelStreamFilterPrivate { char *filtered; /* the filtered data */ size_t filteredlen; - int last_was_read; /* was the last op read or write? */ + int last_was_read:1; /* was the last op read or write? */ + int flushed:1 /* were the filters flushed? */ }; #define READ_PAD (128) /* bytes padded before buffer */ @@ -90,6 +96,7 @@ camel_stream_filter_init (CamelStreamFilter *obj) p->realbuffer = g_malloc(READ_SIZE + READ_PAD); p->buffer = p->realbuffer + READ_PAD; p->last_was_read = TRUE; + p->flushed = FALSE; } static void @@ -234,6 +241,7 @@ do_read (CamelStream *stream, char *buffer, size_t n) f = f->next; } size = p->filteredlen; + p->flushed = TRUE; } if (size <= 0) return size; @@ -368,10 +376,13 @@ do_eos (CamelStream *stream) { CamelStreamFilter *filter = (CamelStreamFilter *)stream; struct _CamelStreamFilterPrivate *p = _PRIVATE(filter); - + if (p->filteredlen > 0) return FALSE; - + + if (!p->flushed) + return FALSE; + return camel_stream_eos(filter->source); } @@ -383,7 +394,8 @@ do_reset (CamelStream *stream) struct _filter *f; p->filteredlen = 0; - + p->flushed = FALSE; + /* and reset filters */ f = p->filters; while (f) { -- cgit v1.2.3