mhl and mhbuild ignore to long lines
[mmh] / uip / mhbuild.c
index ec5623a..f9674a3 100644 (file)
@@ -45,12 +45,13 @@ static struct swit switches[] = {
        { NULL, 0 }
 };
 
+char *version=VERSION;
 
 /*
 ** Directory to place tmp files.  This must
 ** be set before these routines are called.
 */
-char *tmp;
+extern char *tmp;
 
 pid_t xpid = 0;
 
@@ -204,7 +205,7 @@ main(int argc, char **argv)
        if ((cp = context_find(nmhstorage)) && *cp)
                tmp = concat(cp, "/", invo_name, NULL);
        else
-               tmp = getcpy(toabsdir(invo_name));
+               tmp = mh_xstrdup(toabsdir(invo_name));
 
        /* Check if we have a file to process */
        if (!compfile)
@@ -333,7 +334,7 @@ build_mime(char *infile)
        /*
        ** Allocate space for primary (outside) content
        */
-       ct = (CT) mh_xcalloc(1, sizeof(*ct));
+       ct = mh_xcalloc(1, sizeof(*ct));
 
        /*
        ** Allocate structure for handling decoded content
@@ -349,6 +350,8 @@ build_mime(char *infile)
        */
        for (compnum = 1, state = FLD2;;) {
                switch (state = m_getfld2(state, &f, in)) {
+               case LENERR2:
+                       state = FLD2;
                case FLD2:
                        compnum++;
 
@@ -371,7 +374,7 @@ build_mime(char *infile)
                        }
 
                        /* add the header data to the list */
-                       add_header(ct, getcpy(f.name), getcpy(f.value));
+                       add_header(ct, mh_xstrdup(f.name), mh_xstrdup(f.value));
 
                        continue;
 
@@ -383,7 +386,6 @@ build_mime(char *infile)
                        adios(EX_CONFIG, NULL, "draft has empty body -- no directives!");
                        /* NOTREACHED */
 
-               case LENERR2:
                case FMTERR2:
                case IOERR2:
                        adios(EX_CONFIG, NULL, "message format error in component #%d",
@@ -409,12 +411,12 @@ build_mime(char *infile)
        ** Now add the MIME-Version header field
        ** to the list of header fields.
        */
-       np = getcpy(VRSN_FIELD);
+       np = mh_xstrdup(VRSN_FIELD);
        vp = concat(" ", VRSN_VALUE, "\n", NULL);
        add_header(ct, np, vp);
 
        /*
-       ** We initally assume we will find multiple contents in the
+       ** We initially assume we will find multiple contents in the
        ** draft.  So create a multipart/mixed content to hold everything.
        ** We can remove this later, if it is not needed.
        */
@@ -423,7 +425,7 @@ build_mime(char *infile)
        }
        ct->c_type = CT_MULTIPART;
        ct->c_subtype = MULTI_MIXED;
-       ct->c_file = getcpy(infile);
+       ct->c_file = mh_xstrdup(infile);
 
        m = (struct multipart *) mh_xcalloc(1, sizeof(*m));
        ct->c_ctparams = (void *) m;
@@ -444,7 +446,7 @@ build_mime(char *infile)
                if (!p)
                        continue;
 
-               part = (struct part *) mh_xcalloc(1, sizeof(*part));
+               part = mh_xcalloc(1, sizeof(*part));
                *pp = part;
                pp = &part->mp_next;
                part->mp_part = p;
@@ -524,7 +526,7 @@ init_decoded_content(CT ct)
 {
        CE ce;
 
-       ce = (CE) mh_xcalloc(1, sizeof(*ce));
+       ce = mh_xcalloc(1, sizeof(*ce));
 
        ct->c_cefile     = ce;
        ct->c_ceopenfnx  = open7Bit;  /* since unencoded */
@@ -584,7 +586,7 @@ user_content(FILE *in, char *file, char *buf, CT *ctp)
        }
 
        /* allocate basic Content structure */
-       ct = (CT) mh_xcalloc(1, sizeof(*ct));
+       ct = mh_xcalloc(1, sizeof(*ct));
        *ctp = ct;
 
        /* allocate basic structure for handling decoded content */
@@ -615,7 +617,7 @@ user_content(FILE *in, char *file, char *buf, CT *ctp)
                        adios(EX_CANTCREAT, "mhbuild", "unable to create temporary file");
 
                /* use a temp file to collect the plain text lines */
-               ce->ce_file = getcpy(cp);
+               ce->ce_file = mh_xstrdup(cp);
                ce->ce_unlink = 1;
 
                if (buf[0] == '#' && buf[1] == '<') {
@@ -797,8 +799,8 @@ use_forw:
                                        continue;
                                if (!*cp)
                                        adios(EX_DATAERR, NULL, "empty pipe command for #%s directive", ci->ci_type);
-                               cp = getcpy(cp);
-                               free(ci->ci_magic);
+                               cp = mh_xstrdup(cp);
+                               mh_free0(&(ci->ci_magic));
                                ci->ci_magic = cp;
                        } else {
                                /* record filename of decoded contents */
@@ -825,7 +827,7 @@ use_forw:
                                exit(EX_CONFIG);
                        }
                }
-               ci->ci_magic = getcpy(cp);
+               ci->ci_magic = mh_xstrdup(cp);
                return OK;
        }
 
@@ -860,13 +862,13 @@ use_forw:
                                if (folder)
                                        adios(EX_USAGE, NULL, "only one folder per #forw directive");
                                else
-                                       folder = getcpy(expandfol(cp));
+                                       folder = mh_xstrdup(expandfol(cp));
                        }
                }
 
                /* else, use the current folder */
                if (!folder)
-                       folder = getcpy(getcurfol());
+                       folder = mh_xstrdup(getcurfol());
 
                if (!(mp = folder_read(folder)))
                        adios(EX_IOERR, NULL, "unable to read folder %s", folder);
@@ -876,7 +878,7 @@ use_forw:
                                if (!m_convert(mp, cp))
                                        exit(EX_USAGE);
                }
-               free(folder);
+               mh_free0(&folder);
                free_ctinfo(ct);
 
                /*
@@ -892,7 +894,7 @@ use_forw:
                        ct->c_type = CT_MULTIPART;
                        ct->c_subtype = MULTI_DIGEST;
 
-                       m = (struct multipart *) mh_xcalloc(1, sizeof(*m));
+                       m = mh_xcalloc(1, sizeof(*m));
                        ct->c_ctparams = (void *) m;
                        pp = &m->mp_parts;
 
@@ -902,7 +904,7 @@ use_forw:
                                        CT p;
                                        CE pe;
 
-                                       p = (CT) mh_xcalloc(1, sizeof(*p));
+                                       p = mh_xcalloc(1, sizeof(*p));
                                        init_decoded_content(p);
                                        pe = p->c_cefile;
                                        if (get_ctinfo("message/rfc822", p, 0)
@@ -914,9 +916,9 @@ use_forw:
                                        snprintf(buffer, sizeof(buffer),
                                                        "%s/%d", mp->foldpath,
                                                        msgnum);
-                                       pe->ce_file = getcpy(buffer);
+                                       pe->ce_file = mh_xstrdup(buffer);
 
-                                       part = (struct part *) mh_xcalloc(1, sizeof(*part));
+                                       part = mh_xcalloc(1, sizeof(*part));
                                        *pp = part;
                                        pp = &part->mp_next;
                                        part->mp_part = p;
@@ -932,7 +934,7 @@ use_forw:
                        msgnum = mp->lowsel;
                        snprintf(buffer, sizeof(buffer), "%s/%d",
                                        mp->foldpath, msgnum);
-                       ce->ce_file = getcpy(buffer);
+                       ce->ce_file = mh_xstrdup(buffer);
                }
 
                folder_free(mp);  /* free folder/message structure */
@@ -975,7 +977,7 @@ use_forw:
                ct->c_type = CT_MULTIPART;
                ct->c_subtype = vrsn;
 
-               m = (struct multipart *) mh_xcalloc(1, sizeof(*m));
+               m = mh_xcalloc(1, sizeof(*m));
                ct->c_ctparams = (void *) m;
 
                pp = &m->mp_parts;
@@ -991,7 +993,7 @@ use_forw:
                        if (!p)
                                continue;
 
-                       part = (struct part *) mh_xcalloc(1, sizeof(*part));
+                       part = mh_xcalloc(1, sizeof(*part));
                        *pp = part;
                        pp = &part->mp_next;
                        part->mp_part = p;
@@ -1021,10 +1023,10 @@ set_id(CT ct, int top)
                snprintf(msgid, sizeof(msgid), "<%d.%ld.%%d@%s>\n",
                                (int) getpid(), (long) clock, LocalName());
                partno = 0;
-               msgfmt = getcpy(msgid);
+               msgfmt = mh_xstrdup(msgid);
        }
        snprintf(msgid, sizeof(msgid), msgfmt, top ? 0 : ++partno);
-       ct->c_id = getcpy(msgid);
+       ct->c_id = mh_xstrdup(msgid);
 }
 
 
@@ -1062,7 +1064,7 @@ compose_content(CT ct)
                        CT p = part->mp_part;
 
                        sprintf(pp, "%d", partnum);
-                       p->c_partno = getcpy(partnam);
+                       p->c_partno = mh_xstrdup(partnam);
                        if (compose_content(p) == NOTOK)
                                return NOTOK;
                }
@@ -1093,7 +1095,7 @@ compose_content(CT ct)
                        if (tfile == NULL) {
                                adios(EX_CANTCREAT, "mhbuild", "unable to create temporary file");
                        }
-                       ce->ce_file = getcpy(tfile);
+                       ce->ce_file = mh_xstrdup(tfile);
                        ce->ce_unlink = 1;
 
                        xstdout = 0;
@@ -1276,13 +1278,8 @@ scan_content(CT ct)
        case CT_TEXT:
                check8bit = 1;
                checkboundary = 1;
-               if (ct->c_subtype == TEXT_PLAIN) {
-                       checklinelen = 0;
-                       checklinespace = 0;
-               } else {
-                       checklinelen = 1;
-                       checklinespace = 1;
-               }
+               checklinelen = 1;
+               checklinespace = 1;
                break;
 
        case CT_MESSAGE:
@@ -1380,7 +1377,7 @@ scan_content(CT ct)
                                                NULL);
                        } else {
                                t->tx_charset = CHARSET_USASCII;
-                               *ap = getcpy("charset=us-ascii");
+                               *ap = mh_xstrdup("charset=us-ascii");
                        }
 
                        cp = strchr(*ap++, '=');
@@ -1442,7 +1439,7 @@ build_headers(CT ct)
                ep = ci->ci_values;
                snprintf(buffer, sizeof(buffer), "boundary=%s%d",
                                prefix, level++);
-               cp = strchr(*ap++ = getcpy(buffer), '=');
+               cp = strchr(*ap++ = mh_xstrdup(buffer), '=');
                *ap = NULL;
                *cp++ = '\0';
                *ep = cp;
@@ -1451,7 +1448,7 @@ build_headers(CT ct)
        /*
        ** output the content type and subtype
        */
-       np = getcpy(TYPE_FIELD);
+       np = mh_xstrdup(TYPE_FIELD);
        vp = concat(" ", ci->ci_type, "/", ci->ci_subtype, NULL);
 
        /* keep track of length of line */
@@ -1501,7 +1498,7 @@ build_headers(CT ct)
        ** output the Content-ID
        */
        if (ct->c_id) {
-               np = getcpy(ID_FIELD);
+               np = mh_xstrdup(ID_FIELD);
                vp = concat(" ", ct->c_id, NULL);
                add_header(ct, np, vp);
        }
@@ -1510,7 +1507,7 @@ build_headers(CT ct)
        ** output the Content-Description
        */
        if (ct->c_descr) {
-               np = getcpy(DESCR_FIELD);
+               np = mh_xstrdup(DESCR_FIELD);
                vp = concat(" ", ct->c_descr, NULL);
                if (encode_rfc2047(DESCR_FIELD, &vp, NULL)) {
                        adios(EX_DATAERR, NULL, "Unable to encode %s header", DESCR_FIELD);
@@ -1522,7 +1519,7 @@ build_headers(CT ct)
        ** output the Content-Disposition
        */
        if (ct->c_dispo) {
-               np = getcpy(DISPO_FIELD);
+               np = mh_xstrdup(DISPO_FIELD);
                vp = concat(" ", ct->c_dispo, NULL);
                add_header(ct, np, vp);
        }
@@ -1539,7 +1536,7 @@ build_headers(CT ct)
                if (ct->c_type == CT_MESSAGE)
                        adios(EX_DATAERR, NULL, "internal error, invalid encoding");
 
-               np = getcpy(ENCODING_FIELD);
+               np = mh_xstrdup(ENCODING_FIELD);
                vp = concat(" ", "8bit", "\n", NULL);
                add_header(ct, np, vp);
                break;
@@ -1548,7 +1545,7 @@ build_headers(CT ct)
                if (ct->c_type == CT_MESSAGE || ct->c_type == CT_MULTIPART)
                        adios(EX_DATAERR, NULL, "internal error, invalid encoding");
 
-               np = getcpy(ENCODING_FIELD);
+               np = mh_xstrdup(ENCODING_FIELD);
                vp = concat(" ", "quoted-printable", "\n", NULL);
                add_header(ct, np, vp);
                break;
@@ -1557,7 +1554,7 @@ build_headers(CT ct)
                if (ct->c_type == CT_MESSAGE || ct->c_type == CT_MULTIPART)
                        adios(EX_DATAERR, NULL, "internal error, invalid encoding");
 
-               np = getcpy(ENCODING_FIELD);
+               np = mh_xstrdup(ENCODING_FIELD);
                vp = concat(" ", "base64", "\n", NULL);
                add_header(ct, np, vp);
                break;
@@ -1566,7 +1563,7 @@ build_headers(CT ct)
                if (ct->c_type == CT_MESSAGE)
                        adios(EX_DATAERR, NULL, "internal error, invalid encoding");
 
-               np = getcpy(ENCODING_FIELD);
+               np = mh_xstrdup(ENCODING_FIELD);
                vp = concat(" ", "binary", "\n", NULL);
                add_header(ct, np, vp);
                break;