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;
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;
/* 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++;
*/
FINDCOMP(cptr, "subject")
if (cptr && (cp = cptr->c_text)) {
- register char *sp = cp;
+ char *sp = cp;
for (;;) {
while (isspace(*cp))
if (sp != cptr->c_text) {
cp = cptr->c_text;
cptr->c_text = getcpy(sp);
- free(cp);
+ 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;
}
/* 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 */
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;
insert(struct mailname *np)
{
char buffer[BUFSIZ];
- register struct mailname *mp;
+ struct mailname *mp;
if (np->m_mbox == NULL)
return 0;
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)
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<OPEN_MAX; n++) {
+ close(n);
+ }
+
+ execlp("show", "show", "-file", "-", NULL);
+
+ adios(EX_OSERR, "exec", "unable to");
+ }
+
+ switch (pid = fork()) {
+ case NOTOK:
+ adios(EX_OSERR, "fork", "unable to");
+
+ case OK:
+ dup2(mailpipe[0], fileno(stdin));
dup2(fileno(out), fileno(stdout));
for (n=3; n<OPEN_MAX; n++) {
close(n);
_exit(EX_OSERR);
default:
- if (pidXwait(pid, "mhl"))
+ if (pidXwait(-1, "show | mhl"))
exit(EX_SOFTWARE);
fseek(out, 0L, SEEK_END);
break;
}
+
+ close(mailpipe[0]);
+ close(mailpipe[1]);
}