X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fmhbuild.c;h=c0320226daf06050cc6a303479e422f234c1a6e1;hp=c4b1c607e8df3d18cabda2c759f3151c85c3a55a;hb=HEAD;hpb=a87df3543d3bc128ba4079d1f95638476ba5ca50 diff --git a/uip/mhbuild.c b/uip/mhbuild.c index c4b1c60..f9674a3 100644 --- a/uip/mhbuild.c +++ b/uip/mhbuild.c @@ -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) @@ -313,7 +314,7 @@ static CT build_mime(char *infile) { enum state state; - struct field f = free_field; + struct field f = {{0}}; int compnum; char buf[BUFSIZ]; char *cp, *np, *vp; @@ -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;