X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fslocal.c;fp=uip%2Fslocal.c;h=f8f9d9537931be93650a662e70d8cfff4b4e4423;hp=18c4a5820accd038be8b78e1e1aef487863be509;hb=04a3dfc70394a517a79340a7d3ecd9c6a23d0bee;hpb=bd02210b2be64956a952f925a2dcd35fb42f6136 diff --git a/uip/slocal.c b/uip/slocal.c index 18c4a58..f8f9d95 100644 --- a/uip/slocal.c +++ b/uip/slocal.c @@ -724,10 +724,10 @@ split(char *cp, char **vec) static int parse(int fd) { - int i, state; - int fd1; + enum state state; + struct field f = {{0}}; + int i, fd1; char *cp, *dp, *lp; - char name[NAMESZ], field[BUFSIZ]; struct pair *p, *q; FILE *in; @@ -756,19 +756,12 @@ parse(int fd) /* ** Scan the headers of the message and build a lookup table. */ - for (i = 0, state = FLD;;) { - switch (state = m_getfld(state, name, field, sizeof(field), - in)) { - case FLD: - case FLDPLUS: - lp = mh_xstrdup(field); - while (state == FLDPLUS) { - state = m_getfld(state, name, field, - sizeof(field), in); - lp = add(field, lp); - } + for (i = 0, state = FLD2;;) { + switch (state = m_getfld2(state, &f, in)) { + case FLD2: + lp = mh_xstrdup(f.value); for (p = hdrs; p->p_name; p++) { - if (mh_strcasecmp(p->p_name, name)!=0) { + if (mh_strcasecmp(p->p_name, f.name)!=0) { if (!(p->p_flags & P_HID)) { if ((cp = p->p_value)) { if (p->p_flags & P_ADR) { @@ -788,7 +781,7 @@ parse(int fd) } } if (!p->p_name && i < NVEC) { - p->p_name = mh_xstrdup(name); + p->p_name = mh_xstrdup(f.name); p->p_value = lp; p->p_flags = P_NIL; p++, i++; @@ -796,12 +789,13 @@ parse(int fd) } continue; - case BODY: - case FILEEOF: + case BODY2: + case FILEEOF2: break; - case LENERR: - case FMTERR: + case LENERR2: + case FMTERR2: + case IOERR2: advise(NULL, "format error in message"); break;