summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/mimetest.c130
1 files changed, 50 insertions, 80 deletions
diff --git a/examples/mimetest.c b/examples/mimetest.c
index 9d7decd58..706e2af6d 100644
--- a/examples/mimetest.c
+++ b/examples/mimetest.c
@@ -52,11 +52,22 @@ print_file (const char *fname, int indent)
unlink (fname);
}
+#define CATCH(expr) \
+ do \
+ { \
+ int rc; \
+ if ((rc = expr) != 0) \
+ { \
+ fprintf (stderr, "%s: %s\n", #expr, mu_strerror (rc)); \
+ exit (2); \
+ } \
+ } \
+ while (0)
+
int
main (int argc, char **argv)
{
mu_mailbox_t mbox = NULL;
- int ret;
size_t i;
size_t count = 0;
char *mailbox_name;
@@ -82,13 +93,8 @@ main (int argc, char **argv)
mu_registrar_record (mu_path_record);
mu_registrar_record (mu_pop_record);
- if ((ret = mu_mailbox_create_default (&mbox, mailbox_name)) != 0)
- {
- fprintf (stderr, "could not create %s: %s\n",
- mailbox_name, mu_strerror (ret));
- exit (2);
- }
-
+ CATCH (mu_mailbox_create_default (&mbox, mailbox_name));
+
/* Debugging trace. */
if (debug)
{
@@ -98,11 +104,7 @@ main (int argc, char **argv)
}
/* Open the mailbox for reading only. */
- if ((ret = mu_mailbox_open (mbox, MU_STREAM_RDWR)) != 0)
- {
- fprintf (stderr, "mailbox open - %s\n", mu_strerror (ret));
- exit (2);
- }
+ CATCH (mu_mailbox_open (mbox, MU_STREAM_RDWR));
/* Iterate through the entire message set. */
mu_mailbox_messages_count (mbox, &count);
@@ -114,26 +116,10 @@ main (int argc, char **argv)
size_t nparts;
size_t msize, nlines;
- if ((ret = mu_mailbox_get_message (mbox, i, &msg)) != 0)
- {
- fprintf (stderr, "mu_mailbox_get_message - %s\n", mu_strerror (ret));
- exit (2);
- }
- if ((ret = mu_message_size (msg, &msize)) != 0)
- {
- fprintf (stderr, "mu_message_size - %s\n", mu_strerror (ret));
- exit (2);
- }
- if ((ret = mu_message_lines (msg, &nlines)) != 0)
- {
- fprintf (stderr, "mu_message_lines - %s\n", mu_strerror (ret));
- exit (2);
- }
- if ((ret = mu_message_get_header (msg, &hdr)) != 0)
- {
- fprintf (stderr, "mu_message_get_header - %s\n", mu_strerror (ret));
- exit (2);
- }
+ CATCH (mu_mailbox_get_message (mbox, i, &msg));
+ CATCH (mu_message_size (msg, &msize));
+ CATCH (mu_message_lines (msg, &nlines));
+ CATCH (mu_message_get_header (msg, &hdr));
mu_header_get_value (hdr, MU_HEADER_FROM, from, sizeof (from), NULL);
mu_header_get_value (hdr, MU_HEADER_SUBJECT, subject, sizeof (subject),
NULL);
@@ -141,11 +127,7 @@ main (int argc, char **argv)
printf ("From: %s\n", from);
printf ("Subject: %s\n", subject);
- if ((ret = mu_message_get_num_parts (msg, &nparts)) != 0)
- {
- fprintf (stderr, "mu_message_get_num_parts - %s\n", mu_strerror (ret));
- exit (2);
- }
+ CATCH (mu_message_get_num_parts (msg, &nparts));
printf ("Number of parts in message - %lu\n",
(unsigned long) nparts);
printf ("Total message size - %lu/%lu\n",
@@ -159,11 +141,33 @@ main (int argc, char **argv)
char buf[2048];
+static void
+print_message_part_sizes (mu_message_t part, int indent)
+{
+ mu_body_t body;
+ mu_header_t hdr;
+ size_t msize, mlines, hsize, hlines, bsize, blines;
+
+ CATCH (mu_message_size (part, &msize));
+ CATCH (mu_message_lines (part, &mlines));
+ CATCH (mu_message_get_header (part, &hdr));
+ CATCH (mu_header_size (hdr, &hsize));
+ CATCH (mu_header_lines (hdr, &hlines));
+ CATCH (mu_message_get_body (part, &body));
+ CATCH (mu_body_size (body, &bsize));
+ CATCH (mu_body_lines (body, &blines));
+ printf ("%*.*sMessage part size - %lu/%lu: %lu/%lu, %lu/%lu\n",
+ indent, indent, "",
+ (unsigned long) msize, (unsigned long) mlines,
+ (unsigned long) hsize, (unsigned long) hlines,
+ (unsigned long) bsize, (unsigned long) blines);
+}
+
void
message_display_parts (mu_message_t msg, int indent)
{
int ret, j;
- size_t msize, nlines, nparts, nsubparts;
+ size_t nparts, nsubparts;
mu_message_t part;
mu_header_t hdr;
char type[256];
@@ -185,31 +189,12 @@ message_display_parts (mu_message_t msg, int indent)
its own that can have other subparts(recursive). */
for (j = 1; j <= nparts; j++)
{
- if ((ret = mu_message_get_part (msg, j, &part)) != 0)
- {
- fprintf (stderr, "mu_mime_get_part - %s\n", mu_strerror (ret));
- exit (2);
- }
- if ((ret = mu_message_size (part, &msize)) != 0)
- {
- fprintf (stderr, "mu_message_size - %s\n", mu_strerror (ret));
- exit (2);
- }
- if ((ret = mu_message_lines (part, &nlines)) != 0)
- {
- fprintf (stderr, "mu_message_lines - %s\n", mu_strerror (ret));
- exit (2);
- }
- if ((ret = mu_message_get_header (part, &hdr)) != 0)
- {
- fprintf (stderr, "mu_message_get_header - %s\n", mu_strerror (ret));
- exit (2);
- }
+ CATCH (mu_message_get_part (msg, j, &part));
+ CATCH (mu_message_get_header (part, &hdr));
mu_header_get_value (hdr, MU_HEADER_CONTENT_TYPE, type, sizeof (type),
NULL);
printf ("%*.*sType of part %d = %s\n", indent, indent, "", j, type);
- printf ("%*.*sMessage part size - %lu/%lu\n", indent, indent, "",
- (unsigned long) msize, (unsigned long) nlines);
+ print_message_part_sizes (part, indent);
encoding[0] = '\0';
mu_header_get_value (hdr, MU_HEADER_CONTENT_TRANSFER_ENCODING, encoding,
sizeof (encoding), NULL);
@@ -219,31 +204,16 @@ message_display_parts (mu_message_t msg, int indent)
|| (mu_message_is_multipart (part, &ismulti) == 0 && ismulti))
{
if (!ismulti)
- {
- ret = mu_message_unencapsulate (part, &part, NULL);
- if (ret != 0)
- fprintf (stderr, "mu_message_unencapsulate - %s\n",
- mu_strerror (ret));
- break;
- }
- if ((ret = mu_message_get_header (part, &hdr)) != 0)
- {
- fprintf (stderr, "mu_message_get_header - %s\n",
- mu_strerror (ret));
- exit (2);
- }
+ CATCH (mu_message_unencapsulate (part, &part, NULL));
+
+ CATCH (mu_message_get_header (part, &hdr));
mu_header_get_value (hdr, MU_HEADER_FROM, from, sizeof (from), NULL);
mu_header_get_value (hdr, MU_HEADER_SUBJECT, subject, sizeof (subject),
NULL);
printf ("%*.*sEncapsulated message : %s\t%s\n",
indent, indent, "", from, subject);
printf ("%*.*sBegin\n", indent, indent, "");
- if ((ret = mu_message_get_num_parts (part, &nsubparts)) != 0)
- {
- fprintf (stderr, "mu_mime_get_num_parts - %s\n",
- mu_strerror (ret));
- exit (2);
- }
+ CATCH (mu_message_get_num_parts (part, &nsubparts));
message_display_parts (part, indent+indent_level);
mu_message_destroy (&part, NULL);
}

Return to:

Send suggestions and report system problems to the System administrator.