From 65ec43cb553420890c8d14b6c76ce2606674d893 Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Mon, 8 May 2000 22:27:59 +0000 Subject: Use CamelException to signal failure. (camel_stream_write_strings): * camel-stream.c (camel_stream_read, camel_stream_write, camel_stream_flush, camel_stream_reset, camel_stream_printf, camel_stream_write_to_stream): Use CamelException to signal failure. (camel_stream_write_strings): Remove. camel_stream_printf is more useful in most of the places that used this. (camel_stream_write_string): Change from macro to function to prevent problems with double-evaluation. * camel-seekable-stream.c (camel_seekable_stream_seek, camel_seekable_stream_set_bounds): Use CamelException. (reset): Update. * camel-seekable-substream.c, camel-stream-buffer.c, camel-stream-filter.c, camel-stream-fs.c, camel-stream-mem.c: Update. * camel-stream-fs.c: Remove the virtual init functions and move the code into the creator functions. Add CamelExceptions to creation functions that could fail. * camel-data-wrapper.c (camel_data_wrapper_write_to_stream): Use CamelException. * camel-mime-message.c, camel-mime-part.c, camel-multipart.c (write_to_stream): Update. * camel-mime-parser.c: add an exception to the mime parser private data and pass that to stream functions as needed. * gmime-content-field.c, md5-utils.c: Update (badly) for stream changes. * camel-exception.h (camel_exception_is_set): convenience macro. * providers/Makefile.am: disable SMTP for now * providers/mbox/camel-mbox-folder.c (mbox_append_message): Pass CamelException to the functions that now need it. Check the exception after calling camel_stream_flush, and fail if it fails. (mbox_get_message_by_uid): More updates. * providers/pop/camel-pop3-folder.c, providers/pop/camel-pop3-store.c, providers/sendmail/camel-sendmail/transport.c: Update. svn path=/trunk/; revision=2924 --- camel/camel-multipart.c | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) (limited to 'camel/camel-multipart.c') diff --git a/camel/camel-multipart.c b/camel/camel-multipart.c index c0f50eb331..347eb3bdcc 100644 --- a/camel/camel-multipart.c +++ b/camel/camel-multipart.c @@ -31,6 +31,7 @@ #include "camel-stream-mem.h" #include "camel-multipart.h" #include "camel-mime-part.h" +#include "camel-exception.h" #define d(x) @@ -50,7 +51,8 @@ static void set_boundary (CamelMultipart *multipart, gchar *boundary); static const gchar * get_boundary (CamelMultipart *multipart); static int write_to_stream (CamelDataWrapper *data_wrapper, - CamelStream *stream); + CamelStream *stream, + CamelException *ex); static void finalize (GtkObject *object); static CamelDataWrapperClass *parent_class = NULL; @@ -404,18 +406,19 @@ camel_multipart_get_boundary (CamelMultipart *multipart) /* this is MIME specific, doesn't belong here really */ static int -write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) +write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream, + CamelException *ex) { CamelMultipart *multipart = CAMEL_MULTIPART (data_wrapper); const gchar *boundary; - int total = 0, count; + int total = 0; GList *node; /* get the bundary text */ boundary = camel_multipart_get_boundary (multipart); /* we cannot write a multipart without a boundary string */ - g_return_val_if_fail (boundary, -1); + g_return_val_if_fail (boundary && *boundary, -1); /* * write the preface text (usually something like @@ -423,39 +426,40 @@ write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) * your mail client probably doesn't support ...." */ if (multipart->preface) { - count = camel_stream_write_strings (stream, multipart->preface, NULL); - if (count == -1) + total += camel_stream_write_string (stream, + multipart->preface, ex); + if (camel_exception_is_set (ex)) return -1; - total += count; } /* * Now, write all the parts, separated by the boundary * delimiter */ - if (boundary==NULL || (boundary[0] == '\0')) - g_warning ("Multipart boundary is zero length\n"); - node = multipart->parts; while (node) { - if ( (count = camel_stream_write_strings (stream, "\n--", boundary?boundary:"", "\n", NULL) ) == -1 ) + total += camel_stream_printf (stream, ex, "\n--%s\n", + boundary); + if (camel_exception_is_set (ex)) return -1; - total += count; - if ( (count = camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (node->data), stream)) == -1 ) + + total += camel_data_wrapper_write_to_stream (CAMEL_DATA_WRAPPER (node->data), stream, ex); + if (camel_exception_is_set (ex)); return -1; - total += count; node = node->next; } /* write the terminating boudary delimiter */ - if ( ( count = camel_stream_write_strings (stream, "\n--", boundary, "--\n", NULL) ) == -1 ) + total += camel_stream_printf (stream, ex, "\n--%s--\n", boundary); + if (camel_exception_is_set (ex)) return -1; - total += count; - - /* and finally the postface - it is NOT fatal if this fails */ + + /* and finally the postface */ if (multipart->postface) { - if ( ( count = camel_stream_write_strings (stream, multipart->postface, NULL) ) != -1 ) - total += count; + total += camel_stream_write_string (stream, + multipart->postface, ex); + if (camel_exception_is_set (ex)) + return -1; } return total; -- cgit v1.2.3