[evolution/wip/gsettings] Avoid camel_stream_printf().



commit af704b849e6a28582ca6d75b0ee0ef3a867587cf
Author: Matthew Barnes <mbarnes redhat com>
Date:   Tue Jul 5 14:02:01 2011 -0400

    Avoid camel_stream_printf().
    
    camel_stream_printf() is next on the chopping block.
    
    Use g_strdup_printf() or a GString to construct a formatted string in
    memory, pass it to camel_stream_write() in one go, and then check for
    errors (unless it's a memory stream).

 em-format/em-format-quote.c             |   50 +++--
 mail/em-composer-utils.c                |   25 ++-
 mail/em-format-html-display.c           |  185 ++++++++++++------
 mail/em-format-html.c                   |  323 +++++++++++++++++++++++--------
 plugins/audio-inline/audio-inline.c     |   20 ++-
 plugins/image-inline/image-inline.c     |    6 +-
 plugins/itip-formatter/itip-formatter.c |   11 +-
 plugins/vcard-inline/vcard-inline.c     |    6 +-
 8 files changed, 441 insertions(+), 185 deletions(-)
---
diff --git a/em-format/em-format-quote.c b/em-format/em-format-quote.c
index a5a8d0d..c11476a 100644
--- a/em-format/em-format-quote.c
+++ b/em-format/em-format-quote.c
@@ -101,7 +101,8 @@ emfq_format_clone (EMFormat *emf,
 	gconf = gconf_client_get_default ();
 	if (gconf_client_get_bool (
 		gconf, "/apps/evolution/mail/composer/top_signature", NULL))
-		camel_stream_printf (emfq->priv->stream, "<br>\n");
+		camel_stream_write_string (
+			emfq->priv->stream, "<br>\n", cancellable, NULL);
 	g_object_unref (gconf);
 	handle = em_format_find_handler(emf, "x-evolution/message/prefix");
 	if (handle)
@@ -274,7 +275,7 @@ em_format_quote_new (const gchar *credits,
 
 static void
 emfq_format_text_header (EMFormatQuote *emfq,
-                         CamelStream *stream,
+                         GString *buffer,
                          const gchar *label,
                          const gchar *value,
                          guint32 flags,
@@ -295,9 +296,11 @@ emfq_format_text_header (EMFormatQuote *emfq,
 		html = value;
 
 	if (flags & EM_FORMAT_HEADER_BOLD)
-		camel_stream_printf (stream, "<b>%s</b>: %s<br>", label, html);
+		g_string_append_printf (
+			buffer, "<b>%s</b>: %s<br>", label, html);
 	else
-		camel_stream_printf (stream, "%s: %s<br>", label, html);
+		g_string_append_printf (
+			buffer, "%s: %s<br>", label, html);
 
 	g_free (mhtml);
 }
@@ -399,7 +402,7 @@ canon_header_name (gchar *name)
 
 static void
 emfq_format_header (EMFormat *emf,
-                    CamelStream *stream,
+                    GString *buffer,
                     CamelMedium *part,
                     const gchar *namein,
                     guint32 flags,
@@ -482,14 +485,14 @@ emfq_format_header (EMFormat *emf,
 		g_free (buf);
 	}
 
-	emfq_format_text_header (emfq, stream, label, txt, flags, is_html);
+	emfq_format_text_header (emfq, buffer, label, txt, flags, is_html);
 
 	g_free (value);
 }
 
 static void
 emfq_format_headers (EMFormatQuote *emfq,
-                     CamelStream *stream,
+                     GString *buffer,
                      CamelMedium *part)
 {
 	EMFormat *emf = (EMFormat *) emfq;
@@ -509,11 +512,11 @@ emfq_format_headers (EMFormatQuote *emfq,
 	while (link != NULL) {
 		EMFormatHeader *h = link->data;
 		emfq_format_header (
-			emf, stream, part, h->name, h->flags, charset);
+			emf, buffer, part, h->name, h->flags, charset);
 		link = g_list_next (link);
 	}
 
-	camel_stream_printf(stream, "<br>\n");
+	g_string_append (buffer, "<br>\n");
 }
 
 static void
@@ -526,9 +529,12 @@ emfq_format_message_prefix (EMFormat *emf,
 {
 	EMFormatQuote *emfq = (EMFormatQuote *) emf;
 
-	if (emfq->priv->credits != NULL)
-		camel_stream_printf (
-			stream, "%s<br>\n", emfq->priv->credits);
+	if (emfq->priv->credits != NULL) {
+		camel_stream_write_string (
+			stream, emfq->priv->credits, NULL, NULL);
+		camel_stream_write_string (
+			stream, "<br>\n", NULL, NULL);
+	}
 }
 
 static void
@@ -540,20 +546,28 @@ emfq_format_message (EMFormat *emf,
                      gboolean is_fallback)
 {
 	EMFormatQuote *emfq = (EMFormatQuote *) emf;
+	GString *buffer;
+
+	buffer = g_string_sized_new (1024);
 
 	if (emfq->priv->flags & EM_FORMAT_QUOTE_CITE)
-		camel_stream_printf (
-			stream, "<!--+GtkHTML:<DATA class=\"ClueFlow\" "
+		g_string_append (
+			buffer,
+			"<!--+GtkHTML:<DATA class=\"ClueFlow\" "
 			"key=\"orig\" value=\"1\">-->\n"
 			"<blockquote type=cite>\n");
 
 	if (((CamelMimePart *) emf->message) != part) {
-		camel_stream_printf (
-			stream,  "%s</br>\n",
+		g_string_append_printf (
+			buffer,
+			"%s</br>\n",
 			_("-------- Forwarded Message --------"));
-		emfq_format_headers (emfq, stream, (CamelMedium *) part);
+		emfq_format_headers (emfq, buffer, (CamelMedium *) part);
 	} else if (emfq->priv->flags & EM_FORMAT_QUOTE_HEADERS)
-		emfq_format_headers (emfq, stream, (CamelMedium *) part);
+		emfq_format_headers (emfq, buffer, (CamelMedium *) part);
+
+	camel_stream_write (
+		stream, buffer->str, buffer->len, cancellable, NULL);
 
 	em_format_part (emf, stream, part, cancellable);
 
diff --git a/mail/em-composer-utils.c b/mail/em-composer-utils.c
index c3b5465..1a964e7 100644
--- a/mail/em-composer-utils.c
+++ b/mail/em-composer-utils.c
@@ -1926,6 +1926,7 @@ em_utils_send_receipt (EMailSession *session,
 	gchar *self_address, *receipt_subject;
 	gchar *ua, *recipient;
 	gchar *transport_uid;
+	gchar *content;
 
 	message_id = camel_medium_get_header (
 		CAMEL_MEDIUM (message), "Message-ID");
@@ -1968,15 +1969,17 @@ em_utils_send_receipt (EMailSession *session,
 	camel_content_type_set_param (type, "charset", "UTF-8");
 	camel_data_wrapper_set_mime_type_field (receipt_text, type);
 	camel_content_type_unref (type);
-	stream = camel_stream_mem_new ();
-	camel_stream_printf (stream,
-	/* Translators: First %s is an email address, second %s
-	 * is the subject of the email, third %s is the date. */
+	content = g_strdup_printf (
+		/* Translators: First %s is an email address, second %s
+		 * is the subject of the email, third %s is the date. */
 		_("Your message to %s about \"%s\" on %s has been read."),
 		self_address, message_subject, message_date);
+	stream = camel_stream_mem_new ();
+	camel_stream_write_string (stream, content, NULL, NULL);
 	camel_data_wrapper_construct_from_stream_sync (
 		receipt_text, stream, NULL, NULL);
 	g_object_unref (stream);
+	g_free (content);
 
 	part = camel_mime_part_new ();
 	camel_medium_set_content (CAMEL_MEDIUM (part), receipt_text);
@@ -1999,16 +2002,18 @@ em_utils_send_receipt (EMailSession *session,
 	camel_data_wrapper_set_mime_type_field (receipt_data, type);
 	camel_content_type_unref (type);
 
+	content = g_strdup_printf (
+		"Reporting-UA: %s\n"
+		"Final-Recipient: %s\n"
+		"Original-Message-ID: %s\n"
+		"Disposition: manual-action/MDN-sent-manually; displayed\n",
+		ua, recipient, message_id);
 	stream = camel_stream_mem_new ();
-	camel_stream_printf (stream,
-			     "Reporting-UA: %s\n"
-			     "Final-Recipient: %s\n"
-			     "Original-Message-ID: %s\n"
-			     "Disposition: manual-action/MDN-sent-manually; displayed\n",
-			     ua, recipient, message_id);
+	camel_stream_write_string (stream, content, NULL, NULL);
 	camel_data_wrapper_construct_from_stream_sync (
 		receipt_data, stream, NULL, NULL);
 	g_object_unref (stream);
+	g_free (content);
 
 	g_free (ua);
 	g_free (recipient);
diff --git a/mail/em-format-html-display.c b/mail/em-format-html-display.c
index 75cb530..90b60ac 100644
--- a/mail/em-format-html-display.c
+++ b/mail/em-format-html-display.c
@@ -435,6 +435,7 @@ efhd_format_attachment (EMFormat *emf,
                         const EMFormatHandler *handle,
                         GCancellable *cancellable)
 {
+	GString *buffer;
 	gchar *classid, *text, *html;
 	struct _attach_puri *info;
 
@@ -458,20 +459,22 @@ efhd_format_attachment (EMFormat *emf,
 		info->encrypt = emf->valid->encrypt.status;
 	}
 
-	camel_stream_write_string (
-		stream, EM_FORMAT_HTML_VPAD
-		"<table cellspacing=0 cellpadding=0><tr><td>"
-		"<table width=10 cellspacing=0 cellpadding=0>"
-		"<tr><td></td></tr></table></td>",
-		cancellable, NULL);
-
-	camel_stream_printf (
-		stream, "<td><object classid=\"%s\"></object></td>", classid);
+	buffer = g_string_sized_new (1024);
 
-	camel_stream_write_string (
-		stream, "<td><table width=3 cellspacing=0 cellpadding=0>"
-		"<tr><td></td></tr></table></td><td><font size=-1>",
-		cancellable, NULL);
+	g_string_append_printf (
+		buffer, EM_FORMAT_HTML_VPAD
+		"<table cellspacing=0 cellpadding=0>"
+		"<tr><td>"
+		"<table width=10 cellspacing=0 cellpadding=0>"
+		"<tr><td></td><tr>"
+		"</table>"
+		"</td>"
+		"<td><object classid=\"%s\"></object></td>"
+		"<td><table width=3 cellspacing=0 cellpadding=0>"
+		"<tr><td></td></tr>"
+		"</table></td>"
+		"<td><font size=-1>",
+		classid);
 
 	/* output some info about it */
 	/* FIXME: should we look up mime_type from object again? */
@@ -479,13 +482,20 @@ efhd_format_attachment (EMFormat *emf,
 	html = camel_text_to_html (
 		text, EM_FORMAT_HTML (emf)->text_html_flags &
 		CAMEL_MIME_FILTER_TOHTML_CONVERT_URLS, 0);
-	camel_stream_write_string (stream, html, cancellable, NULL);
+	g_string_append (buffer, html);
 	g_free (html);
 	g_free (text);
 
-	camel_stream_write_string (
-		stream, "</font></td></tr><tr></table>\n"
-		EM_FORMAT_HTML_VPAD, cancellable, NULL);
+	g_string_append (
+		buffer,
+		"</font></td>"
+		"</tr><tr></table>\n"
+		EM_FORMAT_HTML_VPAD);
+
+	camel_stream_write (
+		stream, buffer->str, buffer->len, cancellable, NULL);
+
+	g_string_free (buffer, TRUE);
 
 	if (handle && info->shown)
 		handle->handler (
@@ -504,6 +514,7 @@ efhd_format_optional (EMFormat *emf,
 	gchar *classid, *html;
 	struct _attach_puri *info;
 	CamelStream *stream = NULL;
+	GString *buffer;
 
 	if (CAMEL_IS_STREAM_FILTER (fstream))
 		stream = camel_stream_filter_get_source (
@@ -530,10 +541,12 @@ efhd_format_optional (EMFormat *emf,
 		info->encrypt = emf->valid->encrypt.status;
 	}
 
-	camel_stream_write_string (
-		stream, EM_FORMAT_HTML_VPAD
+	buffer = g_string_sized_new (1024);
+
+	g_string_append (
+		buffer, EM_FORMAT_HTML_VPAD
 		"<table cellspacing=0 cellpadding=0><tr><td>"
-		"<h3><font size=-1 color=red>", cancellable, NULL);
+		"<h3><font size=-1 color=red>");
 
 	html = camel_text_to_html (
 		_("Evolution cannot render this email as it is too "
@@ -541,21 +554,21 @@ efhd_format_optional (EMFormat *emf,
 		  "with an external text editor."),
 		EM_FORMAT_HTML (emf)->text_html_flags &
 		CAMEL_MIME_FILTER_TOHTML_CONVERT_URLS, 0);
-	camel_stream_write_string (stream, html, cancellable, NULL);
-	camel_stream_write_string (
-		stream, "</font></h3></td></tr></table>\n",
-		cancellable, NULL);
-	camel_stream_write_string (
-		stream, "<table cellspacing=0 cellpadding=0><tr>",
-		cancellable, NULL);
-	camel_stream_printf (
-		stream, "<td><object classid=\"%s\"></object>"
-		"</td></tr></table>", classid);
-
+	g_string_append (buffer, html);
 	g_free (html);
 
-	camel_stream_write_string (
-		stream, EM_FORMAT_HTML_VPAD, cancellable, NULL);
+	g_string_append_printf (
+		buffer,
+		"</font></h3></td></tr></table>\n"
+		"<table cellspacing=0 cellpadding=0><tr>"
+		"<td><object classid=\"%s\"></object>"
+		"</td></tr></table>" EM_FORMAT_HTML_VPAD,
+		classid);
+
+	camel_stream_write (
+		stream, buffer->str, buffer->len, cancellable, NULL);
+
+	g_string_free (buffer, TRUE);
 
 	g_free (classid);
 }
@@ -575,11 +588,15 @@ efhd_format_secure (EMFormat *emf,
 	if (emf->valid == valid
 	    && (valid->encrypt.status != CAMEL_CIPHER_VALIDITY_ENCRYPT_NONE
 		|| valid->sign.status != CAMEL_CIPHER_VALIDITY_SIGN_NONE)) {
+		GString *buffer;
 		gchar *classid;
 		struct _smime_pobject *pobj;
 
-		camel_stream_printf (
-			stream, "<table border=0 width=\"100%%\" "
+		buffer = g_string_sized_new (1024);
+
+		g_string_append_printf (
+			buffer,
+			"<table border=0 width=\"100%%\" "
 			"cellpadding=3 cellspacing=0%s><tr>",
 			smime_sign_colour[valid->sign.status]);
 
@@ -591,8 +608,9 @@ efhd_format_secure (EMFormat *emf,
 			classid, part, efhd_xpkcs7mime_button);
 		pobj->valid = camel_cipher_validity_clone (valid);
 		pobj->object.free = efhd_xpkcs7mime_free;
-		camel_stream_printf (
-			stream, "<td valign=center><object classid=\"%s\">"
+		g_string_append_printf (
+			buffer,
+			"<td valign=center><object classid=\"%s\">"
 			"</object></td><td width=100%% valign=center>",
 			classid);
 		g_free (classid);
@@ -605,11 +623,13 @@ efhd_format_secure (EMFormat *emf,
 			status = valid->sign.status;
 			desc = smime_sign_table[status].shortdesc;
 
-			camel_stream_printf (stream, "%s", gettext (desc));
+			g_string_append (buffer, gettext (desc));
 
-			signers = em_format_html_format_cert_infos ((CamelCipherCertInfo *) valid->sign.signers.head);
+			signers = em_format_html_format_cert_infos (
+				(CamelCipherCertInfo *) valid->sign.signers.head);
 			if (signers && *signers) {
-				camel_stream_printf (stream, " (%s)", signers);
+				g_string_append_printf (
+					buffer, " (%s)", signers);
 			}
 			g_free (signers);
 		}
@@ -618,16 +638,20 @@ efhd_format_secure (EMFormat *emf,
 			const gchar *desc;
 			gint status;
 
-			if (valid->sign.status != CAMEL_CIPHER_VALIDITY_SIGN_NONE) {
-				camel_stream_printf (stream, "<br>");
-			}
+			if (valid->sign.status != CAMEL_CIPHER_VALIDITY_SIGN_NONE)
+				g_string_append (buffer, "<br>");
 
 			status = valid->encrypt.status;
 			desc = smime_encrypt_table[status].shortdesc;
-			camel_stream_printf (stream, "%s", gettext (desc));
+			g_string_append (buffer, gettext (desc));
 		}
 
-		camel_stream_printf(stream, "</td></tr></table>");
+		g_string_append (buffer, "</td></tr></table>");
+
+		camel_stream_write (
+			stream, buffer->str, buffer->len, cancellable, NULL);
+
+		g_string_free (buffer, TRUE);
 	}
 }
 
@@ -769,14 +793,20 @@ efhd_message_prefix (EMFormat *emf,
 	const gchar *flag, *comp, *due;
 	time_t date;
 	gchar *iconpath, *due_date_str;
+	GString *buffer;
 
 	if (emf->folder == NULL || emf->uid == NULL
 	    || (flag = camel_folder_get_message_user_tag(emf->folder, emf->uid, "follow-up")) == NULL
 	    || flag[0] == 0)
 		return;
 
+	buffer = g_string_sized_new (1024);
+
 	/* header displayed for message-flags in mail display */
-	camel_stream_printf(stream, "<table border=1 width=\"100%%\" cellspacing=2 cellpadding=2><tr>");
+	g_string_append (
+		buffer,
+		"<table border=1 width=\"100%%\" "
+		"cellspacing=2 cellpadding=2><tr>");
 
 	comp = camel_folder_get_message_user_tag(emf->folder, emf->uid, "completed-on");
 	iconpath = e_icon_factory_get_icon_filename (comp && comp[0] ? "stock_mail-flag-for-followup-done" : "stock_mail-flag-for-followup", GTK_ICON_SIZE_MENU);
@@ -790,20 +820,33 @@ efhd_message_prefix (EMFormat *emf,
 		if (iconpart) {
 			gchar *classid;
 
-			classid = g_strdup_printf("icon:///em-format-html-display/%s/%s", emf->part_id->str, comp&&comp[0]?"comp":"uncomp");
-			camel_stream_printf(stream, "<td align=\"left\"><img src=\"%s\"></td>", classid);
-			(void) em_format_add_puri (emf, sizeof (EMFormatPURI), classid, iconpart, efhd_write_image);
+			classid = g_strdup_printf (
+				"icon:///em-format-html-display/%s/%s",
+				emf->part_id->str,
+				comp && comp[0] ? "comp" : "uncomp");
+			g_string_append_printf (
+				buffer,
+				"<td align=\"left\">"
+				"<img src=\"%s\"></td>",
+				classid);
+			(void) em_format_add_puri (
+				emf, sizeof (EMFormatPURI),
+				classid, iconpart, efhd_write_image);
 			g_free (classid);
 			g_object_unref (iconpart);
 		}
 	}
 
-	camel_stream_printf(stream, "<td align=\"left\" width=\"100%%\">");
+	g_string_append (buffer, "<td align=\"left\" width=\"100%%\">");
 
 	if (comp && comp[0]) {
 		date = camel_header_decode_date (comp, NULL);
-		due_date_str = e_datetime_format_format ("mail", "header", DTFormatKindDateTime, date);
-		camel_stream_printf (stream, "%s, %s %s", flag, _("Completed on"), due_date_str ? due_date_str : "???");
+		due_date_str = e_datetime_format_format (
+			"mail", "header", DTFormatKindDateTime, date);
+		g_string_append_printf (
+			buffer, "%s, %s %s",
+			flag, _("Completed on"),
+			due_date_str ? due_date_str : "???");
 		g_free (due_date_str);
 	} else if ((due = camel_folder_get_message_user_tag(emf->folder, emf->uid, "due-by")) != NULL && due[0]) {
 		time_t now;
@@ -811,16 +854,30 @@ efhd_message_prefix (EMFormat *emf,
 		date = camel_header_decode_date (due, NULL);
 		now = time (NULL);
 		if (now > date)
-			camel_stream_printf(stream, "<b>%s</b>&nbsp;", _("Overdue:"));
-
-		due_date_str = e_datetime_format_format ("mail", "header", DTFormatKindDateTime, date);
-		/* To Translators: the "by" is part of the string, like "Follow-up by Tuesday, January 13, 2009" */
-		camel_stream_printf (stream, "%s %s %s", flag, _("by"), due_date_str ? due_date_str : "???");
+			g_string_append_printf (
+				buffer,
+				"<b>%s</b>&nbsp;",
+				_("Overdue:"));
+
+		due_date_str = e_datetime_format_format (
+			"mail", "header", DTFormatKindDateTime, date);
+		/* Translators: the "by" is part of the string,
+		 * like "Follow-up by Tuesday, January 13, 2009" */
+		g_string_append_printf (
+			buffer, "%s %s %s",
+			flag, _("by"),
+			due_date_str ? due_date_str : "???");
+		g_free (due_date_str);
 	} else {
-		camel_stream_printf(stream, "%s", flag);
+		g_string_append (buffer, flag);
 	}
 
-	camel_stream_printf(stream, "</td></tr></table>");
+	g_string_append (buffer, "</td></tr></table>");
+
+	camel_stream_write (
+		stream, buffer->str, buffer->len, cancellable, NULL);
+
+	g_string_free (buffer, TRUE);
 }
 
 /* ********************************************************************** */
@@ -1053,8 +1110,10 @@ efhd_message_add_bar (EMFormat *emf,
                       const EMFormatHandler *info)
 {
 	gchar *classid;
+	gchar *content;
 
-	classid = g_strdup_printf ("attachment-bar:%s", emf->current_message_part_id);
+	classid = g_strdup_printf (
+		"attachment-bar:%s", emf->current_message_part_id);
 
 	/* XXX Apparently this installs the callback for -all-
 	 *     EMFormatHTML subclasses, not just this subclass.
@@ -1065,8 +1124,10 @@ efhd_message_add_bar (EMFormat *emf,
 		sizeof (EMFormatHTMLPObject),
 		classid, part, efhd_add_bar);
 
-	camel_stream_printf (
-		stream, "<td><object classid=\"%s\"></object></td>", classid);
+	content = g_strdup_printf (
+		"<td><object classid=\"%s\"></object></td>", classid);
+	camel_stream_write_string (stream, content, NULL, NULL);
+	g_free (content);
 
 	g_free (classid);
 }
diff --git a/mail/em-format-html.c b/mail/em-format-html.c
index b7b6e4d..4a34aa0 100644
--- a/mail/em-format-html.c
+++ b/mail/em-format-html.c
@@ -171,17 +171,19 @@ efh_format_exec (struct _format_msg *m,
                  GError **error)
 {
 	EMFormat *format;
+	CamelStream *stream;
 	struct _EMFormatHTMLJob *job;
 	GNode *puri_level;
 	CamelURL *base;
+	gchar *content;
 
 	if (m->format->priv->web_view == NULL)
 		return;
 
 	format = EM_FORMAT (m->format);
+	stream = CAMEL_STREAM (m->estream);
 
-	camel_stream_printf (
-		(CamelStream *) m->estream,
+	content = g_strdup_printf (
 		"<!doctype html public \"-//W3C//DTD HTML 4.0 TRANSITIONAL//EN\">\n<html>\n"
 		"<head>\n<meta name=\"generator\" content=\"Evolution Mail Component\">\n</head>\n"
 		"<body bgcolor =\"#%06x\" text=\"#%06x\" marginwidth=6 marginheight=6>\n",
@@ -191,12 +193,14 @@ efh_format_exec (struct _format_msg *m,
 		e_color_to_value (
 			&m->format->priv->colors[
 			EM_FORMAT_HTML_COLOR_HEADER]));
+	camel_stream_write_string (stream, content, cancellable, NULL);
+	g_free (content);
 
 	/* <insert top-header stuff here> */
 
 	if (format->mode == EM_FORMAT_MODE_SOURCE) {
 		em_format_format_source (
-			format, (CamelStream *) m->estream,
+			format, stream,
 			(CamelMimePart *) m->message, cancellable);
 	} else {
 		const EMFormatHandler *handle;
@@ -207,7 +211,7 @@ efh_format_exec (struct _format_msg *m,
 
 		if (handle != NULL)
 			handle->handler (
-				format, CAMEL_STREAM (m->estream),
+				format, stream,
 				CAMEL_MIME_PART (m->message), handle,
 				cancellable, FALSE);
 
@@ -216,12 +220,12 @@ efh_format_exec (struct _format_msg *m,
 
 		if (handle != NULL)
 			handle->handler (
-				format, CAMEL_STREAM (m->estream),
+				format, stream,
 				CAMEL_MIME_PART (m->message), handle,
 				cancellable, FALSE);
 	}
 
-	camel_stream_flush ((CamelStream *) m->estream, cancellable, NULL);
+	camel_stream_flush (stream, cancellable, NULL);
 
 	puri_level = format->pending_uri_level;
 	base = format->base;
@@ -704,14 +708,22 @@ efh_format_error (EMFormat *emf,
                   CamelStream *stream,
                   const gchar *txt)
 {
+	GString *buffer;
 	gchar *html;
 
+	buffer = g_string_new ("<em><font color=\"red\">");
+
 	html = camel_text_to_html (
 		txt, CAMEL_MIME_FILTER_TOHTML_CONVERT_NL |
 		CAMEL_MIME_FILTER_TOHTML_CONVERT_URLS, 0);
-	camel_stream_printf (
-		stream, "<em><font color=\"red\">%s</font></em><br>", html);
+	g_string_append (buffer, html);
 	g_free (html);
+
+	g_string_append (buffer, "</font></em><br>");
+
+	camel_stream_write (stream, buffer->str, buffer->len, NULL, NULL);
+
+	g_string_free (buffer, TRUE);
 }
 
 static void
@@ -734,11 +746,13 @@ efh_format_source (EMFormat *emf,
 		CAMEL_STREAM_FILTER (filtered_stream), filter);
 	g_object_unref (filter);
 
-	camel_stream_write_string (stream, "<table><tr><td><tt>", cancellable, NULL);
-	em_format_format_text (emf, (CamelStream *) filtered_stream, dw, cancellable);
-	g_object_unref (filtered_stream);
+	camel_stream_write_string (
+		stream, "<table><tr><td><tt>", cancellable, NULL);
+	em_format_format_text (emf, filtered_stream, dw, cancellable);
+	camel_stream_write_string (
+		stream, "</tt></td></tr></table>", cancellable, NULL);
 
-	camel_stream_write_string(stream, "</tt></td></tr></table>", cancellable, NULL);
+	g_object_unref (filtered_stream);
 }
 
 static void
@@ -1725,12 +1739,23 @@ efh_format_secure (EMFormat *emf,
 		gchar *classid, *iconpath;
 		const gchar *icon;
 		CamelMimePart *iconpart;
+		GString *buffer;
+
+		buffer = g_string_sized_new (1024);
 
-		camel_stream_printf (stream, "<table border=0 width=\"100%%\" cellpadding=3 cellspacing=0%s><tr>",
-				     smime_sign_colour[valid->sign.status]);
+		g_string_append_printf (
+			buffer,
+			"<table border=0 width=\"100%%\" "
+			"cellpadding=3 cellspacing=0%s><tr>",
+			smime_sign_colour[valid->sign.status]);
 
-		classid = g_strdup_printf("smime:///em-format-html/%s/icon/signed", emf->part_id->str);
-		camel_stream_printf(stream, "<td valign=\"top\"><img src=\"%s\"></td><td valign=\"top\" width=\"100%%\">", classid);
+		classid = g_strdup_printf (
+			"smime:///em-format-html/%s/icon/signed",
+			emf->part_id->str);
+		g_string_append_printf (
+			buffer,
+			"<td valign=\"top\"><img src=\"%s\"></td>"
+			"<td valign=\"top\" width=\"100%%\">", classid);
 
 		if (valid->sign.status != 0)
 			icon = smime_sign_table[valid->sign.status].icon;
@@ -1748,24 +1773,33 @@ efh_format_secure (EMFormat *emf,
 		if (valid->sign.status != CAMEL_CIPHER_VALIDITY_SIGN_NONE) {
 			gchar *signers;
 
-			camel_stream_printf (stream, "%s", _(smime_sign_table[valid->sign.status].shortdesc));
+			g_string_append (
+				buffer, _(smime_sign_table[valid->sign.status].shortdesc));
 
-			signers = em_format_html_format_cert_infos ((CamelCipherCertInfo *) valid->sign.signers.head);
+			signers = em_format_html_format_cert_infos (
+				(CamelCipherCertInfo *) valid->sign.signers.head);
 			if (signers && *signers) {
-				camel_stream_printf (stream, " (%s)", signers);
+				g_string_append_printf (
+					buffer, " (%s)", signers);
 			}
 			g_free (signers);
 		}
 
 		if (valid->encrypt.status != CAMEL_CIPHER_VALIDITY_ENCRYPT_NONE) {
-			if (valid->sign.status != CAMEL_CIPHER_VALIDITY_SIGN_NONE) {
-				camel_stream_printf (stream, "<br>");
-			}
+			if (valid->sign.status != CAMEL_CIPHER_VALIDITY_SIGN_NONE)
+				g_string_append (buffer, "<br>");
 
-			camel_stream_printf (stream, "%s", _(smime_encrypt_table[valid->encrypt.status].shortdesc));
+			g_string_append (
+				buffer, _(smime_encrypt_table[valid->encrypt.status].shortdesc));
 		}
 
-		camel_stream_printf(stream, "</td></tr></table>");
+		g_string_append (buffer, "</td></tr></table>");
+
+		camel_stream_write (
+			stream, buffer->str,
+			buffer->len, cancellable, NULL);
+
+		g_string_free (buffer, TRUE);
 	}
 }
 
@@ -1878,8 +1912,12 @@ efh_text_plain (EMFormat *emf,
 
 		type = camel_mime_part_get_content_type (newpart);
 		if (camel_content_type_is (type, "text", "*") && (is_fallback || !camel_content_type_is (type, "text", "calendar"))) {
-			camel_stream_printf (
-				stream, "<div style=\"border: solid #%06x 1px; background-color: #%06x; padding: 10px; color: #%06x;\">\n",
+			gchar *content;
+
+			content = g_strdup_printf (
+				"<div style=\"border: solid #%06x 1px; "
+				"background-color: #%06x; padding: 10px; "
+				"color: #%06x;\">\n<tt>\n" EFH_MESSAGE_START,
 				e_color_to_value (
 					&efh->priv->colors[
 					EM_FORMAT_HTML_COLOR_FRAME]),
@@ -1890,7 +1928,9 @@ efh_text_plain (EMFormat *emf,
 					&efh->priv->colors[
 					EM_FORMAT_HTML_COLOR_TEXT]));
 			camel_stream_write_string (
-				stream, "<tt>\n" EFH_MESSAGE_START, cancellable, NULL);
+				stream, content, cancellable, NULL);
+			g_free (content);
+
 			em_format_format_text (
 				emf, filtered_stream,
 				(CamelDataWrapper *) newpart,
@@ -1921,6 +1961,7 @@ efh_text_enriched (EMFormat *emf,
 	CamelStream *filtered_stream;
 	CamelMimeFilter *enriched;
 	guint32 flags = 0;
+	gchar *content;
 
 	if (!strcmp(info->mime_type, "text/richtext")) {
 		flags = CAMEL_MIME_FILTER_ENRICHED_IS_RICHTEXT;
@@ -1939,8 +1980,10 @@ efh_text_enriched (EMFormat *emf,
 		CAMEL_STREAM_FILTER (filtered_stream), enriched);
 	g_object_unref (enriched);
 
-	camel_stream_printf (
-		stream, "<div style=\"border: solid #%06x 1px; background-color: #%06x; padding: 10px; color: #%06x;\">\n" EFH_MESSAGE_START,
+	content = g_strdup_printf (
+		"<div style=\"border: solid #%06x 1px; "
+		"background-color: #%06x; padding: 10px; "
+		"color: #%06x;\">\n" EFH_MESSAGE_START,
 		e_color_to_value (
 			&efh->priv->colors[
 			EM_FORMAT_HTML_COLOR_FRAME]),
@@ -1950,6 +1993,8 @@ efh_text_enriched (EMFormat *emf,
 		e_color_to_value (
 			&efh->priv->colors[
 			EM_FORMAT_HTML_COLOR_TEXT]));
+	camel_stream_write_string (stream, content, cancellable, NULL);
+	g_free (content);
 
 	em_format_format_text (
 		emf, (CamelStream *) filtered_stream,
@@ -1993,9 +2038,11 @@ efh_text_html (EMFormat *emf,
 	EMFormatHTML *efh = EM_FORMAT_HTML (emf);
 	const gchar *location;
 	gchar *cid = NULL;
+	gchar *content;
 
-	camel_stream_printf (
-		stream, "<div style=\"border: solid #%06x 1px; background-color: #%06x; color: #%06x;\">\n"
+	content = g_strdup_printf (
+		"<div style=\"border: solid #%06x 1px; "
+		"background-color: #%06x; color: #%06x;\">\n"
 		"<!-- text/html -->\n" EFH_MESSAGE_START,
 		e_color_to_value (
 			&efh->priv->colors[
@@ -2006,6 +2053,8 @@ efh_text_html (EMFormat *emf,
 		e_color_to_value (
 			&efh->priv->colors[
 			EM_FORMAT_HTML_COLOR_TEXT]));
+	camel_stream_write_string (stream, content, cancellable, NULL);
+	g_free (content);
 
 	/* TODO: perhaps we don't need to calculate this anymore now base is handled better */
 	/* calculate our own location string so add_puri doesn't do it
@@ -2034,10 +2083,11 @@ efh_text_html (EMFormat *emf,
 		emf, sizeof (EMFormatPURI), cid,
 		part, efh_write_text_html);
 	d(printf("adding iframe, location %s\n", cid));
-	camel_stream_printf (stream,
-			    "<iframe src=\"%s\" frameborder=0 scrolling=no>could not get %s</iframe>\n"
-			    "</div>\n",
-			    cid, cid);
+	content = g_strdup_printf (
+		"<iframe src=\"%s\" frameborder=0 scrolling=no>"
+		"could not get %s</iframe>\n</div>\n", cid, cid);
+	camel_stream_write_string (stream, content, cancellable, NULL);
+	g_free (content);
 	g_free (cid);
 }
 
@@ -2053,9 +2103,12 @@ efh_message_external (EMFormat *emf,
 	CamelContentType *type;
 	const gchar *access_type;
 	gchar *url = NULL, *desc = NULL;
+	gchar *content;
 
 	if (!part) {
-		camel_stream_printf(stream, _("Unknown external-body part."));
+		camel_stream_write_string (
+			stream, _("Unknown external-body part."),
+			cancellable, NULL);
 		return;
 	}
 
@@ -2063,7 +2116,9 @@ efh_message_external (EMFormat *emf,
 	type = camel_mime_part_get_content_type (part);
 	access_type = camel_content_type_param (type, "access-type");
 	if (!access_type) {
-		camel_stream_printf(stream, _("Malformed external-body part."));
+		camel_stream_write_string (
+			stream, _("Malformed external-body part."),
+			cancellable, NULL);
 		return;
 	}
 
@@ -2131,14 +2186,21 @@ efh_message_external (EMFormat *emf,
 	} else
 		goto fail;
 
-	camel_stream_printf(stream, "<a href=\"%s\">%s</a>", url, desc);
+	content = g_strdup_printf ("<a href=\"%s\">%s</a>", url, desc);
+	camel_stream_write_string (stream, content, cancellable, NULL);
+	g_free (content);
+
 	g_free (url);
 	g_free (desc);
 
 	return;
 
 fail:
-	camel_stream_printf(stream, _("Pointer to unknown external data (\"%s\" type)"), access_type);
+	content = g_strdup_printf (
+		_("Pointer to unknown external data (\"%s\" type)"),
+		access_type);
+	camel_stream_write_string (stream, content, cancellable, NULL);
+	g_free (content);
 }
 
 static void
@@ -2153,10 +2215,13 @@ efh_message_deliverystatus (EMFormat *emf,
 	CamelStream *filtered_stream;
 	CamelMimeFilter *html_filter;
 	guint32 rgb = 0x737373;
+	gchar *content;
 
 	/* Yuck, this is copied from efh_text_plain */
-	camel_stream_printf (
-		stream, "<div style=\"border: solid #%06x 1px; background-color: #%06x; padding: 10px; color: #%06x;\">\n",
+	content = g_strdup_printf (
+		"<div style=\"border: solid #%06x 1px; "
+		"background-color: #%06x; padding: 10px; "
+		"color: #%06x;\">\n",
 		e_color_to_value (
 			&efh->priv->colors[
 			EM_FORMAT_HTML_COLOR_FRAME]),
@@ -2166,6 +2231,8 @@ efh_message_deliverystatus (EMFormat *emf,
 		e_color_to_value (
 			&efh->priv->colors[
 			EM_FORMAT_HTML_COLOR_TEXT]));
+	camel_stream_write_string (stream, content, cancellable, NULL);
+	g_free (content);
 
 	filtered_stream = camel_stream_filter_new (stream);
 	html_filter = camel_mime_filter_tohtml_new (efh->text_html_flags, rgb);
@@ -2346,11 +2413,15 @@ efh_image (EMFormat *emf,
            gboolean is_fallback)
 {
 	EMFormatPURI *puri;
+	gchar *content;
 
 	puri = em_format_add_puri (
 		emf, sizeof (EMFormatPURI), NULL, part, efh_write_image);
-	camel_stream_printf (
-		stream, "<img hspace=10 vspace=10 src=\"%s\">", puri->cid);
+
+	content = g_strdup_printf (
+		"<img hspace=10 vspace=10 src=\"%s\">", puri->cid);
+	camel_stream_write_string (stream, content, cancellable, NULL);
+	g_free (content);
 }
 
 /* Notes:
@@ -2415,7 +2486,11 @@ efh_builtin_init (EMFormatHTMLClass *efhc)
 /* ********************************************************************** */
 
 static void
-efh_format_text_header (EMFormatHTML *emfh, CamelStream *stream, const gchar *label, const gchar *value, guint32 flags)
+efh_format_text_header (EMFormatHTML *emfh,
+                        GString *buffer,
+                        const gchar *label,
+                        const gchar *value,
+                        guint32 flags)
 {
 	const gchar *fmt, *html;
 	gchar *mhtml = NULL;
@@ -2463,7 +2538,8 @@ efh_format_text_header (EMFormatHTML *emfh, CamelStream *stream, const gchar *la
 		}
 	}
 
-	camel_stream_printf (stream, fmt, label, html);
+	g_string_append_printf (buffer, fmt, label, html);
+
 	g_free (mhtml);
 }
 
@@ -2615,7 +2691,12 @@ canon_header_name (gchar *name)
 }
 
 static void
-efh_format_header (EMFormat *emf, CamelStream *stream, CamelMedium *part, struct _camel_header_raw *header, guint32 flags, const gchar *charset)
+efh_format_header (EMFormat *emf,
+                   GString *buffer,
+                   CamelMedium *part,
+                   struct _camel_header_raw *header,
+                   guint32 flags,
+                   const gchar *charset)
 {
 	EMFormatHTML *efh = (EMFormatHTML *) emf;
 	gchar *name, *buf, *value = NULL;
@@ -2758,7 +2839,7 @@ efh_format_header (EMFormat *emf, CamelStream *stream, CamelMedium *part, struct
 		g_free (buf);
 	}
 
-	efh_format_text_header (efh, stream, label, txt, flags);
+	efh_format_text_header (efh, buffer, label, txt, flags);
 
 	g_free (value);
 	g_free (str_field);
@@ -2766,7 +2847,7 @@ efh_format_header (EMFormat *emf, CamelStream *stream, CamelMedium *part, struct
 
 static void
 efh_format_headers (EMFormatHTML *efh,
-                    CamelStream *stream,
+                    GString *buffer,
                     CamelMedium *part,
                     GCancellable *cancellable)
 {
@@ -2793,8 +2874,8 @@ efh_format_headers (EMFormatHTML *efh,
 	charset = camel_iconv_charset_name (charset);
 
 	if (!efh->simple_headers)
-		camel_stream_printf (
-			stream, "<font color=\"#%06x\">\n"
+		g_string_append_printf (
+			buffer, "<font color=\"#%06x\">\n"
 			"<table cellpadding=\"0\" width=\"100%%\">",
 			e_color_to_value (
 				&efh->priv->colors[
@@ -2833,15 +2914,27 @@ efh_format_headers (EMFormatHTML *efh,
 			header = header->next;
 		}
 
-		camel_stream_printf (stream, "<tr><td width=\"20\" valign=\"top\"><a href=\"##HEADERS##\"><img src=\"%s/plus.png\"></a></td><td><strong>%s</strong> %s%s%s</td></tr>",
-				evolution_imagesdir,  subject ? subject : _("(no subject)"), from->len ? "(" : "", from->str, from->len ? ")" : "");
+		g_string_append_printf (
+			buffer,
+			"<tr>"
+			"<td width=\"20\" valign=\"top\">"
+			"<a href=\"##HEADERS##\">"
+			"<img src=\"%s/plus.png\">"
+			"</a></td>"
+			"<td><strong>%s</strong> %s%s%s</td>"
+			"</tr>",
+			evolution_imagesdir,
+			subject ? subject : _("(no subject)"),
+			from->len ? "(" : "",
+			from->str,
+			from->len ? ")" : "");
 
 		g_free (subject);
 		if (addrs)
 			camel_header_address_list_clear (&addrs);
 		g_string_free (from, TRUE);
 
-		camel_stream_printf (stream, "</table>");
+		g_string_append (buffer, "</table>");
 
 		g_free (evolution_imagesdir);
 
@@ -2889,17 +2982,27 @@ efh_format_headers (EMFormatHTML *efh,
 
 	if (header_sender && header_from && mail_from_delegate) {
 		gchar *bold_sender, *bold_from;
-		camel_stream_printf(stream, "<tr><td><table border=1 width=\"100%%\" cellspacing=2 cellpadding=2><tr>");
+
+		g_string_append (
+			buffer,
+			"<tr><td><table border=1 width=\"100%%\" "
+			"cellspacing=2 cellpadding=2><tr>");
 		if (gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL)
-			camel_stream_printf (stream, "<td align=\"right\" width=\"100%%\">");
+			g_string_append (
+				buffer, "<td align=\"right\" width=\"100%%\">");
 		else
-			camel_stream_printf (stream, "<td align=\"left\" width=\"100%%\">");
+			g_string_append (
+				buffer, "<td align=\"left\" width=\"100%%\">");
 		bold_sender = g_strconcat ("<b>", header_sender, "</b>", NULL);
 		bold_from = g_strconcat ("<b>", header_from, "</b>", NULL);
-		/* To translators: This message suggests to the receipients that the sender of the mail is
-		   different from the one listed in From field. */
-		camel_stream_printf(stream, _("This message was sent by %s on behalf of %s"), bold_sender, bold_from);
-		camel_stream_printf(stream, "</td></tr></table></td></tr>");
+		/* Translators: This message suggests to the receipients
+		 * that the sender of the mail is different from the one
+		 * listed in From field. */
+		g_string_append_printf (
+			buffer,
+			_("This message was sent by %s on behalf of %s"),
+			bold_sender, bold_from);
+		g_string_append (buffer, "</td></tr></table></td></tr>");
 		g_free (bold_sender);
 		g_free (bold_from);
 	}
@@ -2909,17 +3012,39 @@ efh_format_headers (EMFormatHTML *efh,
 
 	if (gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL) {
 		if (efh->priv->headers_collapsable)
-			camel_stream_printf (stream, "<tr><td valign=\"top\" width=\"20\"><a href=\"##HEADERS##\"><img src=\"%s/minus.png\"></a></td><td><table width=\"100%%\" border=0 cellpadding=\"0\">\n",
+			g_string_append_printf (
+				buffer,
+				"<tr>"
+				"<td valign=\"top\" width=\"20\">"
+				"<a href=\"##HEADERS##\">"
+				"<img src=\"%s/minus.png\">"
+				"</a></td>"
+				"<td><table width=\"100%%\" border=0 "
+				"cellpadding=\"0\">\n",
 				evolution_imagesdir);
 		else
-			camel_stream_printf (stream, "<tr><td><table width=\"100%%\" border=0 cellpadding=\"0\">\n");
+			g_string_append (
+				buffer,
+				"<tr><td>"
+				"<table width=\"100%%\" border=0 "
+				"cellpadding=\"0\">\n");
 
 	} else {
 		if (efh->priv->headers_collapsable)
-			camel_stream_printf (stream, "<tr><td valign=\"top\" width=\"20\"><a href=\"##HEADERS##\"><img src=\"%s/minus.png\"></a></td><td><table border=0 cellpadding=\"0\">\n",
+			g_string_append_printf (
+				buffer,
+				"<tr>"
+				"<td valign=\"top\" width=\"20\">"
+				"<a href=\"##HEADERS##\">"
+				"<img src=\"%s/minus.png\">"
+				"</a></td>"
+				"<td><table border=0 cellpadding=\"0\">\n",
 				evolution_imagesdir);
 		else
- 			camel_stream_printf (stream, "<tr><td><table border=0 cellpadding=\"0\">\n");
+			g_string_append (
+				buffer,
+ 				"<tr><td>"
+				"<table border=0 cellpadding=\"0\">\n");
 	}
 
 	g_free (evolution_imagesdir);
@@ -2928,7 +3053,9 @@ efh_format_headers (EMFormatHTML *efh,
 	if (emf->mode == EM_FORMAT_MODE_ALLHEADERS) {
 		header = ((CamelMimePart *) part)->headers;
 		while (header) {
-			efh_format_header (emf, stream, part, header, EM_FORMAT_HTML_HEADER_NOCOLUMNS, charset);
+			efh_format_header (
+				emf, buffer, part, header,
+				EM_FORMAT_HTML_HEADER_NOCOLUMNS, charset);
 			header = header->next;
 		}
 	} else {
@@ -2974,7 +3101,9 @@ efh_format_headers (EMFormatHTML *efh,
 					xmailer.value = use_header->value;
 					mailer_shown = TRUE;
 
-					efh_format_header (emf, stream, part, &xmailer, h->flags, charset);
+					efh_format_header (
+						emf, buffer, part,
+						&xmailer, h->flags, charset);
 					if (strstr(use_header->value, "Evolution"))
 						have_icon = TRUE;
 				} else if (!face_decoded && face && !g_ascii_strcasecmp (header->name, "Face")) {
@@ -2990,7 +3119,9 @@ efh_format_headers (EMFormatHTML *efh,
 					face_decoded = TRUE;
 				/* Showing an encoded "Face" header makes little sense */
 				} else if (!g_ascii_strcasecmp (header->name, h->name) && !face) {
-					efh_format_header (emf, stream, part, header, h->flags, charset);
+					efh_format_header (
+						emf, buffer, part,
+						header, h->flags, charset);
 				}
 
 				header = header->next;
@@ -3001,7 +3132,7 @@ efh_format_headers (EMFormatHTML *efh,
 	}
 
 	if (!efh->simple_headers) {
-		camel_stream_printf(stream, "</table></td>");
+		g_string_append (buffer, "</table></td>");
 
 		if (photo_name) {
 			gchar *classid;
@@ -3015,10 +3146,13 @@ efh_format_headers (EMFormatHTML *efh,
 
 			if (photopart) {
 				contact_has_photo = TRUE;
-				classid = g_strdup_printf("icon:///em-format-html/%s/photo/header",
-				emf->part_id->str);
-				camel_stream_printf (stream,
-					"<td align=\"right\" valign=\"top\"><img width=64 src=\"%s\"></td>",
+				classid = g_strdup_printf (
+					"icon:///em-format-html/%s/photo/header",
+					emf->part_id->str);
+				g_string_append_printf (
+					buffer,
+					"<td align=\"right\" valign=\"top\">"
+					"<img width=64 src=\"%s\"></td>",
 					classid);
 				em_format_add_puri (emf, sizeof (EMFormatPURI), classid,
 					photopart, efh_write_image);
@@ -3034,9 +3168,17 @@ efh_format_headers (EMFormatHTML *efh,
 			CamelMimePart *part;
 
 			part = camel_mime_part_new ();
-			camel_mime_part_set_content ((CamelMimePart *) part, (const gchar *) face_header_value, face_header_len, "image/png");
-			classid = g_strdup_printf("icon:///em-format-html/face/photo/header");
-			camel_stream_printf(stream, "<td align=\"right\" valign=\"top\"><img width=48 src=\"%s\"></td>", classid);
+			camel_mime_part_set_content (
+				(CamelMimePart *) part,
+				(const gchar *) face_header_value,
+				face_header_len, "image/png");
+			classid = g_strdup_printf (
+				"icon:///em-format-html/face/photo/header");
+			g_string_append_printf (
+				buffer,
+				"<td align=\"right\" valign=\"top\">"
+				"<img width=48 src=\"%s\"></td>",
+				classid);
 			em_format_add_puri (
 				emf, sizeof (EMFormatPURI),
 				classid, part, efh_write_image);
@@ -3048,8 +3190,14 @@ efh_format_headers (EMFormatHTML *efh,
 			gchar *classid;
 			CamelMimePart *iconpart = NULL;
 
-			classid = g_strdup_printf("icon:///em-format-html/%s/icon/header", emf->part_id->str);
-			camel_stream_printf(stream, "<td align=\"right\" valign=\"top\"><img width=16 height=16 src=\"%s\"></td>", classid);
+			classid = g_strdup_printf (
+				"icon:///em-format-html/%s/icon/header",
+				emf->part_id->str);
+			g_string_append_printf (
+				buffer,
+				"<td align=\"right\" valign=\"top\">"
+				"<img width=16 height=16 src=\"%s\"></td>",
+				classid);
 
 			icon_info = gtk_icon_theme_lookup_icon (
 				gtk_icon_theme_get_default (),
@@ -3070,7 +3218,8 @@ efh_format_headers (EMFormatHTML *efh,
 			}
 			g_free (classid);
 		}
-		camel_stream_printf (stream, "</tr></table>\n</font>\n");
+
+		g_string_append (buffer, "</tr></table>\n</font>\n");
 	}
 }
 
@@ -3083,6 +3232,7 @@ efh_format_message (EMFormat *emf,
                     gboolean is_fallback)
 {
 	const EMFormatHandler *handle;
+	GString *buffer;
 
 	/* TODO: make this validity stuff a method */
 	EMFormatHTML *efh = (EMFormatHTML *) emf;
@@ -3091,23 +3241,32 @@ efh_format_message (EMFormat *emf,
 	emf->valid = NULL;
 	emf->valid_parent = NULL;
 
+	buffer = g_string_sized_new (1024);
+
 	if (emf->message != (CamelMimeMessage *) part)
-		camel_stream_printf(stream, "<blockquote>\n");
+		g_string_append (buffer, "<blockquote>\n");
 
 	if (!efh->hide_headers)
 		efh_format_headers (
-			efh, stream, CAMEL_MEDIUM (part), cancellable);
+			efh, buffer, CAMEL_MEDIUM (part), cancellable);
+
+	camel_stream_write (
+		stream, buffer->str, buffer->len, cancellable, NULL);
+
+	g_string_free (buffer, TRUE);
 
 	handle = em_format_find_handler(emf, "x-evolution/message/post-header");
 	if (handle)
 		handle->handler (
 			emf, stream, part, handle, cancellable, FALSE);
 
-	camel_stream_printf (stream, EM_FORMAT_HTML_VPAD);
+	camel_stream_write_string (
+		stream, EM_FORMAT_HTML_VPAD, cancellable, NULL);
 	em_format_part (emf, stream, part, cancellable);
 
 	if (emf->message != (CamelMimeMessage *) part)
-		camel_stream_printf(stream, "</blockquote>\n");
+		camel_stream_write_string (
+			stream, "</blockquote>\n", cancellable, NULL);
 
 	camel_cipher_validity_free (emf->valid);
 
diff --git a/plugins/audio-inline/audio-inline.c b/plugins/audio-inline/audio-inline.c
index 507bc95..07b1bd6 100644
--- a/plugins/audio-inline/audio-inline.c
+++ b/plugins/audio-inline/audio-inline.c
@@ -294,16 +294,22 @@ void
 org_gnome_audio_inline_format (gpointer ep, EMFormatHookTarget *t)
 {
 	struct _org_gnome_audio_inline_pobject *pobj;
-	gchar *classid = g_strdup_printf ("org-gnome-audio-inline-button-panel-%d", org_gnome_audio_class_id_counter);
+	gchar *classid;
+	gchar *content;
+
+	classid = g_strdup_printf (
+		"org-gnome-audio-inline-button-panel-%d",
+		org_gnome_audio_class_id_counter);
 
 	org_gnome_audio_class_id_counter++;
 
 	d(printf ("audio inline formatter: format classid %s\n", classid));
 
-	pobj = (struct _org_gnome_audio_inline_pobject *) em_format_html_add_pobject ((EMFormatHTML *) t->format, sizeof (*pobj), classid,
-										      t->part, org_gnome_audio_inline_button_panel);
-	g_object_ref (t->part);
-	pobj->part = t->part;
+	pobj = (struct _org_gnome_audio_inline_pobject *)
+		em_format_html_add_pobject (
+			(EMFormatHTML *) t->format, sizeof (*pobj), classid,
+			t->part, org_gnome_audio_inline_button_panel);
+	pobj->part = g_object_ref (t->part);
 	pobj->filename = NULL;
 	pobj->playbin = NULL;
 	pobj->play_button = NULL;
@@ -313,5 +319,7 @@ org_gnome_audio_inline_format (gpointer ep, EMFormatHookTarget *t)
 	pobj->object.free = org_gnome_audio_inline_pobject_free;
 	pobj->target_state = GST_STATE_NULL;
 
-	camel_stream_printf (t->stream, "<object classid=%s></object>\n", classid);
+	content = g_strdup_printf ("<object classid=%s></object>\n", classid);
+	camel_stream_write_string (t->stream, content, NULL, NULL);
+	g_free (content);
 }
diff --git a/plugins/image-inline/image-inline.c b/plugins/image-inline/image-inline.c
index edb527c..73a630a 100644
--- a/plugins/image-inline/image-inline.c
+++ b/plugins/image-inline/image-inline.c
@@ -448,6 +448,7 @@ org_gnome_image_inline_format (gpointer ep, EMFormatHookTarget *target)
 {
 	ImageInlinePObject *image_object;
 	gchar *classid;
+	gchar *content;
 
 	classid = g_strdup_printf (
 		"org-gnome-image-inline-display-%d",
@@ -466,8 +467,9 @@ org_gnome_image_inline_format (gpointer ep, EMFormatHookTarget *target)
 	image_object->object.free = org_gnome_image_inline_pobject_free;
 	org_gnome_image_inline_decode (image_object);
 
-	camel_stream_printf (
-		target->stream, "<object classid=%s></object>", classid);
+	content = g_strdup_printf ("<object classid=%s></object>", classid);
+	camel_stream_write_string (target->stream, content, NULL, NULL);
+	g_free (content);
 
 	g_free (classid);
 }
diff --git a/plugins/itip-formatter/itip-formatter.c b/plugins/itip-formatter/itip-formatter.c
index 0770ea2..f5b2bcd 100644
--- a/plugins/itip-formatter/itip-formatter.c
+++ b/plugins/itip-formatter/itip-formatter.c
@@ -2819,6 +2819,7 @@ format_itip (EPlugin *ep, EMFormatHookTarget *target)
 	CamelDataWrapper *content;
 	CamelStream *stream;
 	GByteArray *byte_array;
+	gchar *string;
 
 	classid = g_strdup_printf("itip:///%s", ((EMFormat *) target->format)->part_id->str);
 
@@ -2859,9 +2860,13 @@ format_itip (EPlugin *ep, EMFormatHookTarget *target)
 
 	g_object_unref (stream);
 
-	camel_stream_printf (target->stream, "<table border=0 width=\"100%%\" cellpadding=3><tr>");
-	camel_stream_printf (target->stream, "<td valign=top><object classid=\"%s\"></object></td><td width=100%% valign=top>", classid);
-	camel_stream_printf (target->stream, "</td></tr></table>");
+	string = g_strdup_printf (
+		"<table border=0 width=\"100%%\" cellpadding=3><tr>"
+		"<td valign=top><object classid=\"%s\"></object></td>"
+		"<td width=100%% valign=top></td></tr></table>",
+		classid);
+	camel_stream_write_string (target->stream, string, NULL, NULL);
+	g_free (string);
 
 	g_free (classid);
 }
diff --git a/plugins/vcard-inline/vcard-inline.c b/plugins/vcard-inline/vcard-inline.c
index 7e56da4..78818f3 100644
--- a/plugins/vcard-inline/vcard-inline.c
+++ b/plugins/vcard-inline/vcard-inline.c
@@ -313,6 +313,7 @@ org_gnome_vcard_inline_format (gpointer ep, EMFormatHookTarget *target)
 {
 	VCardInlinePObject *vcard_object;
 	gchar *classid;
+	gchar *content;
 
 	classid = g_strdup_printf (
 		"org-gnome-vcard-inline-display-%d",
@@ -332,8 +333,9 @@ org_gnome_vcard_inline_format (gpointer ep, EMFormatHookTarget *target)
 
 	e_book_client_get_sources (&vcard_object->source_list, NULL);
 
-	camel_stream_printf (
-		target->stream, "<object classid=%s></object>", classid);
+	content = g_strdup_printf ("<object classid=%s></object>", classid);
+	camel_stream_write_string (target->stream, content, NULL, NULL);
+	g_free (content);
 
 	g_free (classid);
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]