* mhlistsbr.c -- routines to list information about the
* -- contents of MIME messages
*
- * $Id$
- *
* This code is Copyright (c) 2002, by the authors of nmh. See the
* COPYRIGHT file in the root directory of the nmh distribution for
* complete copyright information.
#include <h/mh.h>
#include <fcntl.h>
#include <h/signals.h>
-#include <errno.h>
-#include <signal.h>
#include <h/mts.h>
#include <h/tws.h>
#include <h/mime.h>
#include <h/mhparse.h>
-
-extern int errno;
+#include <h/utils.h>
/* mhmisc.c */
int part_ok (CT, int);
/*
* various formats for -list option
*/
-#define LSTFMT1 "%4s %-5s %-24s %5s %-36s\n"
+#define LSTFMT1 "%4s %-5s %-24s %5s %s\n"
#define LSTFMT2a "%4d "
#define LSTFMT2b "%-5s %-24.24s "
#define LSTFMT2c1 "%5lu"
#define LSTFMT2c2 "%4lu%c"
#define LSTFMT2c3 "huge "
#define LSTFMT2c4 " "
-#define LSTFMT2d1 " %-36.36s"
+#define LSTFMT2d1 " %.36s"
#define LSTFMT2d2 "\t %-65.65s\n"
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;
}
return 0; /* NOT REACHED */
char *cp, buffer[BUFSIZ];
CI ci = &ct->c_ctinfo;
- printf (toplevel > 0 ? LSTFMT2a : toplevel < 0 ? "part " : " ",
- atoi (r1bindex (empty (ct->c_file), '/')));
+ if (toplevel > 0)
+ printf (LSTFMT2a, atoi (r1bindex (empty (ct->c_file), '/')));
+ else
+ printf(toplevel < 0 ? "part " : " ");
+
snprintf (buffer, sizeof(buffer), "%s/%s", empty (ci->ci_type),
empty (ci->ci_subtype));
printf (LSTFMT2b, empty (ct->c_partno), buffer);
if (ct->c_descr) {
char *dp;
- dp = trimcpy (cp = add (ct->c_descr, NULL));
- free (cp);
+ dp = cpytrim (ct->c_descr);
printf (LSTFMT2d1, dp);
free (dp);
}
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 %s=\"%s\"\n", *ap, *ep);
+
+ /*
+ * If verbose, print any RFC-822 comments in the
+ * Content-Type line.
+ */
+ if (ci->ci_comment) {
+ char *dp;
+
+ dp = cpytrim (ci->ci_comment);
+ snprintf (buffer, sizeof(buffer), "(%s)", dp);
+ free (dp);
+ printf (LSTFMT2d2, buffer);
+ }
}
if (debug)
/* print internal flags for type/subtype */
fprintf (stderr, " type 0x%x subtype 0x%x params 0x%x\n",
- ct->c_type, ct->c_subtype, (unsigned int) ct->c_ctparams);
+ ct->c_type, ct->c_subtype,
+ (unsigned int)(unsigned long) ct->c_ctparams);
fprintf (stderr, " showproc \"%s\"\n", empty (ct->c_showproc));
fprintf (stderr, " termproc \"%s\"\n", empty (ct->c_termproc));
/* print internal flags for transfer encoding */
fprintf (stderr, " transfer encoding 0x%x params 0x%x\n",
- ct->c_encoding, (unsigned int) ct->c_cefile);
+ ct->c_encoding, (unsigned int)(unsigned long) &ct->c_cefile);
/* print Content-ID */
if (ct->c_id)
fprintf (stderr, " %s:%s", DESCR_FIELD, ct->c_descr);
fprintf (stderr, " read fp 0x%x file \"%s\" begin %ld end %ld\n",
- (unsigned int) ct->c_fp, empty (ct->c_file),
+ (unsigned int)(unsigned long) ct->c_fp, empty (ct->c_file),
ct->c_begin, ct->c_end);
/* print more information about transfer encoding */
/*
* list content information for type "application"
+ * This no longer needs to be a separate function. It used to
+ * produce some output with verbose enabled, but that has been
+ * moved to list_content ().
*/
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;
}
static int
list_encoding (CT ct)
{
- CE ce;
+ CE ce = &ct->c_cefile;
- if ((ce = ct->c_cefile))
- fprintf (stderr, " decoded fp 0x%x file \"%s\"\n",
- (unsigned int) ce->ce_fp, ce->ce_file ? ce->ce_file : "");
+ fprintf (stderr, " decoded fp 0x%x file \"%s\"\n",
+ (unsigned int)(unsigned long) ce->ce_fp,
+ ce->ce_file ? ce->ce_file : "");
return OK;
}