#include <h/mime.h>
#include <h/mhparse.h>
#include <h/fmt_scan.h>
+#include "h/done.h"
#include <h/utils.h>
+#include "mhmisc.h"
#include "mhshowsbr.h"
-#include "../sbr/m_mktemp.h"
+#include "sbr/m_mktemp.h"
#ifdef HAVE_ICONV
# include <iconv.h>
#endif /* ! HAVE_ICONV */
extern int debugsw;
-extern int npart;
-extern int ntype;
int nolist = 0;
int nomore = 0;
char *formsw = NULL;
-/* for output markerss and headers */
+/* for output markers and headers */
char *folder = NULL;
char *markerform;
char *headerform;
int headersw = -1;
-/* mhmisc.c */
-int part_ok (CT);
-int part_exact (CT);
-int type_ok (CT, int);
-void content_error (char *, CT, char *, ...);
-void flush_errors (void);
-
/*
* static prototypes
*/
* for showing headers of MIME messages.
*/
if (!formsw)
- formsw = getcpy (etcpath ("mhl.headers"));
+ formsw = mh_xstrdup(etcpath("mhl.headers"));
/*
* Compile the content marker and header format lines
DisplayMsgHeader (CT ct, char *form, int concatsw)
{
pid_t child_id;
- int i, vecp;
+ int vecp;
char **vec;
char *file;
fflush (stdout);
- for (i = 0; (child_id = fork()) == NOTOK && i < 5; i++)
- sleep (5);
-
+ child_id = fork();
switch (child_id) {
case NOTOK:
adios ("fork", "unable to");
execvp (file, vec);
fprintf (stderr, "unable to exec ");
perror (mhlproc);
- _exit (-1);
+ _exit(1);
/* NOTREACHED */
default:
int fd, int xlist, int xstdin, struct format *fmt)
{
pid_t child_id;
- int i, vecp;
+ int vecp;
char **vec, *file;
if (debugsw || cracked) {
}
while ((cc = read(fd, readbuf, sizeof(readbuf))) > 0) {
- if ((ssize_t) fwrite(readbuf, sizeof(char), cc, stdout) < cc) {
+ if ((ssize_t) fwrite(readbuf, 1, cc, stdout) < cc) {
advise ("putline", "fwrite");
}
lastchar = readbuf[cc - 1];
fflush (stdout);
- for (i = 0; (child_id = fork()) == NOTOK && i < 5; i++)
- sleep (5);
+ child_id = fork();
switch (child_id) {
case NOTOK:
advise ("fork", "unable to");
execvp (file, vec);
fprintf (stderr, "unable to exec ");
perror (buffer);
- _exit (-1);
+ _exit(1);
/* NOTREACHED */
default: {
int status;
+ char *display_prog = vecp > 2 && vec[2][0] != '\0'
+ /* Copy the real display program name. This relies on the
+ specific construction of vec[] by argsplit(). */
+ ? vec[2]
+ : NULL;
- arglist_free(file, vec);
-
- pidcheck ((status = pidXwait (child_id, NULL)));
+ pidcheck ((status = pidXwait (child_id, display_prog)));
+ arglist_free(file, vec);
if (fd != NOTOK)
(*ct->c_ceclosefnx) (ct);
- return (alternate ? OK : status);
+ return alternate ? OK : status;
}
}
}
if ((*p->c_ceopenfnx) (p, &file) == NOTOK)
return NOTOK;
- p->c_storage = add (file, NULL);
+ p->c_storage = mh_xstrdup(FENDNULL(file));
if (p->c_showproc && !strcmp (p->c_showproc, "true"))
return OK;
}
if ((tempfile = m_mktemp2 (NULL, invo_name, &fd, NULL)) == NULL) {
- adios (NULL, "unable to create temporary file in %s",
+ die("unable to create temporary file in %s",
get_temp_dir());
}
dest = mh_xstrdup(tempfile);
replace_param(&ct->c_ctinfo.ci_first_pm,
&ct->c_ctinfo.ci_last_pm, "charset",
dest_charset, 0);
- outline = output_params(strlen(TYPE_FIELD) + 1 + strlen(ctline),
+ outline = output_params(LEN(TYPE_FIELD) + 1 + strlen(ctline),
ct->c_ctinfo.ci_first_pm, NULL, 0);
if (outline) {
ctline = add(outline, ctline);