balsa r8058 - in trunk: . libbalsa src
- From: PeterB svn gnome org
- To: svn-commits-list gnome org
- Subject: balsa r8058 - in trunk: . libbalsa src
- Date: Wed, 21 Jan 2009 21:11:39 +0000 (UTC)
Author: PeterB
Date: Wed Jan 21 21:11:38 2009
New Revision: 8058
URL: http://svn.gnome.org/viewvc/balsa?rev=8058&view=rev
Log:
improve error handling
Modified:
trunk/ChangeLog
trunk/libbalsa/body.c
trunk/libbalsa/files.c
trunk/src/balsa-mime-widget-callbacks.c
Modified: trunk/libbalsa/body.c
==============================================================================
--- trunk/libbalsa/body.c (original)
+++ trunk/libbalsa/body.c Wed Jan 21 21:11:38 2009
@@ -427,8 +427,9 @@
return stream;
}
-GMimeStream *
-libbalsa_message_body_get_stream(LibBalsaMessageBody * body, GError **err)
+static GMimeStream *
+libbalsa_message_body_get_part_stream(LibBalsaMessageBody * body,
+ GError ** err)
{
GMimeStream *stream;
GMimeDataWrapper *wrapper;
@@ -437,57 +438,15 @@
gchar *mime_type = NULL;
const gchar *charset;
- g_return_val_if_fail(body != NULL, NULL);
- g_return_val_if_fail(body->message != NULL, NULL);
-
- if (!body->message->mailbox) {
+ wrapper = g_mime_part_get_content_object(GMIME_PART(body->mime_part));
+ if (!wrapper) {
+ /* part is incomplete. */
g_set_error(err, LIBBALSA_MAILBOX_ERROR,
LIBBALSA_MAILBOX_ACCESS_ERROR,
"Internal error in get_stream");
return NULL;
}
- if (!libbalsa_mailbox_get_message_part(body->message, body, err)) {
- if (!*err)
- g_set_error(err, LIBBALSA_MAILBOX_ERROR,
- LIBBALSA_MAILBOX_ACCESS_ERROR,
- "Cannot get stream for part of type %s",
- g_type_name(G_TYPE_FROM_INSTANCE
- (body->mime_part)));
- return NULL;
- }
-
- /* We handle "real" parts and embedded rfc822 messages
- differently. There is probably a way to unify if we use
- GMimeObject common denominator. */
- if (GMIME_IS_MESSAGE_PART(body->mime_part)) {
- ssize_t bytes_written;
- GMimeMessage *msg = g_mime_message_part_get_message
- (GMIME_MESSAGE_PART(body->mime_part));
- stream = g_mime_stream_mem_new();
- libbalsa_mailbox_lock_store(body->message->mailbox);
- bytes_written =
- g_mime_object_write_to_stream(GMIME_OBJECT(msg), stream);
- libbalsa_mailbox_unlock_store(body->message->mailbox);
- printf("Written %ld bytes of embedded message\n",
- (long) bytes_written);
- if (bytes_written < 0) {
- g_object_unref(stream);
- g_set_error(err, LIBBALSA_MAILBOX_ERROR,
- LIBBALSA_MAILBOX_ACCESS_ERROR,
- _("Could not read embedded message"));
- return NULL;
- }
- g_mime_stream_reset(stream);
- return stream;
- }
-
- if (!GMIME_IS_PART(body->mime_part))
- return NULL;
-
- wrapper = g_mime_part_get_content_object(GMIME_PART(body->mime_part));
- if (!wrapper) /* part is incomplete. */
- return NULL;
stream = g_mime_data_wrapper_get_stream(wrapper);
encoding = g_mime_data_wrapper_get_encoding(wrapper);
g_object_unref(wrapper);
@@ -550,6 +509,69 @@
return stream;
}
+static GMimeStream *
+libbalsa_message_body_get_message_part_stream(LibBalsaMessageBody * body,
+ GError ** err)
+{
+ GMimeStream *stream;
+ ssize_t bytes_written;
+ GMimeMessage *msg = g_mime_message_part_get_message
+ (GMIME_MESSAGE_PART(body->mime_part));
+
+ stream = g_mime_stream_mem_new();
+ libbalsa_mailbox_lock_store(body->message->mailbox);
+ bytes_written =
+ g_mime_object_write_to_stream(GMIME_OBJECT(msg), stream);
+ libbalsa_mailbox_unlock_store(body->message->mailbox);
+ printf("Written %ld bytes of embedded message\n",
+ (long) bytes_written);
+
+ if (bytes_written < 0) {
+ g_object_unref(stream);
+ g_set_error(err, LIBBALSA_MAILBOX_ERROR,
+ LIBBALSA_MAILBOX_ACCESS_ERROR,
+ _("Could not read embedded message"));
+ return NULL;
+ }
+
+ g_mime_stream_reset(stream);
+ return stream;
+}
+
+GMimeStream *
+libbalsa_message_body_get_stream(LibBalsaMessageBody * body, GError **err)
+{
+ g_return_val_if_fail(body != NULL, NULL);
+ g_return_val_if_fail(body->message != NULL, NULL);
+
+ if (!body->message->mailbox) {
+ g_set_error(err, LIBBALSA_MAILBOX_ERROR,
+ LIBBALSA_MAILBOX_ACCESS_ERROR,
+ "Internal error in get_stream");
+ return NULL;
+ }
+
+ if (!libbalsa_mailbox_get_message_part(body->message, body, err)
+ || !(GMIME_IS_PART(body->mime_part)
+ || GMIME_IS_MESSAGE_PART(body->mime_part))) {
+ if (err && !*err)
+ g_set_error(err, LIBBALSA_MAILBOX_ERROR,
+ LIBBALSA_MAILBOX_ACCESS_ERROR,
+ "Cannot get stream for part of type %s",
+ g_type_name(G_TYPE_FROM_INSTANCE
+ (body->mime_part)));
+ return NULL;
+ }
+
+ /* We handle "real" parts and embedded rfc822 messages
+ differently. There is probably a way to unify if we use
+ GMimeObject common denominator. */
+ if (GMIME_IS_MESSAGE_PART(body->mime_part))
+ return libbalsa_message_body_get_message_part_stream(body, err);
+
+ return libbalsa_message_body_get_part_stream(body, err);
+}
+
gssize
libbalsa_message_body_get_content(LibBalsaMessageBody * body, gchar ** buf,
GError **err)
@@ -584,8 +606,12 @@
/* NULL-terminate, in case it is used as a string. */
g_byte_array_append(array, &zero, 1);
*buf = (gchar *) g_byte_array_free(array, FALSE);
- } else
+ } else {
g_byte_array_free(array, TRUE);
+ g_set_error(err, LIBBALSA_MAILBOX_ERROR,
+ LIBBALSA_MAILBOX_ACCESS_ERROR,
+ "Write error in get_content");
+ }
return len;
}
@@ -639,6 +665,7 @@
stream = libbalsa_message_body_get_stream(body, err);
if (!body->mime_part)
return FALSE;
+ g_clear_error(err);
libbalsa_mailbox_lock_store(body->message->mailbox);
@@ -662,6 +689,10 @@
libbalsa_mailbox_unlock_store(body->message->mailbox);
g_object_unref(dest);
+ if (len < 0)
+ g_set_error(err, LIBBALSA_MAILBOX_ERROR, LIBBALSA_MAILBOX_ACCESS_ERROR,
+ "Write error in save_stream");
+
return len >= 0;
}
Modified: trunk/libbalsa/files.c
==============================================================================
--- trunk/libbalsa/files.c (original)
+++ trunk/libbalsa/files.c Wed Jan 21 21:11:38 2009
@@ -113,15 +113,12 @@
{
char *icon;
GdkPixbuf *tmp, *retval;
- GError * error = NULL;
icon = balsa_pixmap_finder ("attachment.png");
- tmp = gdk_pixbuf_new_from_file(icon, &error);
+ tmp = gdk_pixbuf_new_from_file(icon, NULL);
g_free(icon);
- if (!tmp) {
- g_error_free(error);
+ if (!tmp)
return NULL;
- }
retval = gdk_pixbuf_scale_simple(tmp, size, size, GDK_INTERP_BILINEAR);
g_object_unref(tmp);
@@ -249,17 +246,14 @@
if (icon == NULL)
pixbuf = libbalsa_default_attachment_pixbuf(width);
else {
- GError *error = NULL;
GdkPixbuf *tmp_pb;
- if ((tmp_pb = gdk_pixbuf_new_from_file(icon, &error))) {
+ if ((tmp_pb = gdk_pixbuf_new_from_file(icon, NULL))) {
pixbuf = gdk_pixbuf_scale_simple(tmp_pb, width, width,
GDK_INTERP_BILINEAR);
g_object_unref(tmp_pb);
- } else {
+ } else
pixbuf = libbalsa_default_attachment_pixbuf(width);
- g_error_free(error);
- }
g_free(icon);
}
Modified: trunk/src/balsa-mime-widget-callbacks.c
==============================================================================
--- trunk/src/balsa-mime-widget-callbacks.c (original)
+++ trunk/src/balsa-mime-widget-callbacks.c Wed Jan 21 21:11:38 2009
@@ -147,10 +147,12 @@
LIBBALSA_MESSAGE_BODY_UNSAFE,
mime_body->body_type ==
LIBBALSA_MESSAGE_BODY_TYPE_TEXT,
- &err))
+ &err)) {
balsa_information(LIBBALSA_INFORMATION_ERROR,
_("Could not save %s: %s"),
file_uri, err ? err->message : "Unknown error");
+ g_clear_error(&err);
+ }
}
g_object_unref(save_file);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]