X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Ffmt_rfc2047.c;h=4e8231fc417327ad5e9f72449da12c7d2aab69fb;hp=5bc785058053f9569e14eb2a9d32f14e6f08f24b;hb=0c9207459097089a931399ff7d384884288bc4ac;hpb=ced6090a330d3d83d0bce709f756aa3d7d65fea4 diff --git a/sbr/fmt_rfc2047.c b/sbr/fmt_rfc2047.c index 5bc7850..4e8231f 100644 --- a/sbr/fmt_rfc2047.c +++ b/sbr/fmt_rfc2047.c @@ -38,7 +38,7 @@ static signed char index_64[128] = { #define char64(c) (((unsigned char) (c) > 127) ? -1 : index_64[(unsigned char) (c)]) static int -unqp (unsigned char byte1, unsigned char byte2) +unqp(unsigned char byte1, unsigned char byte2) { if (hexindex[byte1] == -1 || hexindex[byte2] == -1) return -1; @@ -57,7 +57,7 @@ unqp (unsigned char byte1, unsigned char byte2) #define ADDCHR(C) do { *q++ = (C); dstlen--; if (!dstlen) goto buffull; } while (0) int -decode_rfc2047 (char *str, char *dst, size_t dstlen) +decode_rfc2047(char *str, char *dst, size_t dstlen) { char *p, *q, *pp; char *startofmime, *endofmime; @@ -81,7 +81,7 @@ decode_rfc2047 (char *str, char *dst, size_t dstlen) ** Do a quick and dirty check for the '=' character. ** This should quickly eliminate many cases. */ - if (!strchr (str, '=')) + if (!strchr(str, '=')) return 0; for (p = str, q = dst; *p; p++) { @@ -125,22 +125,25 @@ decode_rfc2047 (char *str, char *dst, size_t dstlen) if (!*pp) continue; + *pp = '\0'; /* Check if character set can be handled natively */ - if (!check_charset(startofmime, pp - startofmime)) { + if (!is_native_charset(startofmime)) { #ifdef HAVE_ICONV /* .. it can't. We'll use iconv then. */ - *pp = '\0'; cd = iconv_open(get_charset(), startofmime); fromutf8 = !mh_strcasecmp(startofmime, "UTF-8"); *pp = '?'; - if (cd == (iconv_t)-1) continue; + if (cd == (iconv_t)-1) + continue; use_iconv = 1; #else + *pp = '?'; continue; #endif } + *pp = '?'; startofmime = pp + 1; /* Check for valid encoding type */ @@ -222,7 +225,7 @@ decode_rfc2047 (char *str, char *dst, size_t dstlen) if (quoted_printable) { for (pp = startofmime; pp < endofmime; pp++) { if (*pp == '=') { - c = unqp (pp[1], pp[2]); + c = unqp(pp[1], pp[2]); if (c == -1) continue; if (c != 0) @@ -302,7 +305,7 @@ decode_rfc2047 (char *str, char *dst, size_t dstlen) ** which won't work if either ** encoding was stateful */ - iconv (cd, 0, 0, &saveq, &savedstlen); + iconv(cd, 0, 0, &saveq, &savedstlen); if (!savedstlen) break; *saveq++ = '?';