projects
/
mmh
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
This is mmh-0.3
[mmh]
/
uip
/
mhshowsbr.c
diff --git
a/uip/mhshowsbr.c
b/uip/mhshowsbr.c
index
4f67d32
..
c7923c8
100644
(file)
--- a/
uip/mhshowsbr.c
+++ b/
uip/mhshowsbr.c
@@
-10,13
+10,15
@@
#include <fcntl.h>
#include <h/signals.h>
#include <errno.h>
#include <fcntl.h>
#include <h/signals.h>
#include <errno.h>
-#include <setjmp.h>
#include <signal.h>
#include <h/tws.h>
#include <h/mime.h>
#include <h/mhparse.h>
#include <h/utils.h>
#include <sys/wait.h>
#include <signal.h>
#include <h/tws.h>
#include <h/mime.h>
#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;
extern int debugsw;
@@
-34,8
+36,8
@@
void content_error(char *, CT, char *, ...);
void flush_errors(void);
/* mhlistsbr.c */
void flush_errors(void);
/* mhlistsbr.c */
-int list_switch(CT, int, int, int, int);
-int list_content(CT, int, int, int, int);
+int list_switch(CT, int, int, int);
+int list_content(CT, int, int, int);
/*
** prototypes
/*
** prototypes
@@
-74,7
+76,7
@@
show_all_messages(CT *cts)
** for showing headers of MIME messages.
*/
if (!formsw)
** 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.
/*
** If form is "mhl.null", suppress display of header.
@@
-85,9
+87,16
@@
show_all_messages(CT *cts)
for (ctp = cts; *ctp; ctp++) {
ct = *ctp;
for (ctp = cts; *ctp; ctp++) {
ct = *ctp;
- /* if top-level type is ok, then display message */
- if (type_ok(ct, 1))
- show_single_message(ct, formsw);
+ if (!type_ok(ct, 1)) { /* top-level type */
+ continue;
+ }
+ if (cts[1]) {
+ if (ctp != cts) {
+ printf("\n\n");
+ }
+ printf(">>> Message %s\n\n", ct->c_file);
+ }
+ show_single_message(ct, formsw);
}
}
}
}
@@
-148,14
+157,14
@@
DisplayMsgHeader(CT ct, char *form)
switch (child_id = fork()) {
case NOTOK:
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");
/* NOTREACHED */
case OK:
execvp("mhl", vec);
fprintf(stderr, "unable to exec ");
perror("mhl");
- _exit(-1);
+ _exit(EX_OSERR);
/* NOTREACHED */
default:
/* NOTREACHED */
default:
@@
-207,7
+216,7
@@
show_switch(CT ct, int alternate)
break;
default:
break;
default:
- adios(NULL, "unknown content type %d", ct->c_type);
+ adios(EX_DATAERR, NULL, "unknown content type %d", ct->c_type);
break;
}
break;
}
@@
-226,13
+235,13
@@
show_content(CT ct, int alternate)
CI ci = &ct->c_ctinfo;
/* Check for mhshow-show-type/subtype */
CI ci = &ct->c_ctinfo;
/* Check for mhshow-show-type/subtype */
- snprintf(buffer, sizeof(buffer), "%s-show-%s/%s",
- invo_name, ci->ci_type, ci->ci_subtype);
+ snprintf(buffer, sizeof(buffer), "mhshow-show-%s/%s",
+ ci->ci_type, ci->ci_subtype);
if ((cp = context_find(buffer)) && *cp != '\0')
return show_content_aux(ct, alternate, cp, NULL);
/* Check for mhshow-show-type */
if ((cp = context_find(buffer)) && *cp != '\0')
return show_content_aux(ct, alternate, cp, NULL);
/* Check for mhshow-show-type */
- snprintf(buffer, sizeof(buffer), "%s-show-%s", invo_name, ci->ci_type);
+ snprintf(buffer, sizeof(buffer), "mhshow-show-%s", ci->ci_type);
if ((cp = context_find(buffer)) && *cp != '\0')
return show_content_aux(ct, alternate, cp, NULL);
if ((cp = context_find(buffer)) && *cp != '\0')
return show_content_aux(ct, alternate, cp, NULL);
@@
-241,7
+250,7
@@
show_content(CT ct, int alternate)
/* complain if we are not a part of a multipart/alternative */
if (!alternate)
/* complain if we are not a part of a multipart/alternative */
if (!alternate)
- content_error(NULL, ct, "don't know how to display content");
+ return show_content_aux(ct, alternate, "%l", NULL);
return NOTOK;
}
return NOTOK;
}
@@
-323,7
+332,7
@@
show_content_aux(CT ct, int alternate, char *cp, char *cracked)
s = trimcpy(ct->c_descr);
strncpy(bp, s, buflen);
s = trimcpy(ct->c_descr);
strncpy(bp, s, buflen);
- free(s);
+ mh_free0(&s);
}
break;
}
break;
@@
-451,9
+460,9
@@
show_content_aux2(CT ct, int alternate, char *cracked,
if (xlist) {
if (ct->c_type == CT_MULTIPART)
if (xlist) {
if (ct->c_type == CT_MULTIPART)
- list_content(ct, -1, 1, 0, 0);
+ list_content(ct, -1, 0, 0);
else
else
- list_switch(ct, -1, 1, 0, 0);
+ list_switch(ct, -1, 0, 0);
}
fflush(stdout);
}
fflush(stdout);
@@
-473,7
+482,7
@@
show_content_aux2(CT ct, int alternate, char *cracked,
execlp("/bin/sh", "/bin/sh", "-c", buffer, NULL);
fprintf(stderr, "unable to exec ");
perror("/bin/sh");
execlp("/bin/sh", "/bin/sh", "-c", buffer, NULL);
fprintf(stderr, "unable to exec ");
perror("/bin/sh");
- _exit(-1);
+ _exit(EX_OSERR);
/* NOTREACHED */
default:
/* NOTREACHED */
default:
@@
-497,13
+506,13
@@
show_text(CT ct, int alternate)
CI ci = &ct->c_ctinfo;
/* Check for mhshow-show-type/subtype */
CI ci = &ct->c_ctinfo;
/* Check for mhshow-show-type/subtype */
- snprintf(buffer, sizeof(buffer), "%s-show-%s/%s",
- invo_name, ci->ci_type, ci->ci_subtype);
+ snprintf(buffer, sizeof(buffer), "mhshow-show-%s/%s",
+ ci->ci_type, ci->ci_subtype);
if ((cp = context_find(buffer)) && *cp != '\0')
return show_content_aux(ct, alternate, cp, NULL);
/* Check for mhshow-show-type */
if ((cp = context_find(buffer)) && *cp != '\0')
return show_content_aux(ct, alternate, cp, NULL);
/* Check for mhshow-show-type */
- snprintf(buffer, sizeof(buffer), "%s-show-%s", invo_name, ci->ci_type);
+ snprintf(buffer, sizeof(buffer), "mhshow-show-%s", ci->ci_type);
if ((cp = context_find(buffer)) && *cp != '\0')
return show_content_aux(ct, alternate, cp, NULL);
if ((cp = context_find(buffer)) && *cp != '\0')
return show_content_aux(ct, alternate, cp, NULL);
@@
-512,15
+521,14
@@
show_text(CT ct, int alternate)
** if it is not a text part of a multipart/alternative
*/
if (!alternate || ct->c_subtype == TEXT_PLAIN) {
** if it is not a text part of a multipart/alternative
*/
if (!alternate || ct->c_subtype == TEXT_PLAIN) {
- if (ct->c_charset && !check_charset(ct->c_charset,
- strlen(ct->c_charset))) {
+ if (ct->c_charset && !is_native_charset(ct->c_charset)) {
snprintf(buffer, sizeof(buffer), "%%liconv -f '%s'",
ct->c_charset);
} else {
snprintf(buffer, sizeof(buffer), "%%lcat");
}
snprintf(buffer, sizeof(buffer), "%%liconv -f '%s'",
ct->c_charset);
} else {
snprintf(buffer, sizeof(buffer), "%%lcat");
}
- cp = (ct->c_showproc = getcpy(buffer));
- return show_content_aux(ct, alternate, cp, NULL);
+ ct->c_showproc = mh_xstrdup(buffer);
+ return show_content_aux(ct, alternate, ct->c_showproc, NULL);
}
return NOTOK;
}
return NOTOK;
@@
-538,13
+546,13
@@
show_multi(CT ct, int alternate)
CI ci = &ct->c_ctinfo;
/* Check for mhshow-show-type/subtype */
CI ci = &ct->c_ctinfo;
/* Check for mhshow-show-type/subtype */
- snprintf(buffer, sizeof(buffer), "%s-show-%s/%s",
- invo_name, ci->ci_type, ci->ci_subtype);
+ snprintf(buffer, sizeof(buffer), "mhshow-show-%s/%s",
+ ci->ci_type, ci->ci_subtype);
if ((cp = context_find(buffer)) && *cp != '\0')
return show_multi_aux(ct, alternate, cp);
/* Check for mhshow-show-type */
if ((cp = context_find(buffer)) && *cp != '\0')
return show_multi_aux(ct, alternate, cp);
/* Check for mhshow-show-type */
- snprintf(buffer, sizeof(buffer), "%s-show-%s", invo_name, ci->ci_type);
+ snprintf(buffer, sizeof(buffer), "mhshow-show-%s", ci->ci_type);
if ((cp = context_find(buffer)) && *cp != '\0')
return show_multi_aux(ct, alternate, cp);
if ((cp = context_find(buffer)) && *cp != '\0')
return show_multi_aux(ct, alternate, cp);
@@
-673,7
+681,7
@@
show_multi_aux(CT ct, int alternate, char *cp)
return NOTOK;
/* I'm not sure if this is necessary? */
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);
if (p->c_showproc && strcmp(p->c_showproc, "true")==0)
return (alternate ? DONE : OK);
@@
-725,7
+733,7
@@
show_multi_aux(CT ct, int alternate, char *cp)
s = trimcpy(ct->c_descr);
strncpy(bp, s, buflen);
s = trimcpy(ct->c_descr);
strncpy(bp, s, buflen);
- free(s);
+ mh_free0(&s);
}
break;
}
break;
@@
-843,13
+851,13
@@
show_message_rfc822(CT ct, int alternate)
CI ci = &ct->c_ctinfo;
/* Check for mhshow-show-type/subtype */
CI ci = &ct->c_ctinfo;
/* Check for mhshow-show-type/subtype */
- snprintf(buffer, sizeof(buffer), "%s-show-%s/%s",
- invo_name, ci->ci_type, ci->ci_subtype);
+ snprintf(buffer, sizeof(buffer), "mhshow-show-%s/%s",
+ ci->ci_type, ci->ci_subtype);
if ((cp = context_find(buffer)) && *cp != '\0')
return show_content_aux(ct, alternate, cp, NULL);
/* Check for mhshow-show-type */
if ((cp = context_find(buffer)) && *cp != '\0')
return show_content_aux(ct, alternate, cp, NULL);
/* Check for mhshow-show-type */
- snprintf(buffer, sizeof(buffer), "%s-show-%s", invo_name, ci->ci_type);
+ snprintf(buffer, sizeof(buffer), "mhshow-show-%s", ci->ci_type);
if ((cp = context_find(buffer)) && *cp != '\0')
return show_content_aux(ct, alternate, cp, NULL);
if ((cp = context_find(buffer)) && *cp != '\0')
return show_content_aux(ct, alternate, cp, NULL);
@@
-858,13
+866,13
@@
show_message_rfc822(CT ct, int alternate)
/* default method for message/rfc822 */
if (ct->c_subtype == MESSAGE_RFC822) {
/* 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);
}
/* complain if we are not a part of a multipart/alternative */
if (!alternate)
return show_content_aux(ct, alternate, cp, NULL);
}
/* complain if we are not a part of a multipart/alternative */
if (!alternate)
- content_error(NULL, ct, "don't know how to display content");
+ return show_content_aux(ct, alternate, "%l", NULL);
return NOTOK;
}
return NOTOK;
}
@@
-877,8
+885,8
@@
show_message_rfc822(CT ct, int alternate)
static int
show_partial(CT ct, int alternate)
{
static int
show_partial(CT ct, int alternate)
{
- content_error(NULL, ct,
- "in order to display this message, you must reassemble it");
+ show_content_aux(ct, alternate, "%l", NULL);
+ puts("in order to display this message, you must reassemble it");
return NOTOK;
}
return NOTOK;
}
@@
-894,24
+902,28
@@
show_external(CT ct, int alternate)
FILE *fp;
char buf[BUFSIZ];
FILE *fp;
char buf[BUFSIZ];
- msg = add("You need to fetch the contents yourself:", NULL);
+ msg = add("You need to fetch the contents yourself:\n", NULL);
ap = ct->c_ctinfo.ci_attrs;
ep = ct->c_ctinfo.ci_values;
for (; *ap; ap++, ep++) {
ap = ct->c_ctinfo.ci_attrs;
ep = ct->c_ctinfo.ci_values;
for (; *ap; ap++, ep++) {
- msg = add(concat("\n\t", *ap, ": ", *ep, NULL), msg);
+ msg = add(concat("\t", *ap, ": ", *ep, NULL), msg);
}
if (!(fp = fopen(ct->c_file, "r"))) {
}
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)) {
}
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';
}
*strchr(buf, '\n') = '\0';
- msg = add(concat("\n\t", buf, NULL), msg);
+ if (!*buf) {
+ continue; /* skip empty lines */
+ }
+ msg = add(concat("\t", buf, "\n", NULL), msg);
}
fclose(fp);
}
fclose(fp);
- content_error(NULL, ct, msg);
+ show_content_aux(ct, alternate, "%l", NULL);
+ fputs(msg, stdout);
return OK;
}
return OK;
}