Fix uip/whom.c for C89 compatibility
[mmh] / uip / mhoutsbr.c
index 03aff61..87e7943 100644 (file)
@@ -9,49 +9,11 @@
 
 #include <h/mh.h>
 #include <fcntl.h>
-#include <h/signals.h>
 #include <errno.h>
-#include <signal.h>
 #include <h/tws.h>
 #include <h/mime.h>
 #include <h/mhparse.h>
 
-extern int ebcdicsw;
-
-static char ebcdicsafe[0x100] = {
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
-       0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-       0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-       0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-       0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-       0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-       0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-       0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01,
-       0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-       0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-       0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-       0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-};
 
 static char nib2b64[0x40+1] =
        "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
@@ -61,17 +23,16 @@ static char nib2b64[0x40+1] =
 */
 int output_message(CT, char *);
 int output_message_fp(CT, FILE *, char *);
-int writeBase64aux(FILE *, FILE *);
 
 /*
 ** static prototypes
 */
 static int output_content(CT, FILE *);
 static void output_headers(CT, FILE *);
-static int writeExternalBody(CT, FILE *);
 static int write8Bit(CT, FILE *);
 static int writeQuoted(CT, FILE *);
 static int writeBase64(CT, FILE *);
+static int writeBase64aux(FILE *, FILE *);
 
 
 /*
@@ -125,14 +86,6 @@ output_content(CT ct, FILE *out)
        output_headers(ct, out);
 
        /*
-       ** If this is the internal content structure for a
-       ** "message/external", then we are done with the
-       ** headers (since it has no body).
-       */
-       if (ct->c_ctexbody)
-               return OK;
-
-       /*
        ** Now output the content bodies.
        */
        switch (ct->c_type) {
@@ -141,9 +94,6 @@ output_content(CT ct, FILE *out)
                struct multipart *m;
                struct part *part;
 
-               if (ct->c_rfc934)
-                       putc('\n', out);
-
                m = (struct multipart *) ct->c_ctparams;
                for (part = m->mp_parts; part; part = part->mp_next) {
                        CT p = part->mp_part;
@@ -158,19 +108,7 @@ output_content(CT ct, FILE *out)
 
        case CT_MESSAGE:
                putc('\n', out);
-               if (ct->c_subtype == MESSAGE_EXTERNAL) {
-                       struct exbody *e;
-
-                       e = (struct exbody *) ct->c_ctparams;
-                       if (output_content(e->eb_content, out) == NOTOK)
-                               return NOTOK;
-
-                       /* output phantom body for access-type "mail-server" */
-                       if (e->eb_body)
-                               writeExternalBody(ct, out);
-               } else {
-                       result = write8Bit(ct, out);
-               }
+               result = write8Bit(ct, out);
                break;
 
        /*
@@ -233,78 +171,6 @@ output_headers(CT ct, FILE *out)
 
 
 /*
-** Write the phantom body for access-type "mail-server".
-*/
-
-static int
-writeExternalBody(CT ct, FILE *out)
-{
-       char **ap, **ep, *cp;
-       struct exbody *e = (struct exbody *) ct->c_ctparams;
-
-       putc('\n', out);
-       for (cp = e->eb_body; *cp; cp++) {
-               CT ct2 = e->eb_content;
-               CI ci2 = &ct2->c_ctinfo;
-
-               if (*cp == '\\') {
-                       switch (*++cp) {
-                       case 'I':
-                               if (ct2->c_id) {
-                                       char *dp = trimcpy(ct2->c_id);
-
-                                       fputs(dp, out);
-                                       free(dp);
-                               }
-                               continue;
-
-                       case 'N':
-                               for (ap = ci2->ci_attrs, ep = ci2->ci_values;
-                                               *ap; ap++, ep++)
-                                       if (!mh_strcasecmp(*ap, "name")) {
-                                               fprintf(out, "%s", *ep);
-                                               break;
-                                       }
-                               continue;
-
-                       case 'T':
-                               fprintf(out, "%s/%s", ci2->ci_type,
-                                               ci2->ci_subtype);
-                               for (ap = ci2->ci_attrs, ep = ci2->ci_values;
-                                               *ap; ap++, ep++)
-                                       fprintf(out, "; %s=\"%s\"", *ap, *ep);
-                               continue;
-
-                       case 'n':
-                               putc('\n', out);
-                               continue;
-
-                       case 't':
-                               putc('\t', out);
-                               continue;
-
-                       case '\0':
-                               cp--;
-                               break;
-
-                       case '\\':
-                       case '"':
-                               break;
-
-                       default:
-                               putc('\\', out);
-                               break;
-                       }
-               }
-               putc(*cp, out);
-       }
-       putc('\n', out);
-
-       return OK;
-}
-
-
-/*
 ** Output a content without any transfer encoding
 */
 
@@ -362,7 +228,7 @@ writeQuoted(CT ct, FILE *out)
                        n = 0;
                }
                for (; *cp; cp++) {
-                       if (n > CPERLIN - 3) {
+                       if (n + 1 >= CPERLIN) {
                                fputs("=\n", out);
                                n = 0;
                        }
@@ -375,8 +241,16 @@ writeQuoted(CT ct, FILE *out)
                                break;
 
                        default:
-                               if (*cp < '!' || *cp > '~' || (ebcdicsw && !ebcdicsafe[*cp & 0xff]))
+                               if (*cp < '!' || *cp > '~') {
                                        goto three_print;
+                               }
+                               if (n == 0 && *cp == '.') {
+                                       /*
+                                       ** encode dot at start of line,
+                                       ** because it could be alone ...
+                                       */
+                                       goto three_print;
+                               }
                                putc(*cp, out);
                                n++;
                                break;
@@ -425,7 +299,7 @@ writeBase64(CT ct, FILE *out)
 }
 
 
-int
+static int
 writeBase64aux(FILE *in, FILE *out)
 {
        unsigned int cc, n;