X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/b3bcb44d340fd017efac8bb31c3859dd91b24af3..ec173fd2c:/sbr/fmt_rfc2047.c?ds=inline diff --git a/sbr/fmt_rfc2047.c b/sbr/fmt_rfc2047.c index 8c799e14..8022c2f6 100644 --- a/sbr/fmt_rfc2047.c +++ b/sbr/fmt_rfc2047.c @@ -5,8 +5,10 @@ * complete copyright information. */ -#include -#include +#include "h/mh.h" +#include "fmt_rfc2047.h" +#include "check_charset.h" +#include "h/utils.h" #ifdef HAVE_ICONV # include #endif @@ -73,11 +75,8 @@ decode_rfc2047 (char *str, char *dst, size_t dstlen) char *startofmime, *endofmime, *endofcharset; int c, quoted_printable; int encoding_found = 0; /* did we decode anything? */ - int between_encodings = 0; /* are we between two encodings? */ - int equals_pending = 0; /* is there a '=' pending? */ int whitespace = 0; /* how much whitespace between encodings? */ #ifdef HAVE_ICONV - int use_iconv = 0; /* are we converting encoding with iconv? */ iconv_t cd = NULL; int fromutf8 = 0; char *saveq, *convbuf = NULL; @@ -94,13 +93,18 @@ decode_rfc2047 (char *str, char *dst, size_t dstlen) if (!strchr (str, '=')) return 0; +#ifdef HAVE_ICONV + bool use_iconv = false; /* are we converting encoding with iconv? */ +#endif + bool between_encodings = false; + bool equals_pending = false; for (p = str, q = dst; *p; p++) { /* reset iconv */ #ifdef HAVE_ICONV if (use_iconv) { iconv_close(cd); - use_iconv = 0; + use_iconv = false; } #endif /* @@ -109,8 +113,8 @@ decode_rfc2047 (char *str, char *dst, size_t dstlen) */ if (equals_pending) { ADDCHR('='); - equals_pending = 0; - between_encodings = 0; /* we have added non-whitespace text */ + equals_pending = false; + between_encodings = false; /* we have added non-whitespace text */ } if (*p != '=') { @@ -118,12 +122,12 @@ decode_rfc2047 (char *str, char *dst, size_t dstlen) if (between_encodings && is_lws(*p)) whitespace++; else - between_encodings = 0; /* we have added non-whitespace text */ + between_encodings = false; /* we have added non-whitespace text */ ADDCHR(*p); continue; } - equals_pending = 1; /* we have a '=' pending */ + equals_pending = true; /* Check for initial =? */ if (*p == '=' && p[1] == '?' && p[2]) { @@ -159,7 +163,7 @@ decode_rfc2047 (char *str, char *dst, size_t dstlen) fromutf8 = !strcasecmp(startofmime, "UTF-8"); *pp = '?'; if (cd == (iconv_t)-1) continue; - use_iconv = 1; + use_iconv = true; #else continue; #endif @@ -203,7 +207,7 @@ decode_rfc2047 (char *str, char *dst, size_t dstlen) * We've found an encoded word, so we can drop * the '=' that was pending */ - equals_pending = 0; + equals_pending = false; /* * If we are between two encoded words separated only by @@ -222,7 +226,7 @@ decode_rfc2047 (char *str, char *dst, size_t dstlen) * malloc 0 bytes but skip on to the end */ if (endofmime == startofmime && use_iconv) { - use_iconv = 0; + use_iconv = false; iconv_close(cd); } @@ -355,7 +359,7 @@ decode_rfc2047 (char *str, char *dst, size_t dstlen) p = endofmime + 1; encoding_found = 1; /* we found (at least 1) encoded word */ - between_encodings = 1; /* we have just decoded something */ + between_encodings = true; /* we have just decoded something */ whitespace = 0; /* re-initialize amount of whitespace */ } }