From ca7044930f42a698fd88f914c2512a20e2eeaae9 Mon Sep 17 00:00:00 2001 From: Ettore Perazzoli Date: Wed, 17 Nov 1999 14:39:25 +0000 Subject: Added streaming capability to CamelDataWrapper. This makes it possible, for example, to build multipart messages out of files that are on disk without loading them in memory. svn path=/trunk/; revision=1394 --- camel/gmime-base64.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'camel/gmime-base64.c') diff --git a/camel/gmime-base64.c b/camel/gmime-base64.c index a9e596d2dc..db784f7143 100644 --- a/camel/gmime-base64.c +++ b/camel/gmime-base64.c @@ -30,15 +30,12 @@ gmime_encode_base64 (CamelStream *input, CamelStream *output) char buffer [BSIZE]; char obuf [80]; /* Output is limited to 76 characters, rfc2045 */ int n, i, j, state; - long bytes; - - j = 0; + int keep = 0; + state = 0; - bytes = 0; - while ((n = camel_stream_read (input, &buffer, sizeof (buffer))) > 0){ - int keep = 0; - - for (i = 0; i < n; i++, state++, bytes++){ + j = 0; + while ((n = camel_stream_read (input, buffer, sizeof (buffer))) > 0){ + for (i = 0; i < n; i++, state++){ char c = buffer [i]; switch (state % 3){ @@ -48,21 +45,23 @@ gmime_encode_base64 (CamelStream *input, CamelStream *output) break; case 1: obuf [j++] = base64_alphabet [keep | (c >> 4)]; - keep = (c & 0xf) << 4; + keep = (c & 0xf) << 2; break; case 2: obuf [j++] = base64_alphabet [keep | (c >> 6)]; obuf [j++] = base64_alphabet [c & 0x3f]; break; } - - if ((bytes % 72) == 0){ + + if (j == 72){ obuf [j++] = '\r'; obuf [j++] = '\n'; camel_stream_write (output, obuf, j); + j = 0; } } } + switch (state % 3){ case 0: /* full ouput, nothing left to do */ -- cgit v1.2.3