Added -messageid switch to send(1) and post(8). This allows selection
[mmh] / uip / mhoutsbr.c
index fff4ccc..97f97f0 100644 (file)
@@ -3,8 +3,6 @@
  * mhoutsbr.c -- routines to output MIME messages
  *            -- given a Content structure
  *
- * $Id$
- *
  * 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/mime.h>
 #include <h/mhparse.h>
 
-#ifdef HAVE_SYS_WAIT_H
-# include <sys/wait.h>
-#endif
-
 
 extern int ebcdicsw;
 
@@ -63,14 +57,11 @@ static char ebcdicsafe[0x100] = {
     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 };
 
-static char nib2b64[0x40+1] =
-       "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-
 /*
  * prototypes
  */
 int output_message (CT, char *);
-int writeBase64aux (FILE *, FILE *);
+int output_message_fp (CT, FILE *, char *);
 
 /*
  * static prototypes
@@ -80,7 +71,7 @@ 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 writeBase64ct (CT, FILE *);
 
 
 /*
@@ -90,27 +81,33 @@ static int writeBase64 (CT, FILE *);
  */
 
 int
-output_message (CT ct, char *file)
+output_message_fp (CT ct, FILE *fp, char *file)
 {
-    FILE *fp;
-
-    if ((fp = fopen (file, "w")) == NULL) {
-       advise (file, "unable to open for writing");
-       return NOTOK;
-    }
-
     if (output_content (ct, fp) == NOTOK)
        return NOTOK;
 
     if (fflush (fp)) {
-       advise (file, "error writing to");
+       advise ((file?file:"<FILE*>"), "error writing to");
        return NOTOK;
     }
-    fclose (fp);
-
     return OK;
 }
 
+int
+output_message (CT ct, char *file)
+{
+    FILE *fp;
+    int status;
+
+    if ((fp = fopen (file, "w")) == NULL) {
+       advise (file, "unable to open for writing");
+       return NOTOK;
+    }
+    status = output_message_fp(ct, fp, file);
+    fclose(fp);
+    return status;
+}
+
 
 /*
  * Output a Content structure to a file.
@@ -198,7 +195,7 @@ output_content (CT ct, FILE *out)
 
        case CE_BASE64:
            putc ('\n', out);
-           result = writeBase64 (ct, out);
+           result = writeBase64ct (ct, out);
            break;
 
        case CE_BINARY:
@@ -263,7 +260,7 @@ writeExternalBody (CT ct, FILE *out)
 
            case 'N':
                for (ap = ci2->ci_attrs, ep = ci2->ci_values; *ap; ap++, ep++)
-                   if (!strcasecmp (*ap, "name")) {
+                   if (!mh_strcasecmp (*ap, "name")) {
                        fprintf (out, "%s", *ep);
                        break;
                    }
@@ -410,7 +407,7 @@ three_print:
  */
 
 static int
-writeBase64 (CT ct, FILE *out)
+writeBase64ct (CT ct, FILE *out)
 {
     int        fd, result;
     char *file;
@@ -424,51 +421,3 @@ writeBase64 (CT ct, FILE *out)
     (*ct->c_ceclosefnx) (ct);
     return result;
 }
-
-
-int
-writeBase64aux (FILE *in, FILE *out)
-{
-    int        cc, n;
-    char inbuf[3];
-
-    n = BPERLIN;
-    while ((cc = fread (inbuf, sizeof(*inbuf), sizeof(inbuf), in)) > 0) {
-       unsigned long bits;
-       char *bp;
-       char outbuf[4];
-
-       if (cc < sizeof(inbuf)) {
-           inbuf[2] = 0;
-           if (cc < sizeof(inbuf) - 1)
-               inbuf[1] = 0;
-       }
-       bits = (inbuf[0] & 0xff) << 16;
-       bits |= (inbuf[1] & 0xff) << 8;
-       bits |= inbuf[2] & 0xff;
-
-       for (bp = outbuf + sizeof(outbuf); bp > outbuf; bits >>= 6)
-           *--bp = nib2b64[bits & 0x3f];
-       if (cc < sizeof(inbuf)) {
-           outbuf[3] = '=';
-           if (cc < sizeof inbuf - 1)
-               outbuf[2] = '=';
-       }
-
-       fwrite (outbuf, sizeof(*outbuf), sizeof(outbuf), out);
-
-       if (cc < sizeof(inbuf)) {
-           putc ('\n', out);
-           return OK;
-       }
-
-       if (--n <= 0) {
-           n = BPERLIN;
-           putc ('\n', out);
-       }
-    }
-    if (n != BPERLIN)
-       putc ('\n', out);
-
-    return OK;
-}