}
/* get copies of the buffers */
- np = add (name, NULL);
- vp = add (buf, NULL);
+ np = mh_xstrdup(name);
+ vp = mh_xstrdup(buf);
/* if necessary, get rest of field */
while (state == FLDPLUS) {
*/
if (! dist) {
- np = add (VRSN_FIELD, NULL);
+ np = mh_xstrdup(VRSN_FIELD);
vp = concat (" ", VRSN_VALUE, "\n", NULL);
add_header (ct, np, vp);
}
fgetstr (char *s, int n, FILE *stream)
{
char *cp, *ep;
- int o_n = n;
+ ep = s + n;
while(1) {
- for (ep = (cp = s) + o_n; cp < ep; ) {
- int i;
+ for (cp = s; cp < ep;) {
+ int len;
if (!fgets (cp, n, stream))
- return (cp != s ? s : NULL);
+ return cp == s ? NULL : s; /* "\\\nEOF" ignored. */
- if (cp == s && *cp != '#')
- return s;
+ if (! do_direct() || (cp == s && *cp != '#'))
+ return s; /* Plaintext line. */
- cp += (i = strlen (cp)) - 1;
- if (i <= 1 || *cp-- != '\n' || *cp != '\\')
+ len = strlen(cp);
+ if (len <= 1)
+ break; /* Can't contain "\\\n". */
+ cp += len - 1; /* Just before NUL. */
+ if (*cp-- != '\n' || *cp != '\\')
break;
- *cp = '\0';
- n -= (i - 2);
+ *cp = '\0'; /* Erase the trailing "\\\n". */
+ n -= (len - 2);
}
if (strcmp(s, "#on\n") == 0) {
} else if (strcmp(s, "#pop\n") == 0) {
directive_pop();
} else {
- break;
+ return s;
}
}
-
- return s;
}
}
/* use a temp file to collect the plain text lines */
- ce->ce_file = add (cp, NULL);
+ ce->ce_file = mh_xstrdup(cp);
ce->ce_unlink = 1;
if (do_direct() && (buf[0] == '#' && buf[1] == '<')) {
continue;
if (!*cp)
adios (NULL, "empty pipe command for #%s directive", ci->ci_type);
- cp = add (cp, NULL);
+ cp = mh_xstrdup(cp);
free (ci->ci_magic);
ci->ci_magic = cp;
} else {
content_error (NULL, ct, "don't know how to compose content");
done (1);
}
- ci->ci_magic = add (cp, NULL);
+ ci->ci_magic = mh_xstrdup(cp);
return OK;
}
p->c_subtype = MESSAGE_RFC822;
snprintf (buffer, sizeof(buffer), "%s/%d", mp->foldpath, msgnum);
- pe->ce_file = add (buffer, NULL);
+ pe->ce_file = mh_xstrdup(buffer);
if (listsw && stat (pe->ce_file, &st) != NOTOK)
p->c_end = (long) st.st_size;
msgnum = mp->lowsel;
snprintf (buffer, sizeof(buffer), "%s/%d", mp->foldpath, msgnum);
- ce->ce_file = add (buffer, NULL);
+ ce->ce_file = mh_xstrdup(buffer);
if (listsw && stat (ce->ce_file, &st) != NOTOK)
ct->c_end = (long) st.st_size;
}
CT p = part->mp_part;
sprintf (pp, "%d", partnum);
- p->c_partno = add (partnam, NULL);
+ p->c_partno = mh_xstrdup(partnam);
if (compose_content (p, verbose) == NOTOK)
return NOTOK;
}
adios("mhbuildsbr", "unable to create temporary file in %s",
get_temp_dir());
}
- ce->ce_file = add (tfile, NULL);
+ ce->ce_file = mh_xstrdup(tfile);
ce->ce_unlink = 1;
xstdout = 0;
/*
* output the content type and subtype
*/
- np = add (TYPE_FIELD, NULL);
+ np = mh_xstrdup(TYPE_FIELD);
vp = concat (" ", ci->ci_type, "/", ci->ci_subtype, NULL);
/* keep track of length of line */
* output the Content-ID, unless disabled by -nocontentid
*/
if (contentidsw && ct->c_id) {
- np = add (ID_FIELD, NULL);
+ np = mh_xstrdup(ID_FIELD);
vp = concat (" ", ct->c_id, NULL);
add_header (ct, np, vp);
}
* output the Content-Description
*/
if (ct->c_descr) {
- np = add (DESCR_FIELD, NULL);
+ np = mh_xstrdup(DESCR_FIELD);
vp = concat (" ", ct->c_descr, NULL);
if (header_encoding != CE_8BIT) {
if (encode_rfc2047(DESCR_FIELD, &vp, header_encoding, NULL)) {
* set, then we need to build it.
*/
if (ct->c_dispo) {
- np = add (DISPO_FIELD, NULL);
+ np = mh_xstrdup(DISPO_FIELD);
vp = concat (" ", ct->c_dispo, NULL);
add_header (ct, np, vp);
} else if (ct->c_dispo_type) {
* output the Content-MD5
*/
if (checksw) {
- np = add (MD5_FIELD, NULL);
+ np = mh_xstrdup(MD5_FIELD);
vp = calculate_digest (ct, (ct->c_encoding == CE_QUOTED) ? 1 : 0);
add_header (ct, np, vp);
}
break;
case CE_8BIT:
- np = add (ENCODING_FIELD, NULL);
+ np = mh_xstrdup(ENCODING_FIELD);
vp = concat (" ", "8bit", "\n", NULL);
add_header (ct, np, vp);
break;
if (ct->c_type == CT_MESSAGE || ct->c_type == CT_MULTIPART)
adios (NULL, "internal error, invalid encoding");
- np = add (ENCODING_FIELD, NULL);
+ np = mh_xstrdup(ENCODING_FIELD);
vp = concat (" ", "quoted-printable", "\n", NULL);
add_header (ct, np, vp);
break;
if (ct->c_type == CT_MESSAGE || ct->c_type == CT_MULTIPART)
adios (NULL, "internal error, invalid encoding");
- np = add (ENCODING_FIELD, NULL);
+ np = mh_xstrdup(ENCODING_FIELD);
vp = concat (" ", "base64", "\n", NULL);
add_header (ct, np, vp);
break;
if (ct->c_type == CT_MESSAGE)
adios (NULL, "internal error, invalid encoding");
- np = add (ENCODING_FIELD, NULL);
+ np = mh_xstrdup(ENCODING_FIELD);
vp = concat (" ", "binary", "\n", NULL);
add_header (ct, np, vp);
break;