X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Frepl.c;fp=uip%2Frepl.c;h=9006dec24b0dbc1a0c41b4e586ab09095d8a6d46;hp=d71f27b31f6f601a617928de19ee2a4cb058c878;hb=04a3dfc70394a517a79340a7d3ecd9c6a23d0bee;hpb=4cc601f996579386ce4f4937b9b72b7b3d891107 diff --git a/uip/repl.c b/uip/repl.c index d71f27b..9006dec 100644 --- a/uip/repl.c +++ b/uip/repl.c @@ -134,14 +134,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; @@ -212,7 +212,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 == '-') @@ -224,7 +224,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; @@ -250,7 +250,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!"); @@ -266,7 +266,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"); @@ -320,7 +320,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"); @@ -422,7 +422,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); @@ -448,7 +448,7 @@ replout(FILE *inb, char *drft, struct msgs *mp, } char_read += strlen(f.value); if (!cptr->c_text) { - cptr->c_text = getcpy(f.value); + cptr->c_text = mh_xstrdup(f.value); i = strlen(cptr->c_text) - 1; if (cptr->c_text[i] == '\n') { cptr->c_text[i] = '\0'; @@ -506,12 +506,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; @@ -552,7 +552,7 @@ finished: } /* return dynamically allocated buffers */ - free(scanl); + mh_free0(&scanl); } static char *buf; /* our current working buffer */ @@ -588,7 +588,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. @@ -607,7 +607,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; @@ -701,7 +701,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) @@ -713,12 +714,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