X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fmhl.c;h=c089d8e0bab3a6500b0a732d13d1aeb8bb44696a;hp=e4e8dbf31dd10fd9dd4e7f348b218ab9f72f9b0d;hb=04a3dfc70394a517a79340a7d3ecd9c6a23d0bee;hpb=bd02210b2be64956a952f925a2dcd35fb42f6136 diff --git a/uip/mhl.c b/uip/mhl.c index e4e8dbf..c089d8e 100644 --- a/uip/mhl.c +++ b/uip/mhl.c @@ -597,16 +597,18 @@ process(char *fname, int ofilen, int ofilec) 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) { @@ -615,84 +617,86 @@ mhlfile(FILE *fp, char *mname, int ofilen, int ofilec) 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); mh_free0(&(holder.c_text)); 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_xcalloc(sizeof(buf), sizeof(char)); - strncpy(holder.c_text, buf, sizeof(buf)); - while (state == BODY) { + if (dobody && mh_strcasecmp(c1->c_name, "body")==0) { + holder.c_text = mh_xstrdup(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 = mh_xstrdup(f.value); } mh_free0(&(holder.c_text)); 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 IOERR2: advise(NULL, "format error in message %s", mname); exitstat++; return;