X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fmhshowsbr.c;h=c7923c87db021f477770fc8c76484ccdd1198b71;hp=9b7e7b0556e7bc3810ba169a9c4e8b0fc85f3f8e;hb=6e9577f324bef90765a5edc02044eb111ec48072;hpb=8d77b48284c58c135a6b2787e721597346ab056d diff --git a/uip/mhshowsbr.c b/uip/mhshowsbr.c index 9b7e7b0..c7923c8 100644 --- a/uip/mhshowsbr.c +++ b/uip/mhshowsbr.c @@ -10,13 +10,15 @@ #include #include #include -#include #include #include #include #include #include #include +#include +#include +#include extern int debugsw; @@ -34,8 +36,8 @@ void content_error(char *, CT, char *, ...); 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 @@ -74,7 +76,7 @@ show_all_messages(CT *cts) ** 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. @@ -155,14 +157,14 @@ DisplayMsgHeader(CT ct, char *form) 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: @@ -214,7 +216,7 @@ show_switch(CT ct, int alternate) break; default: - adios(NULL, "unknown content type %d", ct->c_type); + adios(EX_DATAERR, NULL, "unknown content type %d", ct->c_type); break; } @@ -248,7 +250,7 @@ show_content(CT ct, int 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; } @@ -330,7 +332,7 @@ show_content_aux(CT ct, int alternate, char *cp, char *cracked) s = trimcpy(ct->c_descr); strncpy(bp, s, buflen); - free(s); + mh_free0(&s); } break; @@ -458,9 +460,9 @@ show_content_aux2(CT ct, int alternate, char *cracked, if (xlist) { if (ct->c_type == CT_MULTIPART) - list_content(ct, -1, 1, 0, 0); + list_content(ct, -1, 0, 0); else - list_switch(ct, -1, 1, 0, 0); + list_switch(ct, -1, 0, 0); } fflush(stdout); @@ -480,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"); - _exit(-1); + _exit(EX_OSERR); /* NOTREACHED */ default: @@ -525,7 +527,7 @@ show_text(CT ct, int alternate) } 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); } @@ -679,7 +681,7 @@ show_multi_aux(CT ct, int alternate, char *cp) 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); @@ -731,7 +733,7 @@ show_multi_aux(CT ct, int alternate, char *cp) s = trimcpy(ct->c_descr); strncpy(bp, s, buflen); - free(s); + mh_free0(&s); } break; @@ -864,13 +866,13 @@ show_message_rfc822(CT ct, int alternate) /* 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) - content_error(NULL, ct, "don't know how to display content"); + return show_content_aux(ct, alternate, "%l", NULL); return NOTOK; } @@ -883,8 +885,8 @@ show_message_rfc822(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; } @@ -900,24 +902,28 @@ show_external(CT ct, int alternate) 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++) { - msg = add(concat("\n\t", *ap, ": ", *ep, NULL), msg); + 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'; - msg = add(concat("\n\t", buf, NULL), msg); + if (!*buf) { + continue; /* skip empty lines */ + } + msg = add(concat("\t", buf, "\n", NULL), msg); } fclose(fp); - content_error(NULL, ct, msg); + show_content_aux(ct, alternate, "%l", NULL); + fputs(msg, stdout); return OK; }