X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Frepl.c;h=e3028fad39f295763c6d4ebf2d9670c93e716efc;hp=c0b290de7bae568024cfd5f892bd9a46d6d6e0f3;hb=a8984c0e490cda653615bc0e1d4743ad8fe7a2a7;hpb=e16d5bfc58d8b0dfe61701cd4d6b1732e837d60a diff --git a/uip/repl.c b/uip/repl.c index c0b290d..e3028fa 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 = mh_xstrdup(etcpath(mhlreply)); + arguments = getarguments(invo_name, argc, argv, 1); argp = arguments; @@ -223,7 +223,7 @@ main(int argc, char **argv) if (!(cp = *argp++) || *cp == '-') adios(EX_USAGE, NULL, "missing argument to %s", argp[-2]); - file = getcpy(expanddir(cp)); + file = mh_xstrdup(expanddir(cp)); continue; case FORMSW: if (!(form = *argp++) || *form == '-') @@ -235,7 +235,7 @@ main(int argc, char **argv) if (!(cp = *argp++) || *cp == '-') adios(EX_USAGE, NULL, "missing argument to %s", argp[-2]); - filter = getcpy(etcpath(cp)); + filter = mh_xstrdup(etcpath(cp)); continue; case NFILTSW: filter = NULL; @@ -261,7 +261,7 @@ main(int argc, char **argv) if (folder) adios(EX_USAGE, NULL, "only one folder at a time!"); else - folder = getcpy(expandfol(cp)); + folder = mh_xstrdup(expandfol(cp)); } else { if (msg) adios(EX_USAGE, NULL, "only one message at a time!"); @@ -277,7 +277,7 @@ main(int argc, char **argv) if (ccme == -1) ccme = groupreply; - cwd = getcpy(pwd()); + cwd = mh_xstrdup(pwd()); if (file && (msg || folder)) adios(EX_USAGE, NULL, "can't mix files and folders/msgs"); @@ -331,7 +331,7 @@ main(int argc, char **argv) context_save(); /* save the context file */ } - msg = file ? file : getcpy(m_name(mp->lowsel)); + msg = file ? file : mh_xstrdup(m_name(mp->lowsel)); if ((in = fopen(msg, "r")) == NULL) adios(EX_IOERR, msg, "unable to open"); @@ -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 **) - mh_xcalloc((size_t) ncomps, sizeof(char *)))) - adios(EX_OSERR, NULL, "unable to allocate component buffers"); - if (!(savecomp = used_buf = (struct comp **) - mh_xcalloc((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++; @@ -449,7 +445,7 @@ replout(FILE *inb, char *drft, struct msgs *mp, if ((cp = getenv("USER"))) { FINDCOMP(cptr, "user"); if (cptr) - cptr->c_text = getcpy(cp); + cptr->c_text = mh_xstrdup(cp); } if (!ccme) ismymbox(NULL); @@ -540,12 +536,12 @@ finished: } if (sp != cptr->c_text) { cp = cptr->c_text; - cptr->c_text = getcpy(sp); - free(cp); + cptr->c_text = mh_xstrdup(sp); + mh_free0(&cp); } } 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; @@ -586,14 +582,14 @@ finished: } /* return dynamically allocated buffers */ - free(scanl); + mh_free0(&scanl); for (nxtbuf = compbuffers, i = ncomps; (cptr = *savecomp++); nxtbuf++, i--) - free(cptr->c_text); /* if not nxtbuf, nxtbuf already freed */ + mh_free0(&(cptr->c_text)); /* if not nxtbuf, nxtbuf already freed */ while ( i-- > 0) - free(*nxtbuf++); /* free unused nxtbufs */ - free((char *) compbuffers); - free((char *) used_buf); + mh_free0(nxtbuf++); /* free unused nxtbufs */ + mh_free0(&compbuffers); + mh_free0(&used_buf); } static char *buf; /* our current working buffer */ @@ -629,7 +625,7 @@ static unsigned int bufsiz=0; /* current size of buf */ ** returns a pointer to the concatenated address string. ** ** We try to not do a lot of malloc/copy/free's (which is why we -** don't call "getcpy") but still place no upper limit on the +** don't call "mh_xstrdup") but still place no upper limit on the ** length of the result string. ** ** This routine is an override for the equally named one in sbr/fmt_addr.c. @@ -648,7 +644,7 @@ formataddr(char *orig, char *str) /* 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; @@ -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