X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;ds=sidebyside;f=uip%2Frepl.c;h=71ae98e74f62e998565144fa8368684d8bcfc385;hb=e9df3f1a429daaca00025e76ce8850d104311ee1;hp=33d4bf5510fda9df74c5383c747dba6172fe7a55;hpb=5ba9c2f13fedf1d8d6ed907ef1f505616290efaa;p=mmh diff --git a/uip/repl.c b/uip/repl.c index 33d4bf5..71ae98e 100644 --- a/uip/repl.c +++ b/uip/repl.c @@ -412,12 +412,10 @@ replout(FILE *inb, char *drft, struct msgs *mp, /* compile format string */ 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"); + nxtbuf = compbuffers = (char **) + mh_xcalloc((size_t) ncomps, sizeof(char *)); + savecomp = used_buf = (struct comp **) + mh_xcalloc((size_t) (ncomps+1), sizeof(struct comp *)); savecomp += ncomps + 1; *--savecomp = NULL; /* point at zero'd end minus 1 */ @@ -742,7 +740,8 @@ insert(struct mailname *np) static void replfilter(FILE *in, FILE *out, char *filter) { - int pid, n; + int pid, pid_show, n; + int mailpipe[2]; char *errstr; if (filter == NULL) @@ -754,12 +753,32 @@ replfilter(FILE *in, FILE *out, char *filter) rewind(in); lseek(fileno(in), (off_t) 0, SEEK_SET); - switch (pid = fork()) { + if (pipe(mailpipe) == -1) { + adios(EX_OSERR, "pipe", "can't create pipe"); + } + + switch (pid_show = fork()) { case NOTOK: adios(EX_OSERR, "fork", "unable to"); case OK: dup2(fileno(in), fileno(stdin)); + dup2(mailpipe[1], fileno(stdout)); + for (n=3; n