#include <h/mhparse.h>
#include <h/utils.h>
#include <sys/wait.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <sysexits.h>
extern int debugsw;
** for showing headers of MIME messages.
*/
if (!formsw)
- formsw = getcpy(etcpath("mhl.headers"));
+ formsw = mh_xstrdup(etcpath("mhl.headers"));
/*
** If form is "mhl.null", suppress display of header.
switch (child_id = fork()) {
case NOTOK:
- adios("fork", "unable to");
+ adios(EX_OSERR, "fork", "unable to");
/* NOTREACHED */
case OK:
execvp("mhl", vec);
fprintf(stderr, "unable to exec ");
perror("mhl");
- _exit(-1);
+ _exit(EX_OSERR);
/* NOTREACHED */
default:
break;
default:
- adios(NULL, "unknown content type %d", ct->c_type);
+ adios(EX_DATAERR, NULL, "unknown content type %d", ct->c_type);
break;
}
s = trimcpy(ct->c_descr);
strncpy(bp, s, buflen);
- free(s);
+ mh_free0(&s);
}
break;
execlp("/bin/sh", "/bin/sh", "-c", buffer, NULL);
fprintf(stderr, "unable to exec ");
perror("/bin/sh");
- _exit(-1);
+ _exit(EX_OSERR);
/* NOTREACHED */
default:
} else {
snprintf(buffer, sizeof(buffer), "%%lcat");
}
- ct->c_showproc = getcpy(buffer);
+ ct->c_showproc = mh_xstrdup(buffer);
return show_content_aux(ct, alternate, ct->c_showproc, NULL);
}
return NOTOK;
/* I'm not sure if this is necessary? */
- p->c_storage = getcpy(file);
+ p->c_storage = mh_xstrdup(file);
if (p->c_showproc && strcmp(p->c_showproc, "true")==0)
return (alternate ? DONE : OK);
s = trimcpy(ct->c_descr);
strncpy(bp, s, buflen);
- free(s);
+ mh_free0(&s);
}
break;
/* default method for message/rfc822 */
if (ct->c_subtype == MESSAGE_RFC822) {
- cp = (ct->c_showproc = getcpy("%lshow -file %F"));
+ cp = (ct->c_showproc = mh_xstrdup("%lshow -file %F"));
return show_content_aux(ct, alternate, cp, NULL);
}
msg = add(concat("\t", *ap, ": ", *ep, NULL), msg);
}
if (!(fp = fopen(ct->c_file, "r"))) {
- adios(ct->c_file, "unable to open");
+ adios(EX_IOERR, ct->c_file, "unable to open");
}
fseek(fp, ct->c_begin, SEEK_SET);
while (!feof(fp) && ftell(fp) < ct->c_end) {
if (!fgets(buf, sizeof buf, fp)) {
- adios(ct->c_file, "unable to read");
+ adios(EX_IOERR, ct->c_file, "unable to read");
}
*strchr(buf, '\n') = '\0';
if (!*buf) {