talloc_free (ctx_quote);
}
+/* Write a MIME text part out to the given stream.
+ *
+ * Both line-ending conversion (CRLF->LF) and charset conversion ( ->
+ * UTF-8) will be performed, so it is inappropriate to call this
+ * function with a non-text part. Doing so will trigger an internal
+ * error.
+ */
static void
-show_part_content (GMimeObject *part, GMimeStream *stream_out)
+show_text_part_content (GMimeObject *part, GMimeStream *stream_out)
{
+ GMimeContentType *content_type = g_mime_object_get_content_type (GMIME_OBJECT (part));
GMimeStream *stream_filter = NULL;
GMimeDataWrapper *wrapper;
const char *charset;
- /* do nothing if this is a multipart */
- if (GMIME_IS_MULTIPART (part) || GMIME_IS_MESSAGE_PART (part))
+ if (! g_mime_content_type_is_type (content_type, "text", "*"))
+ INTERNAL_ERROR ("Illegal request to format non-text part (%s) as text.",
+ g_mime_content_type_to_string (content_type));
+
+ if (stream_out == NULL)
return;
- charset = g_mime_object_get_content_type_parameter (part, "charset");
+ stream_filter = g_mime_stream_filter_new (stream_out);
+ g_mime_stream_filter_add(GMIME_STREAM_FILTER (stream_filter),
+ g_mime_filter_crlf_new (FALSE, FALSE));
- if (stream_out) {
- stream_filter = g_mime_stream_filter_new (stream_out);
- g_mime_stream_filter_add(GMIME_STREAM_FILTER (stream_filter),
- g_mime_filter_crlf_new (FALSE, FALSE));
- if (charset) {
- GMimeFilter *charset_filter;
- charset_filter = g_mime_filter_charset_new (charset, "UTF-8");
- /* This result can be NULL for things like "unknown-8bit".
- * Don't set a NULL filter as that makes GMime print
- * annoying assertion-failure messages on stderr. */
- if (charset_filter)
- g_mime_stream_filter_add (GMIME_STREAM_FILTER (stream_filter),
- charset_filter);
- }
+ charset = g_mime_object_get_content_type_parameter (part, "charset");
+ if (charset) {
+ GMimeFilter *charset_filter;
+ charset_filter = g_mime_filter_charset_new (charset, "UTF-8");
+ /* This result can be NULL for things like "unknown-8bit".
+ * Don't set a NULL filter as that makes GMime print
+ * annoying assertion-failure messages on stderr. */
+ if (charset_filter)
+ g_mime_stream_filter_add (GMIME_STREAM_FILTER (stream_filter),
+ charset_filter);
}
wrapper = g_mime_part_get_content_object (GMIME_PART (part));
}
static const char*
-signerstatustostring (GMimeSignerStatus x)
+signer_status_to_string (GMimeSignerStatus x)
{
switch (x) {
case GMIME_SIGNER_STATUS_NONE:
{
GMimeContentDisposition *disposition = g_mime_object_get_content_disposition (part);
GMimeContentType *content_type = g_mime_object_get_content_type (GMIME_OBJECT (part));
- GMimeStream *stream_stdout = g_mime_stream_file_new (stdout);
printf (", Content-type: %s\n", g_mime_content_type_to_string (content_type));
if (g_mime_content_type_is_type (content_type, "text", "*") &&
!g_mime_content_type_is_type (content_type, "text", "html"))
{
+ GMimeStream *stream_stdout = g_mime_stream_file_new (stdout);
g_mime_stream_file_set_owner (GMIME_STREAM_FILE (stream_stdout), FALSE);
- show_part_content (part, stream_stdout);
+ show_text_part_content (part, stream_stdout);
g_object_unref(stream_stdout);
}
else if (g_mime_content_type_is_type (content_type, "multipart", "*") ||
printf ("{");
/* status */
- printf ("\"status\": %s", json_quote_str (ctx_quote, signerstatustostring(signer->status)));
+ printf ("\"status\": %s",
+ json_quote_str (ctx_quote,
+ signer_status_to_string (signer->status)));
if (signer->status == GMIME_SIGNER_STATUS_GOOD)
{
if (g_mime_content_type_is_type (content_type, "text", "*") &&
!g_mime_content_type_is_type (content_type, "text", "html"))
{
- show_part_content (part, stream_memory);
+ show_text_part_content (part, stream_memory);
part_content = g_mime_stream_mem_get_byte_array (GMIME_STREAM_MEM (stream_memory));
printf (", \"content\": %s", json_quote_chararray (ctx, (char *) part_content->data, part_content->len));
static void
format_part_content_raw (GMimeObject *part)
{
- GMimeStream *stream_stdout = g_mime_stream_file_new (stdout);
+ GMimeStream *stream_stdout;
+ GMimeStream *stream_filter = NULL;
+ GMimeDataWrapper *wrapper;
+
+ stream_stdout = g_mime_stream_file_new (stdout);
g_mime_stream_file_set_owner (GMIME_STREAM_FILE (stream_stdout), FALSE);
- show_part_content (part, stream_stdout);
- g_object_unref(stream_stdout);
+
+ stream_filter = g_mime_stream_filter_new (stream_stdout);
+
+ wrapper = g_mime_part_get_content_object (GMIME_PART (part));
+
+ if (wrapper && stream_filter)
+ g_mime_data_wrapper_write_to_stream (wrapper, stream_filter);
+
+ if (stream_filter)
+ g_object_unref (stream_filter);
+
+ if (stream_stdout)
+ g_object_unref(stream_stdout);
}
static void
} else if ((STRNCMP_LITERAL (argv[i], "--verify") == 0) ||
(STRNCMP_LITERAL (argv[i], "--decrypt") == 0)) {
if (params.cryptoctx == NULL) {
- GMimeSession* session = g_object_new(notmuch_gmime_session_get_type(), NULL);
+ GMimeSession* session = g_object_new(g_mime_session_get_type(), NULL);
if (NULL == (params.cryptoctx = g_mime_gpg_context_new(session, "gpg")))
fprintf (stderr, "Failed to construct gpg context.\n");
else