balsa r8058 - in trunk: . libbalsa src



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]