static void
mhlfile(FILE *fp, char *mname, int ofilen, int ofilec)
{
- int state;
+ enum state state;
+ struct field f = {{0}};
struct mcomp *c1, *c2, *c3;
- char **ip, name[NAMESZ], buf[BUFSIZ];
+ char **ip;
if (forwall) {
printf("\n-------");
- if (ofilen == 1)
+ if (ofilen == 1) {
printf(" Forwarded Message%s", ofilec > 1 ? "s" : "");
- else
+ } else {
printf(" Message %d", ofilen);
+ }
printf("\n\n");
} else if (ofilec > 1) {
if (ofilen > 1) {
printf(">>> %s\n\n", mname);
}
- for (state = FLD;!eflag;) {
- switch (state = m_getfld(state, name, buf, sizeof(buf), fp)) {
- case FLD:
- case FLDPLUS:
+ for (state = FLD2; !eflag; ) {
+ switch (state = m_getfld2(state, &f, fp)) {
+ case FLD2:
for (ip = ignores; *ip; ip++)
- if (!mh_strcasecmp(name, *ip)) {
- while (state == FLDPLUS)
- state = m_getfld(state, name, buf, sizeof(buf), fp);
+ if (mh_strcasecmp(f.name, *ip)==0) {
break;
}
- if (*ip)
+ if (*ip) {
continue;
+ }
for (c2 = fmthd; c2; c2 = c2->c_next)
- if (!mh_strcasecmp(c2->c_name, name))
+ if (mh_strcasecmp(c2->c_name, f.name)==0) {
break;
+ }
c1 = NULL;
if (!((c3 = c2 ? c2 : &global)->c_flags & SPLIT))
for (c1 = msghd; c1; c1 = c1->c_next)
- if (!mh_strcasecmp(c1->c_name,
- c3->c_name)) {
- c1->c_text = mcomp_add(c1->c_flags, buf, c1->c_text);
+ if (mh_strcasecmp(c1->c_name,
+ c3->c_name)==0) {
+ c1->c_text = mcomp_add(c1->c_flags, f.value, c1->c_text);
break;
}
- if (c1 == NULL)
- c1 = add_queue(&msghd, &msgtl, name, buf, 0);
- while (state == FLDPLUS) {
- state = m_getfld(state, name, buf,
- sizeof(buf), fp);
- c1->c_text = add(buf, c1->c_text);
+ if (c1 == NULL) {
+ c1 = add_queue(&msghd, &msgtl, f.name, f.value, 0);
}
- if (c2 == NULL)
+ if (c2 == NULL) {
c1->c_flags |= EXTRA;
+ }
continue;
- case BODY:
- case FILEEOF:
+ case BODY2:
+ case FILEEOF2:
column = 0;
for (c1 = fmthd; c1; c1 = c1->c_next) {
if (c1->c_flags & CLEARTEXT) {
putcomp(c1, c1, ONECOMP);
continue;
}
- if (!mh_strcasecmp(c1->c_name, "messagename")) {
+ if (mh_strcasecmp(c1->c_name, "messagename")==0) {
holder.c_text = concat("(Message ",
mname, ")\n", NULL);
putcomp(c1, &holder, ONECOMP);
holder.c_text = NULL;
continue;
}
- if (!mh_strcasecmp(c1->c_name, "extras")) {
- for (c2 = msghd; c2; c2 = c2->c_next)
- if (c2->c_flags & EXTRA)
+ if (mh_strcasecmp(c1->c_name, "extras")==0) {
+ for (c2 = msghd; c2; c2 = c2->c_next) {
+ if (c2->c_flags & EXTRA) {
putcomp(c1, c2, TWOCOMP);
+ }
+ }
continue;
}
- if (dobody && !mh_strcasecmp(c1->c_name, "body")) {
- holder.c_text = mh_xmalloc(sizeof(buf));
- strncpy(holder.c_text, buf, sizeof(buf));
- while (state == BODY) {
+ if (dobody && mh_strcasecmp(c1->c_name, "body")==0) {
+ holder.c_text = getcpy(f.value);
+ while (state == BODY2) {
putcomp(c1, &holder, BODYCOMP);
- state = m_getfld(state, name, holder.c_text, sizeof(buf), fp);
+ state = m_getfld2(state, &f, fp);
+ free(holder.c_text);
+ holder.c_text = getcpy(f.value);
}
free(holder.c_text);
holder.c_text = NULL;
continue;
}
- for (c2 = msghd; c2; c2 = c2->c_next)
- if (!mh_strcasecmp(c2->c_name,
- c1->c_name)) {
+ for (c2 = msghd; c2; c2 = c2->c_next) {
+ if (mh_strcasecmp(c2->c_name,
+ c1->c_name)==0) {
putcomp(c1, c2, ONECOMP);
- if (!(c1->c_flags & SPLIT))
+ if (!(c1->c_flags & SPLIT)) {
break;
+ }
}
+ }
}
return;
- case LENERR:
- case FMTERR:
+ case LENERR2:
+ case FMTERR2:
+ case ERR2:
advise(NULL, "format error in message %s", mname);
exitstat++;
return;