X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=uip%2Fmhlistsbr.c;h=08f35c73048fb1917fe178fe43e76f5103822bfc;hp=7830173be9830d4d21e18f5631a6221102804181;hb=55eda7c77fdf33b0a7175968471df55e2600379c;hpb=240013872c392fe644bd4f79382d9f5314b4ea60 diff --git a/uip/mhlistsbr.c b/uip/mhlistsbr.c index 7830173..08f35c7 100644 --- a/uip/mhlistsbr.c +++ b/uip/mhlistsbr.c @@ -9,10 +9,7 @@ #include #include -#include #include -#include -#include #include #include #include @@ -26,19 +23,17 @@ void flush_errors(void); /* ** prototypes */ -void list_all_messages(CT *, int, int, int, int); -int list_switch(CT, int, int, int, int); -int list_content(CT, int, int, int, int); +void list_all_messages(CT *, int, int); +int list_switch(CT, int, int, int); +int list_content(CT, int, int, int); /* ** static prototypes */ -static void list_single_message(CT, int, int, int); +static void list_single_message(CT, int, int); static int list_debug(CT); -static int list_multi(CT, int, int, int, int); -static int list_partial(CT, int, int, int, int); -static int list_external(CT, int, int, int, int); -static int list_application(CT, int, int, int, int); +static int list_multi(CT, int, int, int); +static int list_partial(CT, int, int, int); static int list_encoding(CT); @@ -59,21 +54,16 @@ static int list_encoding(CT); /* ** Top level entry point to list group of messages */ - void -list_all_messages(CT *cts, int headers, int realsize, int verbose, int debug) +list_all_messages(CT *cts, int verbose, int debug) { CT ct, *ctp; - if (headers) - printf(LSTFMT1, "msg", "part", "type/subtype", "size", - "description"); - + printf(LSTFMT1, "msg", "part", "type/subtype", "size", "description"); for (ctp = cts; *ctp; ctp++) { ct = *ctp; - list_single_message(ct, realsize, verbose, debug); + list_single_message(ct, verbose, debug); } - flush_errors(); } @@ -81,13 +71,12 @@ list_all_messages(CT *cts, int headers, int realsize, int verbose, int debug) /* ** Entry point to list a single message */ - static void -list_single_message(CT ct, int realsize, int verbose, int debug) +list_single_message(CT ct, int verbose, int debug) { if (type_ok(ct, 1)) { umask(ct->c_umask); - list_switch(ct, 1, realsize, verbose, debug); + list_switch(ct, 1, verbose, debug); if (ct->c_fp) { fclose(ct->c_fp); ct->c_fp = NULL; @@ -101,56 +90,34 @@ list_single_message(CT ct, int realsize, int verbose, int debug) /* ** Primary switching routine to list information about a content */ - int -list_switch(CT ct, int toplevel, int realsize, int verbose, int debug) +list_switch(CT ct, int toplevel, int verbose, int debug) { switch (ct->c_type) { - case CT_MULTIPART: - return list_multi(ct, toplevel, realsize, verbose, - debug); - break; - - case CT_MESSAGE: - switch (ct->c_subtype) { - case MESSAGE_PARTIAL: - return list_partial(ct, toplevel, - realsize, verbose, - debug); - break; - - case MESSAGE_EXTERNAL: - return list_external(ct, toplevel, - realsize, verbose, - debug); - break; - - case MESSAGE_RFC822: - default: - return list_content(ct, toplevel, - realsize, verbose, - debug); - break; - } - break; - - case CT_TEXT: - case CT_AUDIO: - case CT_IMAGE: - case CT_VIDEO: - return list_content(ct, toplevel, realsize, verbose, - debug); - break; - - case CT_APPLICATION: - return list_application(ct, toplevel, realsize, - verbose, debug); - break; - - default: - /* list_debug (ct); */ - adios(NULL, "unknown content type %d", ct->c_type); - break; + case CT_MULTIPART: + return list_multi(ct, toplevel, verbose, debug); + break; + + case CT_MESSAGE: + if (ct->c_subtype == MESSAGE_PARTIAL) { + return list_partial(ct, toplevel, verbose, debug); + } else { + return list_content(ct, toplevel, verbose, debug); + } + break; + + case CT_TEXT: + case CT_AUDIO: + case CT_IMAGE: + case CT_VIDEO: + case CT_APPLICATION: + return list_content(ct, toplevel, verbose, debug); + break; + + default: + /* list_debug (ct); */ + adios(NULL, "unknown content type %d", ct->c_type); + break; } return 0; /* NOT REACHED */ @@ -162,9 +129,8 @@ list_switch(CT ct, int toplevel, int realsize, int verbose, int debug) /* ** Method for listing information about a simple/generic content */ - int -list_content(CT ct, int toplevel, int realsize, int verbose, int debug) +list_content(CT ct, int toplevel, int verbose, int debug) { unsigned long size; char *cp, buffer[BUFSIZ]; @@ -176,7 +142,7 @@ list_content(CT ct, int toplevel, int realsize, int verbose, int debug) empty(ci->ci_subtype)); printf(LSTFMT2b, empty(ct->c_partno), buffer); - if (ct->c_cesizefnx && realsize) + if (ct->c_cesizefnx) size = (*ct->c_cesizefnx) (ct); else size = ct->c_end - ct->c_begin; @@ -188,26 +154,26 @@ list_content(CT ct, int toplevel, int realsize, int verbose, int debug) /* print size of this body part */ switch (*cp) { - case ' ': - if (size > 0 || ct->c_encoding != CE_EXTERNAL) - printf(LSTFMT2c1, size); - else - printf(LSTFMT2c4); - break; - - default: - printf(LSTFMT2c2, size, *cp); - break; - - case '\0': - printf(LSTFMT2c3); + case ' ': + if (size > 0 || ct->c_encoding != CE_EXTERNAL) + printf(LSTFMT2c1, size); + else + printf(LSTFMT2c4); + break; + + default: + printf(LSTFMT2c2, size, *cp); + break; + + case '\0': + printf(LSTFMT2c3); } /* print Content-Description */ if (ct->c_descr) { char *dp; - dp = trimcpy(cp = add(ct->c_descr, NULL)); + dp = trimcpy(cp = getcpy(ct->c_descr)); free(cp); printf(LSTFMT2d1, dp); free(dp); @@ -215,18 +181,27 @@ list_content(CT ct, int toplevel, int realsize, int verbose, int debug) printf("\n"); - /* - ** If verbose, print any RFC-822 comments in the - ** Content-Type line. - */ - if (verbose && ci->ci_comment) { - char *dp; + if (verbose) { + char **ap, **ep; + CI ci = &ct->c_ctinfo; - dp = trimcpy(cp = add(ci->ci_comment, NULL)); - free(cp); - snprintf(buffer, sizeof(buffer), "(%s)", dp); - free(dp); - printf(LSTFMT2d2, buffer); + for (ap = ci->ci_attrs, ep = ci->ci_values; *ap; ap++, ep++) { + printf("\t\t%s=\"%s\"\n", *ap, *ep); + } + + /* + ** If verbose, print any RFC-822 comments in the + ** Content-Type line. + */ + if (ci->ci_comment) { + char *dp; + + dp = trimcpy(cp = add(ci->ci_comment, NULL)); + free (cp); + snprintf(buffer, sizeof(buffer), "(%s)", dp); + free(dp); + printf(LSTFMT2d2, buffer); + } } if (debug) @@ -239,7 +214,6 @@ list_content(CT ct, int toplevel, int realsize, int verbose, int debug) /* ** Print debugging information about a content */ - static int list_debug(CT ct) { @@ -273,8 +247,8 @@ list_debug(CT ct) ct->c_type, ct->c_subtype, (unsigned int)(unsigned long) ct->c_ctparams); + fprintf(stderr, " charset \"%s\"\n", empty(ct->c_charset)); fprintf(stderr, " showproc \"%s\"\n", empty(ct->c_showproc)); - fprintf(stderr, " termproc \"%s\"\n", empty(ct->c_termproc)); fprintf(stderr, " storeproc \"%s\"\n", empty(ct->c_storeproc)); /* print transfer encoding information */ @@ -310,22 +284,21 @@ list_debug(CT ct) /* ** list content information for type "multipart" */ - static int -list_multi(CT ct, int toplevel, int realsize, int verbose, int debug) +list_multi(CT ct, int toplevel, int verbose, int debug) { struct multipart *m = (struct multipart *) ct->c_ctparams; struct part *part; /* list the content for toplevel of this multipart */ - list_content(ct, toplevel, realsize, verbose, debug); + list_content(ct, toplevel, verbose, debug); /* now list for all the subparts */ for (part = m->mp_parts; part; part = part->mp_next) { CT p = part->mp_part; if (part_ok(p, 1) && type_ok(p, 1)) - list_switch(p, 0, realsize, verbose, debug); + list_switch(p, 0, verbose, debug); } return OK; @@ -335,13 +308,12 @@ list_multi(CT ct, int toplevel, int realsize, int verbose, int debug) /* ** list content information for type "message/partial" */ - static int -list_partial(CT ct, int toplevel, int realsize, int verbose, int debug) +list_partial(CT ct, int toplevel, int verbose, int debug) { struct partial *p = (struct partial *) ct->c_ctparams; - list_content(ct, toplevel, realsize, verbose, debug); + list_content(ct, toplevel, verbose, debug); if (verbose) { printf("\t [message %s, part %d", p->pm_partid, p->pm_partno); @@ -355,79 +327,9 @@ list_partial(CT ct, int toplevel, int realsize, int verbose, int debug) /* -** list content information for type "message/external" -*/ - -static int -list_external(CT ct, int toplevel, int realsize, int verbose, int debug) -{ - struct exbody *e = (struct exbody *) ct->c_ctparams; - - /* - * First list the information for the - * message/external content itself. - */ - list_content(ct, toplevel, realsize, verbose, debug); - - if (verbose) { - if (e->eb_name) - printf("\t name=\"%s\"\n", e->eb_name); - if (e->eb_dir) - printf("\t directory=\"%s\"\n", e->eb_dir); - if (e->eb_site) - printf("\t site=\"%s\"\n", e->eb_site); - if (e->eb_server) - printf("\t server=\"%s\"\n", e->eb_server); - if (e->eb_subject) - printf("\t subject=\"%s\"\n", e->eb_subject); - - /* This must be defined */ - printf("\t access-type=\"%s\"\n", e->eb_access); - - if (e->eb_mode) - printf("\t mode=\"%s\"\n", e->eb_mode); - if (e->eb_permission) - printf("\t permission=\"%s\"\n", e->eb_permission); - - if (e->eb_flags == NOTOK) - printf("\t [service unavailable]\n"); - } - - /* - ** Now list the information for the external content - ** to which this content points. - */ - list_content(e->eb_content, 0, realsize, verbose, debug); - - return OK; -} - - -/* -** list content information for type "application" -*/ - -static int -list_application(CT ct, int toplevel, int realsize, int verbose, int debug) -{ - list_content(ct, toplevel, realsize, verbose, debug); - if (verbose) { - char **ap, **ep; - CI ci = &ct->c_ctinfo; - - for (ap = ci->ci_attrs, ep = ci->ci_values; *ap; ap++, ep++) - printf("\t %s=\"%s\"\n", *ap, *ep); - } - - return OK; -} - - -/* ** list information about the Content-Transfer-Encoding ** used by a content. */ - static int list_encoding(CT ct) {