summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeffrey Stedfast <fejj@ximian.com>2003-02-27 06:02:39 +0000
committerJeffrey Stedfast <fejj@src.gnome.org>2003-02-27 06:02:39 +0000
commitee602bd672a2667a581a636aeaaaab47517cef00 (patch)
treef5f7d26153ba8030921444baa065123f2111c585
parentb344db266d4b486c782a88429315545a54419f63 (diff)
downloadgmime-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--ChangeLog8
-rw-r--r--gmime/gmime-stream-filter.c9
2 files changed, 16 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index e4a99d6a..fcb74e6f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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;