X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Frepl.c;h=cd0f6beb96a6c7bc019991f4a474bfde795a9fca;hp=0ff86b817070ead900bd2104da935a2e1c48a0c8;hb=b78007de9802005825390bee71dfce2306b42519;hpb=cf1205b5cbea2f0cd6ea710ec16c637df85b647c diff --git a/uip/repl.c b/uip/repl.c index 0ff86b8..cd0f6be 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; @@ -388,12 +388,12 @@ static void replout(FILE *inb, char *drft, struct msgs *mp, int mime, char *form, char *filter) { - register int state, i; - register struct comp *cptr; - register char *tmpbuf; - register char **nxtbuf; - register char **ap; - register struct comp **savecomp; + int state, i; + struct comp *cptr; + char *tmpbuf; + char **nxtbuf; + char **ap; + struct comp **savecomp; int char_read = 0, format_len, mask; char name[NAMESZ], *scanl; unsigned char *cp; @@ -412,17 +412,13 @@ 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 = mh_xcalloc(ncomps, sizeof(char *)); + savecomp = used_buf = mh_xcalloc(ncomps+1, sizeof(struct comp *)); savecomp += ncomps + 1; *--savecomp = NULL; /* point at zero'd end minus 1 */ for (i = ncomps; i--; ) - *nxtbuf++ = mh_xmalloc(SBUFSIZ); + *nxtbuf++ = mh_xcalloc(SBUFSIZ, sizeof(char)); nxtbuf = compbuffers; /* point at start */ tmpbuf = *nxtbuf++; @@ -527,7 +523,7 @@ finished: */ FINDCOMP(cptr, "subject") if (cptr && (cp = cptr->c_text)) { - register char *sp = cp; + char *sp = cp; for (;;) { while (isspace(*cp)) @@ -545,7 +541,7 @@ finished: } } i = format_len + char_read + 256; - scanl = mh_xmalloc((size_t) i + 2); + scanl = mh_xcalloc(i + 2, sizeof(char)); dat[0] = 0; dat[1] = 0; dat[2] = 0; @@ -638,17 +634,17 @@ static unsigned int bufsiz=0; /* current size of buf */ char * formataddr(char *orig, char *str) { - register int len; + int len; char baddr[BUFSIZ], error[BUFSIZ]; - register int isgroup; - register char *dst; - register char *cp; - register char *sp; - register struct mailname *mp = NULL; + int isgroup; + char *dst; + char *cp; + char *sp; + struct mailname *mp = NULL; /* if we don't have a buffer yet, get one */ if (bufsiz == 0) { - buf = mh_xmalloc(BUFINCR); + buf = mh_xcalloc(BUFINCR, sizeof(char)); last_dst = buf; /* XXX */ bufsiz = BUFINCR - 6; /* leave some slop */ bufend = buf + bufsiz; @@ -710,7 +706,7 @@ static int insert(struct mailname *np) { char buffer[BUFSIZ]; - register struct mailname *mp; + struct mailname *mp; if (np->m_mbox == NULL) return 0; @@ -742,7 +738,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 +751,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