char *cp, *msg = NULL, **argp, **arguments, *envelope;
char buf[NMH_BUFSIZ], name[NAMESZ], *auth_svc = NULL;
FILE *in, *out;
- m_getfld_state_t gstate = 0;
+ m_getfld_state_t gstate;
if (nmh_init(argv[0], 0 /* use context_foil() */)) { return 1; }
hdrtab = msgstate == NORMAL ? NHeaders : RHeaders;
+ gstate = m_getfld_state_init(in);
for (compnum = 1;;) {
int bufsz = sizeof buf;
- switch (state = m_getfld (&gstate, name, buf, &bufsz, in)) {
+ switch (state = m_getfld2(&gstate, name, buf, &bufsz)) {
case FLD:
case FLDPLUS:
compnum++;
cp = mh_xstrdup(buf);
while (state == FLDPLUS) {
bufsz = sizeof buf;
- state = m_getfld (&gstate, name, buf, &bufsz, in);
+ state = m_getfld2(&gstate, name, buf, &bufsz);
cp = add (buf, cp);
}
putfmt (name, cp, &eai, out);
fprintf (out, "\n%s", buf);
while (state == BODY) {
bufsz = sizeof buf;
- state = m_getfld (&gstate, name, buf, &bufsz, in);
+ state = m_getfld2(&gstate, name, buf, &bufsz);
fputs (buf, out);
}
break;
if ((msgstate == RESENT) ? (hdr->set & MRFM) : (hdr->set & MFRM)) {
savehdr = fullfrom;
savehdr[0] = '\0';
- savehdlen = sizeof(fullfrom);
+ savehdrlen = sizeof(fullfrom);
}
tmpaddrs.m_next = NULL;
mnfree (mp);
}
-#error
- strncpy(fullfrom, str, sizeof(fullfrom));
- fullfrom[sizeof(fullfrom) - 1] = 0;
- /*
- * Strip off any trailing newlines
- */
+ /*
+ * If it was a From header, strip off any trailing newlines from
+ * the alias-expanded From line.
+ */
+ if ((msgstate == RESENT) ? (hdr->set & MRFM) : (hdr->set & MFRM)) {
while (*fullfrom && fullfrom[strlen(fullfrom) - 1] == '\n') {
fullfrom[strlen(fullfrom) - 1] = '\0';
}
fputs (cp, out);
if (saveappend && shlen + len < savehdrsize)
- strncat(savehdr, out);
+ strncat(savehdr, cp, savehdrsize - shlen + len);
linepos += len;