From f061b8bfafd1eb3d389e4c9801ff4377de8f9225 Mon Sep 17 00:00:00 2001 From: Pierre Habouzit Date: Sat, 4 Nov 2006 02:46:37 +0100 Subject: [PATCH] wibble Signed-off-by: Pierre Habouzit --- lib-mime/rfc2047.c | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/lib-mime/rfc2047.c b/lib-mime/rfc2047.c index 5b88b4b..a18b190 100644 --- a/lib-mime/rfc2047.c +++ b/lib-mime/rfc2047.c @@ -56,7 +56,6 @@ #define ENCWORD_LEN_MIN 9 /* m_strlen("=?.?.?.?=") */ #define HSPACE(x) ((x) == '\0' || (x) == ' ' || (x) == '\t') - #define CONTINUATION_BYTE(c) (((c) & 0xc0) == 0x80) /* converts f of len flen and charset from @@ -260,9 +259,9 @@ q_encoder(char *s, const char *d, ssize_t dlen, const char *tocode) * tocode, unless fromcode is 0, in which case the data is assumed to * be already in tocode, which should be 8-bit and stateless. */ -static size_t try_block (const char *d, ssize_t dlen, - const char *fromcode, const char *tocode, - encoder_t **encoder, ssize_t *wlen) +static size_t try_block(const char *d, ssize_t dlen, + const char *fromcode, const char *tocode, + encoder_t **encoder, ssize_t *wlen) { char buf1[ENCWORD_LEN_MAX - ENCWORD_LEN_MIN + 1]; ssize_t obl = sizeof(buf1) - m_strlen(tocode); @@ -328,9 +327,9 @@ static size_t try_block (const char *d, ssize_t dlen, * Encode the data (d, dlen) into s using the encoder. * Return the length of the encoded word. */ -static size_t encode_block (char *s, char *d, ssize_t dlen, - const char *fromcode, const char *tocode, - encoder_t *encoder) +static size_t +encode_block(char *s, char *d, ssize_t dlen, + const char *fromcode, const char *tocode, encoder_t *encoder) { char buf1[ENCWORD_LEN_MAX - ENCWORD_LEN_MIN + 1]; ssize_t ibl, obl, n1, n2; @@ -339,16 +338,16 @@ static size_t encode_block (char *s, char *d, ssize_t dlen, char *ob; if (fromcode) { - cd = mutt_iconv_open (tocode, fromcode, 0); + cd = mutt_iconv_open(tocode, fromcode, 0); assert (cd != (iconv_t) (-1)); - ib = d, ibl = dlen, ob = buf1, obl = sizeof (buf1) - m_strlen(tocode); + ib = d, ibl = dlen, ob = buf1, obl = sizeof(buf1) - m_strlen(tocode); n1 = my_iconv(cd, &ib, &ibl, &ob, &obl); n2 = my_iconv(cd, 0, 0, &ob, &obl); assert (n1 >= 0 && n2 >= 0); iconv_close (cd); - return (*encoder) (s, buf1, ob - buf1, tocode); + return (*encoder)(s, buf1, ob - buf1, tocode); } else { - return (*encoder) (s, d, dlen, tocode); + return (*encoder)(s, d, dlen, tocode); } } @@ -363,23 +362,28 @@ static size_t choose_block(char *d, size_t dlen, int col, encoder_t **encoder, ssize_t *wlen) { size_t n, nn; - int utf8 = fromcode && !ascii_strcasecmp (fromcode, "UTF-8"); + int utf8 = fromcode && !ascii_strcasecmp(fromcode, "UTF-8"); n = dlen; for (;;) { assert (d + n > d); - nn = try_block (d, n, fromcode, tocode, encoder, wlen); + nn = try_block(d, n, fromcode, tocode, encoder, wlen); if (!nn && (col + *wlen <= ENCWORD_LEN_MAX + 1 || n <= 1)) break; n = (nn ? nn : n) - 1; assert (n > 0); - if (utf8) - while (n > 1 && CONTINUATION_BYTE (d[n])) + if (utf8) { + while (n > 1 && CONTINUATION_BYTE(d[n])) --n; + } } return n; } + + +/*** XXX: MC: not read after that mark ***/ + /* * Place the result of RFC-2047-encoding (d, dlen) into the dynamically * allocated buffer (e, elen). The input data is in charset fromcode -- 2.20.1