email = talloc_strdup (ctx, email);
DONE:
- /* XXX: How to free addresses here? */
+ if (addresses)
+ g_object_unref (addresses);
+
return email;
}
/* 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)
+ if (charset_filter) {
g_mime_stream_filter_add (GMIME_STREAM_FILTER (stream_filter),
charset_filter);
+ g_object_unref (charset_filter);
+ }
+
}
wrapper = g_mime_part_get_content_object (GMIME_PART (part));
printf (", \"filename\": %s", json_quote_str (ctx, filename));
}
- if (g_mime_content_type_is_type (content_type, "text", "*") &&
- !g_mime_content_type_is_type (content_type, "text", "html"))
+ if (g_mime_content_type_is_type (content_type, "text", "*"))
{
- show_text_part_content (part, stream_memory);
- part_content = g_mime_stream_mem_get_byte_array (GMIME_STREAM_MEM (stream_memory));
+ /* For non-HTML text/* parts, we include the content in the
+ * JSON. Since JSON must be Unicode, we handle charset
+ * decoding here and do not report a charset to the caller.
+ * For text/html parts, we do not include the content. If a
+ * caller is interested in text/html parts, it should retrieve
+ * them separately and they will not be decoded. Since this
+ * makes charset decoding the responsibility on the caller, we
+ * report the charset for text/html parts.
+ */
+ if (g_mime_content_type_is_type (content_type, "text", "html"))
+ {
+ const char *content_charset = g_mime_object_get_content_type_parameter (GMIME_OBJECT (part), "charset");
+
+ if (content_charset != NULL)
+ printf (", \"content-charset\": %s", json_quote_str (ctx, content_charset));
+ }
+ else
+ {
+ 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));
+ printf (", \"content\": %s", json_quote_chararray (ctx, (char *) part_content->data, part_content->len));
+ }
}
else if (g_mime_content_type_is_type (content_type, "multipart", "*"))
{
static void
format_part_content_raw (GMimeObject *part)
{
+ if (! GMIME_IS_PART (part))
+ return;
+
GMimeStream *stream_stdout;
GMimeStream *stream_filter = NULL;
GMimeDataWrapper *wrapper;
}
if (format->part_content)
- show_message_body (notmuch_message_get_filename (message),
- format, params);
+ show_message_body (message, format, params);
if (params->part <= 0) {
fputs (format->body_end, stdout);
while (!feof (file)) {
size = fread (buf, 1, sizeof (buf), file);
- fwrite (buf, size, 1, stdout);
+ (void) fwrite (buf, size, 1, stdout);
}
fclose (file);
params.cryptoctx = NULL;
params.decrypt = 0;
+ argc--; argv++; /* skip subcommand argument */
+
for (i = 0; i < argc && argv[i][0] == '-'; i++) {
if (strcmp (argv[i], "--") == 0) {
i++;