X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;ds=sidebyside;f=uip%2Frepl.c;h=f1e4bcc431dd213d30728fd5016090b3f43ffd2f;hb=d6742b1bb19c7eca8488402484a6e4f55543d789;hp=33d4bf5510fda9df74c5383c747dba6172fe7a55;hpb=5ba9c2f13fedf1d8d6ed907ef1f505616290efaa;p=mmh diff --git a/uip/repl.c b/uip/repl.c index 33d4bf5..f1e4bcc 100644 --- a/uip/repl.c +++ b/uip/repl.c @@ -145,14 +145,14 @@ main(int argc, char **argv) FILE *in; int buildsw = 0; - filter = getcpy(etcpath(mhlreply)); - setlocale(LC_ALL, ""); invo_name = mhbasename(argv[0]); /* read user profile/context */ context_read(); + filter = getcpy(etcpath(mhlreply)); + arguments = getarguments(invo_name, argc, argv, 1); argp = arguments; @@ -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