X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=uip%2Fpick.c;h=3ac9e1101e7d3cb25a47c09038bf79a11398ab80;hb=5ed626079bc1aaba6d0daea2b32c43cb463244bb;hp=8448d968bc8ee654c1eb9e86f71bcfe699c2c81e;hpb=f16ae6eedeacce086d513e10461938c1650e265e;p=mmh diff --git a/uip/pick.c b/uip/pick.c index 8448d96..3ac9e11 100644 --- a/uip/pick.c +++ b/uip/pick.c @@ -1017,15 +1017,17 @@ plist p1 = linebuf; p2 = n->n_expbuf; - /* Attempt to decode as a MIME header. If it's the last header, - * body will be 1 and lf will be at least 1. */ - if ((body == 0 || lf > 0) && - decode_rfc2047 (linebuf, decoded_linebuf, sizeof decoded_linebuf)) { - p1 = decoded_linebuf; + /* + ** Attempt to decode as a MIME header. If it's the + ** last header, body will be 1 and lf will be at least 1. + */ + if ((body == 0 || lf > 0) && decode_rfc2047(linebuf, + decoded_linebuf, sizeof decoded_linebuf)) { + p1 = decoded_linebuf; } if (n->n_circf) { - if (advance(p1, p2)) + if (advance(p1, p2)) return 1; continue; } @@ -1241,41 +1243,36 @@ 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 FLDEOF: - case FLDPLUS: - if (bp != NULL) { + for (state = FLD2, bp = NULL;;) { + switch (state = m_getfld2(state, &f, fp)) { + case FLD2: + if (bp) { free(bp); bp = NULL; } - bp = getcpy(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 = getcpy(f.value); + if (mh_strcasecmp(f.name, n->n_datef)==0) { break; - if (state != FLDEOF) - continue; + } + continue; + + case LENERR2: + case FMTERR2: + case ERR2: + advise(NULL, "format error in message %d", msgnum); + /* FALL */ - case BODY: - case BODYEOF: - case FILEEOF: - case LENERR: - case FMTERR: - if (state == LENERR || state == FMTERR) - advise(NULL, "format error in message %d", msgnum); - if (bp != NULL) + case BODY2: + case FILEEOF2: + if (bp) { free(bp); + } return 0; default: