From: Ken Hornstein Date: Tue, 4 Feb 2014 16:19:24 +0000 (-0500) Subject: Fix encoder so at least one case of LF -> CR LF conversion happens correctly. X-Git-Url: https://diplodocus.org/git/nmh/commitdiff_plain/17ce15185fd5251a4fe8cec02950f0246d891e20?ds=sidebyside;hp=ed119a2411ebc8480b1a982d304b7b61ed37a2c9 Fix encoder so at least one case of LF -> CR LF conversion happens correctly. --- diff --git a/sbr/base64.c b/sbr/base64.c index 6682c3f3..7ceb27b9 100644 --- a/sbr/base64.c +++ b/sbr/base64.c @@ -17,6 +17,7 @@ writeBase64aux (FILE *in, FILE *out, int crlf) { unsigned int cc, n; unsigned char inbuf[3]; + int skipnl = 0; n = BPERLIN; while ((cc = fread (inbuf, sizeof(*inbuf), sizeof(inbuf), in)) > 0) { @@ -39,7 +40,7 @@ writeBase64aux (FILE *in, FILE *out, int crlf) unsigned int i; for (i = 0; i < cc; i++) { - if (inbuf[i] == '\n') { + if (inbuf[i] == '\n' && !skipnl) { inbuf[i] = '\r'; /* * If it's the last character in the buffer, we can just @@ -48,6 +49,7 @@ writeBase64aux (FILE *in, FILE *out, int crlf) */ if (i == cc - 1) { ungetc('\n', in); + skipnl = 1; } else { /* This only works as long as sizeof(inbuf) == 3 */ ungetc(inbuf[cc - 1], in); @@ -55,6 +57,8 @@ writeBase64aux (FILE *in, FILE *out, int crlf) inbuf[2] = inbuf[1]; inbuf[++i] = '\n'; } + } else { + skipnl = 0; } } }