static sigjmp_buf intrenv;
-/* termsbr.c */
-int SOprintf (char *, ...);
-
-/* mhparse.c */
-int pidcheck (int);
-
/* mhmisc.c */
int part_ok (CT, int);
int type_ok (CT, int);
{
pid_t child_id;
int i, vecp;
- char *vec[8];
+ char **vec;
+ char *file;
- vecp = 0;
- vec[vecp++] = r1bindex (mhlproc, '/');
- vec[vecp++] = "-form";
- vec[vecp++] = form;
- vec[vecp++] = "-nobody";
- vec[vecp++] = ct->c_file;
+ vec = argsplit(mhlproc, &file, &vecp);
+ vec[vecp++] = getcpy("-form");
+ vec[vecp++] = getcpy(form);
+ vec[vecp++] = getcpy("-nobody");
+ vec[vecp++] = getcpy(ct->c_file);
/*
* If we've specified -(no)moreproc,
* then just pass that along.
*/
if (nomore) {
- vec[vecp++] = "-nomoreproc";
+ vec[vecp++] = getcpy("-nomoreproc");
} else if (progsw) {
- vec[vecp++] = "-moreproc";
- vec[vecp++] = progsw;
+ vec[vecp++] = getcpy("-moreproc");
+ vec[vecp++] = getcpy(progsw);
}
vec[vecp] = NULL;
/* NOTREACHED */
case OK:
- execvp (mhlproc, vec);
+ execvp (file, vec);
fprintf (stderr, "unable to exec ");
perror (mhlproc);
_exit (-1);
xpid = -child_id;
break;
}
+
+ arglist_free(file, vec);
}
}
}
- if (buflen <= 0 || (ct->c_termproc && buflen <= strlen(ct->c_termproc))) {
+ if (buflen <= 0 ||
+ (ct->c_termproc && (size_t) buflen <= strlen(ct->c_termproc))) {
/* content_error would provide a more useful error message
* here, except that if we got overrun, it probably would
* too.
else
list_switch (ct, -1, 1, 0, 0);
- if (xpause && SOprintf ("Press <return> to show content..."))
- printf ("Press <return> to show content...");
-
- if (xpause) {
+ if (xpause && isatty (fileno (stdout))) {
int intr;
SIGNAL_HANDLER istat;
+ if (SOprintf ("Press <return> to show content..."))
+ printf ("Press <return> to show content...");
+
istat = SIGNAL (SIGINT, intrser);
if ((intr = sigsetjmp (intrenv, 1)) == OK) {
fflush (stdout);
fflush (stdout);
- for (i = 0; (child_id = vfork ()) == NOTOK && i < 5; i++)
+ for (i = 0; (child_id = vfork()) == NOTOK && i < 5; i++)
sleep (5);
switch (child_id) {
case NOTOK:
return show_multi_aux (ct, serial, alternate, cp);
/*
- * Use default method to display this multipart content
- * if it is not a (nested) part of a multipart/alternative,
- * or if it is one of the known subtypes of multipart.
+ * Use default method to display this multipart content. Even
+ * unknown types are displayable, since they're treated as mixed
+ * per RFC 2046.
*/
- if (!alternate || ct->c_subtype != MULTI_UNKNOWN)
- return show_multi_internal (ct, serial, alternate);
-
- return NOTOK;
+ return show_multi_internal (ct, serial, alternate);
}
}
}
- if (buflen <= 0 || (ct->c_termproc && buflen <= strlen(ct->c_termproc))) {
+ if (buflen <= 0 ||
+ (ct->c_termproc && buflen <= (ssize_t) strlen(ct->c_termproc))) {
/* content_error would provide a more useful error message
* here, except that if we got overrun, it probably would
* too.
return OK;
return show_switch (p, serial, alternate);
-
-#if 0
- content_error (NULL, p, "don't know how to display content");
- return NOTOK;
-#endif
}