]> diplodocus.org Git - nmh/blobdiff - sbr/fmt_rfc2047.c
Add basic support for the STLS command in POP
[nmh] / sbr / fmt_rfc2047.c
index 8c799e14c77b1197c684ab446c163df018c31b66..8022c2f69939e3b39e58777bffa8c028a9560665 100644 (file)
@@ -5,8 +5,10 @@
  * complete copyright information.
  */
 
-#include <h/mh.h>
-#include <h/utils.h>
+#include "h/mh.h"
+#include "fmt_rfc2047.h"
+#include "check_charset.h"
+#include "h/utils.h"
 #ifdef HAVE_ICONV
 #  include <iconv.h>
 #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 */
        }
     }