diff options
Diffstat (limited to 'camel/camel-stream-filter.c')
-rw-r--r-- | camel/camel-stream-filter.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/camel/camel-stream-filter.c b/camel/camel-stream-filter.c index 866c8d2416..1189262ddc 100644 --- a/camel/camel-stream-filter.c +++ b/camel/camel-stream-filter.c @@ -269,6 +269,7 @@ do_write (CamelStream *stream, const char *buf, size_t n) CamelStreamFilter *filter = (CamelStreamFilter *)stream; struct _CamelStreamFilterPrivate *p = _PRIVATE(filter); struct _filter *f; + ssize_t w, written = 0; int presize; char *buffer = (char *)buf; size_t len = n; @@ -291,10 +292,13 @@ do_write (CamelStream *stream, const char *buf, size_t n) f = f->next; } - - if (camel_stream_write(filter->source, buffer, len) != len) - return -1; - + + do { + w = camel_stream_write (filter->source, buffer + written, len - written); + if (w > 0) + written += w; + } while (written < len); + return n; } |