X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Frcvdist.c;h=b54bc39994b96f702f9c7a0f903272ccbbee20f9;hp=89bb1dc5747b37eec751b85c203c69bc89d6e547;hb=a87df3543d3bc128ba4079d1f95638476ba5ca50;hpb=5ba9c2f13fedf1d8d6ed907ef1f505616290efaa diff --git a/uip/rcvdist.c b/uip/rcvdist.c index 89bb1dc..b54bc39 100644 --- a/uip/rcvdist.c +++ b/uip/rcvdist.c @@ -126,13 +126,9 @@ main(int argc, char **argv) /* very similar to routine in replsbr.c */ -#define SBUFSIZ 256 - static struct format *fmt; static int ncomps = 0; -static char **compbuffers = 0; -static struct comp **used_buf = 0; static int dat[5]; @@ -156,10 +152,12 @@ static char *addrcomps[] = { static void rcvdistout(FILE *inb, char *form, char *addrs) { - int char_read = 0, format_len, i, state; - char *tmpbuf, **nxtbuf, **ap; - char *cp, *scanl, name[NAMESZ]; - struct comp *cptr, **savecomp; + int char_read = 0, format_len, i; + enum state state; + struct field f = free_field; + char **ap; + char *cp, *scanl; + struct comp *cptr; FILE *out; if (!(out = fopen(drft, "w"))) { @@ -170,23 +168,6 @@ rcvdistout(FILE *inb, char *form, char *addrs) cp = new_fs(form ? form : rcvdistcomps, NULL); format_len = strlen(cp); ncomps = fmt_compile(cp, &fmt) + 1; - if (!(nxtbuf = compbuffers = - (char **) calloc((size_t) ncomps, sizeof(char *)))) { - adios(EX_OSERR, NULL, "unable to allocate component buffers"); - } - if (!(savecomp = used_buf = - (struct comp **) calloc((size_t) (ncomps + 1), - sizeof(struct comp *)))) { - adios(EX_OSERR, NULL, "unable to allocate component buffer stack"); - } - savecomp += ncomps + 1; - *--savecomp = 0; - - for (i = ncomps; i--;) { - *nxtbuf++ = mh_xmalloc(SBUFSIZ); - } - nxtbuf = compbuffers; - tmpbuf = *nxtbuf++; for (ap = addrcomps; *ap; ap++) { FINDCOMP(cptr, *ap); @@ -199,22 +180,19 @@ rcvdistout(FILE *inb, char *form, char *addrs) if (cptr) { cptr->c_text = addrs; } - state = FLD; + state = FLD2; while (1) { - state = m_getfld(state, name, tmpbuf, SBUFSIZ, inb); + state = m_getfld2(state, &f, inb); switch (state) { - case FLD: - case FLDPLUS: - if ((cptr = wantcomp[CHASH(name)])) { + case FLD2: + if ((cptr = wantcomp[CHASH(f.name)])) { do { - if (mh_strcasecmp(name, cptr->c_name)!=0) { + if (mh_strcasecmp(f.name, cptr->c_name)!=0) { continue; } - char_read += msg_count; + char_read += strlen(f.value); if (!cptr->c_text) { - cptr->c_text = tmpbuf; - *--savecomp = cptr; - tmpbuf = *nxtbuf++; + cptr->c_text = getcpy(f.value); } else { cp = cptr->c_text; i = strlen(cp) - 1; @@ -226,27 +204,18 @@ rcvdistout(FILE *inb, char *form, char *addrs) cp = add("\t", cp); } } - cptr->c_text = add(tmpbuf, cp); - } - while (state == FLDPLUS) { - state = m_getfld(state, name, tmpbuf, SBUFSIZ, inb); - cptr->c_text = add(tmpbuf, cptr->c_text); - char_read += msg_count; + cptr->c_text = add(f.value, cp); } break; } while ((cptr = cptr->c_next)); } - - while (state == FLDPLUS) { - state = m_getfld(state, name, tmpbuf, - SBUFSIZ, inb); - } break; - case LENERR: - case FMTERR: - case BODY: - case FILEEOF: + case LENERR2: + case FMTERR2: + case IOERR2: + case BODY2: + case FILEEOF2: goto finished; default: @@ -268,15 +237,6 @@ finished: ; fclose(out); free(scanl); - for (nxtbuf = compbuffers, i = ncomps; (cptr = *savecomp++); - nxtbuf++, i--) { - free(cptr->c_text); - } - while (i-- > 0) { - free(*nxtbuf++); - } - free(compbuffers); - free(used_buf); }