cli/show: abstract get content disposition
authorJani Nikula <jani@nikula.org>
Sun, 26 Feb 2017 18:33:47 +0000 (20:33 +0200)
committerDavid Bremner <david@tethera.net>
Tue, 28 Feb 2017 11:59:00 +0000 (07:59 -0400)
Reduce duplication in follow-up work. As a side effect, handle error
returns from g_mime_content_disposition_get_disposition() without
segfaulting.

notmuch-show.c

index ab4ea1c2bdc1c6b1ec0f58e49d1e13af788b859a..7630f49dbc59a72a36d049cdf44f3ac96e92f89e 100644 (file)
@@ -110,6 +110,17 @@ _get_one_line_summary (const void *ctx, notmuch_message_t *message)
                            from, relative_date, tags);
 }
 
                            from, relative_date, tags);
 }
 
+static const char *_get_disposition(GMimeObject *meta)
+{
+    GMimeContentDisposition *disposition;
+
+    disposition = g_mime_object_get_content_disposition (meta);
+    if (!disposition)
+       return NULL;
+
+    return g_mime_content_disposition_get_disposition (disposition);
+}
+
 /* Emit a sequence of key/value pairs for the metadata of message.
  * The caller should begin a map before calling this. */
 static void
 /* Emit a sequence of key/value pairs for the metadata of message.
  * The caller should begin a map before calling this. */
 static void
@@ -463,14 +474,13 @@ format_part_text (const void *ctx, sprinter_t *sp, mime_node_t *node,
                notmuch_message_get_flag (message, NOTMUCH_MESSAGE_FLAG_EXCLUDED) ? 1 : 0,
                notmuch_message_get_filename (message));
     } else {
                notmuch_message_get_flag (message, NOTMUCH_MESSAGE_FLAG_EXCLUDED) ? 1 : 0,
                notmuch_message_get_filename (message));
     } else {
-       GMimeContentDisposition *disposition = g_mime_object_get_content_disposition (meta);
+       const char *disposition = _get_disposition (meta);
        const char *cid = g_mime_object_get_content_id (meta);
        const char *filename = leaf ?
            g_mime_part_get_filename (GMIME_PART (node->part)) : NULL;
 
        if (disposition &&
        const char *cid = g_mime_object_get_content_id (meta);
        const char *filename = leaf ?
            g_mime_part_get_filename (GMIME_PART (node->part)) : NULL;
 
        if (disposition &&
-           strcasecmp (g_mime_content_disposition_get_disposition (disposition),
-                       GMIME_DISPOSITION_ATTACHMENT) == 0)
+           strcasecmp (disposition, GMIME_DISPOSITION_ATTACHMENT) == 0)
            part_type = "attachment";
        else
            part_type = "part";
            part_type = "attachment";
        else
            part_type = "part";