X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fpick.c;h=4cb33fb189b7aa92494543ff65234022d6c2d246;hp=1df59b186f3fae1d7ad09b6a559f581d9a136855;hb=6e9577f324bef90765a5edc02044eb111ec48072;hpb=9cf6132a6ea29968131a000bc2fb6860affac45e diff --git a/uip/pick.c b/uip/pick.c index 1df59b1..4cb33fb 100644 --- a/uip/pick.c +++ b/uip/pick.c @@ -70,6 +70,8 @@ static struct swit switches[] = { { NULL, 0 } }; +char *version=VERSION; + /* ** static prototypes */ @@ -1241,37 +1243,40 @@ static int TWSaction(params) plist { - int state; + enum state state; + struct field f = {{0}}; char *bp; - char buf[BUFSIZ], name[NAMESZ]; struct tws *tw; fseek(fp, start, SEEK_SET); - for (state = FLD, bp = NULL;;) { - switch (state = m_getfld(state, name, buf, sizeof buf, fp)) { - case FLD: - case FLDPLUS: - if (bp != NULL) { + for (state = FLD2, bp = NULL;;) { + switch (state = m_getfld2(state, &f, fp)) { + case LENERR2: + state = FLD2; + /* FALL */ + + case FLD2: + if (bp) { mh_free0(&bp); } - bp = mh_xstrdup(buf); - while (state == FLDPLUS) { - state = m_getfld(state, name, buf, - sizeof buf, fp); - bp = add(buf, bp); - } - if (!mh_strcasecmp(name, n->n_datef)) + bp = mh_xstrdup(f.value); + if (mh_strcasecmp(f.name, n->n_datef)==0) { break; + } continue; - case BODY: - case FILEEOF: - case LENERR: - case FMTERR: - if (state == LENERR || state == FMTERR) - advise(NULL, "format error in message %d", msgnum); - if (bp != NULL) - mh_free0(&bp); + case FMTERR2: + advise(NULL, "format error in message %d", msgnum); + state = FLD2; + continue; + + case IOERR2: + adios(EX_IOERR, "m_getfld2", "io error on message %d", msgnum); + /* FALL */ + + case BODY2: + case FILEEOF2: + mh_free0(&bp); return 0; default: