diff options
author | Jeffrey Stedfast <fejj@ximian.com> | 2003-02-27 06:02:39 +0000 |
---|---|---|
committer | Jeffrey Stedfast <fejj@src.gnome.org> | 2003-02-27 06:02:39 +0000 |
commit | ee602bd672a2667a581a636aeaaaab47517cef00 (patch) | |
tree | f5f7d26153ba8030921444baa065123f2111c585 | |
parent | b344db266d4b486c782a88429315545a54419f63 (diff) | |
download | gmime-ee602bd672a2667a581a636aeaaaab47517cef00.tar.gz |
Set priv->flushed to TRUE if we call g_mime_filter_complete() on our
2003-02-27 Jeffrey Stedfast <fejj@ximian.com>
* gmime/gmime-stream-filter.c (stream_read): Set priv->flushed to
TRUE if we call g_mime_filter_complete() on our filters.
(stream_eos): It's not actually the end of the stream until we've
flushed the filters. This fixes some possible truncation when
reading from a filtered stream.
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | gmime/gmime-stream-filter.c | 9 |
2 files changed, 16 insertions, 1 deletions
@@ -1,3 +1,11 @@ +2003-02-27 Jeffrey Stedfast <fejj@ximian.com> + + * gmime/gmime-stream-filter.c (stream_read): Set priv->flushed to + TRUE if we call g_mime_filter_complete() on our filters. + (stream_eos): It's not actually the end of the stream until we've + flushed the filters. This fixes some possible truncation when + reading from a filtered stream. + 2003-02-13 Jeffrey Stedfast <fejj@ximian.com> * README: Bumped version to 2.0.2 diff --git a/gmime/gmime-stream-filter.c b/gmime/gmime-stream-filter.c index 08fa4865..39b4ed7f 100644 --- a/gmime/gmime-stream-filter.c +++ b/gmime/gmime-stream-filter.c @@ -50,7 +50,8 @@ struct _GMimeStreamFilterPrivate { 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; /* have the filters been flushed? */ }; static void g_mime_stream_filter_class_init (GMimeStreamFilterClass *klass); @@ -130,6 +131,7 @@ g_mime_stream_filter_init (GMimeStreamFilter *stream, GMimeStreamFilterClass *kl stream->priv->buffer = stream->priv->realbuffer + READ_PAD; stream->priv->last_was_read = TRUE; stream->priv->filteredlen = 0; + stream->priv->flushed = FALSE; } static void @@ -184,6 +186,7 @@ stream_read (GMimeStream *stream, char *buf, size_t len) f = f->next; } size = p->filteredlen; + p->flushed = TRUE; } if (size <= 0) return size; @@ -292,6 +295,9 @@ stream_eos (GMimeStream *stream) if (p->filteredlen > 0) return FALSE; + if (!p->flushed) + return FALSE; + return g_mime_stream_eos (filter->source); } @@ -303,6 +309,7 @@ stream_reset (GMimeStream *stream) struct _filter *f; p->filteredlen = 0; + p->flushed = FALSE; /* and reset filters */ f = p->filters; |