]> diplodocus.org Git - nmh/blobdiff - sbr/encode_rfc2047.c
client.c: Move interface to own file.
[nmh] / sbr / encode_rfc2047.c
index 41fe786561271305ed57924b022ed54ce90f0a52..823fd824940becd9995e0b5fc5d7e55bb66e0f7f 100644 (file)
@@ -1,14 +1,18 @@
-/* Routines to encode message headers using RFC 2047-encoding.
+/* encode_rfc2047.c -- encode message headers using RFC 2047 encoding.
  *
  * This code is Copyright (c) 2002, by the authors of nmh.  See the
  * COPYRIGHT file in the root directory of the nmh distribution for
  * complete copyright information.
  */
 
  *
  * This code is Copyright (c) 2002, by the authors of nmh.  See the
  * COPYRIGHT file in the root directory of the nmh distribution for
  * complete copyright information.
  */
 
-#include <h/mh.h>
-#include <h/mhparse.h>
-#include <h/addrsbr.h>
-#include <h/utils.h>
+#include "h/mh.h"
+#include "check_charset.h"
+#include "error.h"
+#include "h/mhparse.h"
+#include "h/addrsbr.h"
+#include "h/utils.h"
+#include "base64.h"
+#include "unquote.h"
 
 /*
  * List of headers that contain addresses and as a result require special
 
 /*
  * List of headers that contain addresses and as a result require special
@@ -158,7 +162,7 @@ static int
 field_encode_quoted(const char *name, char **value, const char *charset,
                    int ascii, int encoded, int phraserules)
 {
 field_encode_quoted(const char *name, char **value, const char *charset,
                    int ascii, int encoded, int phraserules)
 {
-    int prefixlen = name ? strlen(name) + 2: 0, outlen = 0, column, newline = 1;
+    int prefixlen = name ? strlen(name) + 2: 0, outlen = 0, column;
     int charsetlen = strlen(charset), utf8;
     char *output = NULL, *p, *q = NULL;
 
     int charsetlen = strlen(charset), utf8;
     char *output = NULL, *p, *q = NULL;
 
@@ -173,6 +177,7 @@ field_encode_quoted(const char *name, char **value, const char *charset,
 
     utf8 = strcasecmp(charset, "UTF-8") == 0;
 
 
     utf8 = strcasecmp(charset, "UTF-8") == 0;
 
+    bool newline = true;
     while (*p != '\0') {
        /*
         * Start a new line, if it's time
     while (*p != '\0') {
        /*
         * Start a new line, if it's time
@@ -223,7 +228,7 @@ field_encode_quoted(const char *name, char **value, const char *charset,
            tokenlen = snprintf(q, outlen - (q - output), "=?%s?Q?", charset);
            q += tokenlen;
            column = prefixlen + tokenlen;
            tokenlen = snprintf(q, outlen - (q - output), "=?%s?Q?", charset);
            q += tokenlen;
            column = prefixlen + tokenlen;
-           newline = 0;
+           newline = false;
        }
 
        /*
        }
 
        /*
@@ -264,7 +269,7 @@ field_encode_quoted(const char *name, char **value, const char *charset,
            continue;
 
        if (column >= ENCODELINELIMIT - 2) {
            continue;
 
        if (column >= ENCODELINELIMIT - 2) {
-           newline = 1;
+           newline = true;
        } else if (utf8) {
            /*
             * Okay, this is a bit weird, but to explain a bit more ...
        } else if (utf8) {
            /*
             * Okay, this is a bit weird, but to explain a bit more ...
@@ -280,7 +285,7 @@ field_encode_quoted(const char *name, char **value, const char *charset,
             * allow for the encoded output.
             */
            if (column + (utf8len(p) * 3) > ENCODELINELIMIT - 2) {
             * allow for the encoded output.
             */
            if (column + (utf8len(p) * 3) > ENCODELINELIMIT - 2) {
-               newline = 1;
+               newline = true;
            }
        }
     }
            }
        }
     }
@@ -549,7 +554,11 @@ field_encode_address(const char *name, char **value, int encoding,
                     const char *charset)
 {
     int prefixlen = strlen(name) + 2, column = prefixlen, groupflag;
                     const char *charset)
 {
     int prefixlen = strlen(name) + 2, column = prefixlen, groupflag;
-    int asciichars, specialchars, eightbitchars, reformat = 0, errflag = 0;
+    int asciichars;
+    int specialchars;
+    int eightbitchars;
+    bool reformat = false;
+    bool errflag = false;
     size_t len;
     char *mp, *cp = NULL, *output = NULL;
     char *tmpbuf = NULL;
     size_t len;
     char *mp, *cp = NULL, *output = NULL;
     char *tmpbuf = NULL;
@@ -574,11 +583,11 @@ field_encode_address(const char *name, char **value, int encoding,
     for (groupflag = 0; (mp = getname(*value)); ) {
        if ((mn = getm(mp, NULL, 0, errbuf, sizeof(errbuf))) == NULL) {
            inform("%s: %s", errbuf, mp);
     for (groupflag = 0; (mp = getname(*value)); ) {
        if ((mn = getm(mp, NULL, 0, errbuf, sizeof(errbuf))) == NULL) {
            inform("%s: %s", errbuf, mp);
-           errflag++;
+           errflag = true;
            continue;
        }
 
            continue;
        }
 
-       reformat = 0;
+       reformat = false;
 
        /*
         * We only care if the phrase (m_pers) or any trailing comment
 
        /*
         * We only care if the phrase (m_pers) or any trailing comment
@@ -617,7 +626,7 @@ field_encode_address(const char *name, char **value, int encoding,
 
            case CE_BASE64:
                if (field_encode_base64(NULL, &mn->m_pers, charset)) {
 
            case CE_BASE64:
                if (field_encode_base64(NULL, &mn->m_pers, charset)) {
-                   errflag++;
+                   errflag = true;
                    goto out;
                }
                break;
                    goto out;
                }
                break;
@@ -625,18 +634,18 @@ field_encode_address(const char *name, char **value, int encoding,
            case CE_QUOTED:
                if (field_encode_quoted(NULL, &mn->m_pers, charset, asciichars,
                                        eightbitchars + specialchars, 1)) {
            case CE_QUOTED:
                if (field_encode_quoted(NULL, &mn->m_pers, charset, asciichars,
                                        eightbitchars + specialchars, 1)) {
-                   errflag++;
+                   errflag = true;
                    goto out;
                }
                break;
 
            default:
                inform("Internal error: unknown RFC-2047 encoding type");
                    goto out;
                }
                break;
 
            default:
                inform("Internal error: unknown RFC-2047 encoding type");
-               errflag++;
+               errflag = true;
                goto out;
            }
 
                goto out;
            }
 
-           reformat++;
+           reformat = true;
        }
 
        check_note:
        }
 
        check_note:
@@ -659,7 +668,7 @@ field_encode_address(const char *name, char **value, int encoding,
        if (mn->m_note[0] != '(' || mn->m_note[len - 1] != ')') {
            inform("Internal error: Invalid note field \"%s\"",
                   mn->m_note);
        if (mn->m_note[0] != '(' || mn->m_note[len - 1] != ')') {
            inform("Internal error: Invalid note field \"%s\"",
                   mn->m_note);
-           errflag++;
+           errflag = true;
            goto out;
        }
 
            goto out;
        }
 
@@ -680,7 +689,7 @@ field_encode_address(const char *name, char **value, int encoding,
 
            case CE_BASE64:
                if (field_encode_base64(NULL, &tmpbuf, charset)) {
 
            case CE_BASE64:
                if (field_encode_base64(NULL, &tmpbuf, charset)) {
-                   errflag++;
+                   errflag = true;
                    goto out;
                }
                break;
                    goto out;
                }
                break;
@@ -688,18 +697,18 @@ field_encode_address(const char *name, char **value, int encoding,
            case CE_QUOTED:
                if (field_encode_quoted(NULL, &tmpbuf, charset, asciichars,
                                        eightbitchars + specialchars, 1)) {
            case CE_QUOTED:
                if (field_encode_quoted(NULL, &tmpbuf, charset, asciichars,
                                        eightbitchars + specialchars, 1)) {
-                   errflag++;
+                   errflag = true;
                    goto out;
                }
                break;
 
            default:
                inform("Internal error: unknown RFC-2047 encoding type");
                    goto out;
                }
                break;
 
            default:
                inform("Internal error: unknown RFC-2047 encoding type");
-               errflag++;
+               errflag = true;
                goto out;
            }
 
                goto out;
            }
 
-           reformat++;
+           reformat = true;
 
            /*
             * Make sure the size of tmpbuf is correct (it always gets
 
            /*
             * Make sure the size of tmpbuf is correct (it always gets
@@ -736,7 +745,7 @@ do_reformat:
 
        if (groupflag && ! mn->m_ingrp) {
            output = add(";", output);
 
        if (groupflag && ! mn->m_ingrp) {
            output = add(";", output);
-           column += 1;
+           column++;
        }
 
        groupflag = mn->m_ingrp;
        }
 
        groupflag = mn->m_ingrp;
@@ -797,10 +806,10 @@ do_reformat:
     output = NULL;
 
 out:
     output = NULL;
 
 out:
-    mh_xfree(tmpbuf);
-    mh_xfree(output);
+    free(tmpbuf);
+    free(output);
 
 
-    return errflag > 0;
+    return errflag;
 }
 
 /*
 }
 
 /*