X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fmhparse.c;h=b144c375a2cf43e4c9f65304d06ee893eb9048c6;hp=488557281a2553ea7b70e714ea3f06f3ea69fa08;hb=1e99819ed105950cd584c71fa4b2e36b038be102;hpb=4e6362c1749f16f1b09fb04d5951a03c1d9aa9cd diff --git a/uip/mhparse.c b/uip/mhparse.c index 4885572..b144c37 100644 --- a/uip/mhparse.c +++ b/uip/mhparse.c @@ -231,9 +231,9 @@ parse_mime(char *file) static CT get_content(FILE *in, char *file, int toplevel) { - int compnum, state; - char buf[BUFSIZ], name[NAMESZ]; - char *np, *vp; + enum state state; + struct field f = {{0}}; + int compnum; CT ct; HF hp; @@ -249,47 +249,34 @@ get_content(FILE *in, char *file, int toplevel) ** Parse the header fields for this ** content into a linked list. */ - for (compnum = 1, state = FLD;;) { - switch (state = m_getfld(state, name, buf, sizeof(buf), in)) { - case FLD: - case FLDPLUS: + for (compnum = 1, state = FLD2;;) { + switch (state = m_getfld2(state, &f, in)) { + case FLD2: compnum++; - /* get copies of the buffers */ - np = getcpy(name); - vp = getcpy(buf); - - /* if necessary, get rest of field */ - while (state == FLDPLUS) { - state = m_getfld(state, name, buf, - sizeof(buf), in); - vp = add(buf, vp); /* add to previous value */ - } - - /* Now add the header data to the list */ - add_header(ct, np, vp); + /* add the header data to the list */ + add_header(ct, getcpy(f.name), getcpy(f.value)); ct->c_begin = ftell(in) + 1; continue; - case BODY: - ct->c_begin = ftell(in) - strlen(buf); + case BODY2: + ct->c_begin = ftell(in) - strlen(f.value); break; - case FILEEOF: + case FILEEOF2: ct->c_begin = ftell(in); break; - case LENERR: - case FMTERR: + case LENERR2: + case FMTERR2: + case ERR2: adios(EX_DATAERR, NULL, "message format error in component #%d", compnum); default: adios(EX_SOFTWARE, NULL, "getfld() returned %d", state); } - - /* break out of the loop */ break; }