aboutsummaryrefslogtreecommitdiffstats
path: root/camel/camel-stream-filter.c
diff options
context:
space:
mode:
authorJeffrey Stedfast <fejj@ximian.com>2003-02-28 07:37:34 +0800
committerJeffrey Stedfast <fejj@src.gnome.org>2003-02-28 07:37:34 +0800
commitb284896c8c561ff8d431de984725da3c01bfea1e (patch)
treef4625235ac5cb3cde649e1627522db702a80655b /camel/camel-stream-filter.c
parent9abf82080cff93489d63cf6b0b929782b190c2fc (diff)
downloadgsoc2013-evolution-b284896c8c561ff8d431de984725da3c01bfea1e.tar
gsoc2013-evolution-b284896c8c561ff8d431de984725da3c01bfea1e.tar.gz
gsoc2013-evolution-b284896c8c561ff8d431de984725da3c01bfea1e.tar.bz2
gsoc2013-evolution-b284896c8c561ff8d431de984725da3c01bfea1e.tar.lz
gsoc2013-evolution-b284896c8c561ff8d431de984725da3c01bfea1e.tar.xz
gsoc2013-evolution-b284896c8c561ff8d431de984725da3c01bfea1e.tar.zst
gsoc2013-evolution-b284896c8c561ff8d431de984725da3c01bfea1e.zip
Add a 'flushed' state variable to the private struct. (do_read): Set
2003-02-27 Jeffrey Stedfast <fejj@ximian.com> * 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
Diffstat (limited to 'camel/camel-stream-filter.c')
-rw-r--r--camel/camel-stream-filter.c22
1 files changed, 17 insertions, 5 deletions
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 <config.h>
+#endif
+
+#include <stdio.h>
#include <string.h>
#include "camel-stream-filter.h"
#define d(x)
-/*#include <stdio.h>*/
/* 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) {