From 05cc233af13c41610e0f9460702c6d0a955b29f4 Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Thu, 13 Sep 2001 21:35:52 +0000 Subject: Pass an exception to the cache. (imap_append_online): Same. 2001-09-13 Jeffrey Stedfast * providers/imap/camel-imap-folder.c (imap_append_offline): Pass an exception to the cache. (imap_append_online): Same. (imap_append_resyncing): Here too. (imap_copy_offline): And here. (handle_copyuid): Pass NULL as the exception here... (parse_fetch_response): And finally here. * providers/imap/camel-imap-message-cache.c (camel_imap_message_cache_insert): (insert_setup): (camel_imap_message_cache_insert_stream): (camel_imap_message_cache_insert_wrapper): (camel_imap_message_cache_copy): Take an exception argument and set it on error. svn path=/trunk/; revision=12813 --- camel/providers/imap/camel-imap-message-cache.c | 62 ++++++++++++++++--------- 1 file changed, 40 insertions(+), 22 deletions(-) (limited to 'camel/providers/imap/camel-imap-message-cache.c') diff --git a/camel/providers/imap/camel-imap-message-cache.c b/camel/providers/imap/camel-imap-message-cache.c index d4f569423c..47e40a2ad1 100644 --- a/camel/providers/imap/camel-imap-message-cache.c +++ b/camel/providers/imap/camel-imap-message-cache.c @@ -225,24 +225,27 @@ stream_finalize (CamelObject *stream, gpointer event_data, gpointer user_data) static CamelStream * -insert_setup (CamelImapMessageCache *cache, const char *uid, - const char *part_spec, char **path, char **key) +insert_setup (CamelImapMessageCache *cache, const char *uid, const char *part_spec, + char **path, char **key, CamelException *ex) { CamelStream *stream; int fd; - + *path = g_strdup_printf ("%s/%s.%s", cache->path, uid, part_spec); *key = strrchr (*path, '/') + 1; stream = g_hash_table_lookup (cache->parts, *key); if (stream) camel_object_unref (CAMEL_OBJECT (stream)); - + fd = open (*path, O_RDWR | O_CREAT | O_TRUNC, 0600); if (fd == -1) { + camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, + _("Failed to cache message %s: %s"), + uid, g_strerror (errno)); g_free (*path); return NULL; } - + return camel_stream_fs_new_with_fd (fd); } @@ -256,8 +259,8 @@ insert_abort (char *path, CamelStream *stream) } static CamelStream * -insert_finish (CamelImapMessageCache *cache, const char *uid, - char *path, char *key, CamelStream *stream) +insert_finish (CamelImapMessageCache *cache, const char *uid, char *path, + char *key, CamelStream *stream) { camel_stream_reset (stream); cache_put (cache, uid, key, stream); @@ -282,16 +285,22 @@ insert_finish (CamelImapMessageCache *cache, const char *uid, CamelStream * camel_imap_message_cache_insert (CamelImapMessageCache *cache, const char *uid, const char *part_spec, const char *data, - int len) + int len, CamelException *ex) { char *path, *key; CamelStream *stream; - - stream = insert_setup (cache, uid, part_spec, &path, &key); + + stream = insert_setup (cache, uid, part_spec, &path, &key, ex); if (!stream) return NULL; - if (camel_stream_write (stream, data, len) == -1) + + if (camel_stream_write (stream, data, len) == -1) { + camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, + _("Failed to cache message %s: %s"), + uid, g_strerror (errno)); return insert_abort (path, stream); + } + return insert_finish (cache, uid, path, key, stream); } @@ -307,17 +316,21 @@ camel_imap_message_cache_insert (CamelImapMessageCache *cache, const char *uid, void camel_imap_message_cache_insert_stream (CamelImapMessageCache *cache, const char *uid, const char *part_spec, - CamelStream *data_stream) + CamelStream *data_stream, CamelException *ex) { char *path, *key; CamelStream *stream; - - stream = insert_setup (cache, uid, part_spec, &path, &key); + + stream = insert_setup (cache, uid, part_spec, &path, &key, ex); if (!stream) return; - if (camel_stream_write_to_stream (data_stream, stream) == -1) + + if (camel_stream_write_to_stream (data_stream, stream) == -1) { + camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, + _("Failed to cache message %s: %s"), + uid, g_strerror (errno)); insert_abort (path, stream); - else { + } else { insert_finish (cache, uid, path, key, stream); camel_object_unref (CAMEL_OBJECT (stream)); } @@ -335,17 +348,21 @@ camel_imap_message_cache_insert_stream (CamelImapMessageCache *cache, void camel_imap_message_cache_insert_wrapper (CamelImapMessageCache *cache, const char *uid, const char *part_spec, - CamelDataWrapper *wrapper) + CamelDataWrapper *wrapper, CamelException *ex) { char *path, *key; CamelStream *stream; - stream = insert_setup (cache, uid, part_spec, &path, &key); + stream = insert_setup (cache, uid, part_spec, &path, &key, ex); if (!stream) return; - if (camel_data_wrapper_write_to_stream (wrapper, stream) == -1) + + if (camel_data_wrapper_write_to_stream (wrapper, stream) == -1) { + camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, + _("Failed to cache message %s: %s"), + uid, g_strerror (errno)); insert_abort (path, stream); - else { + } else { insert_finish (cache, uid, path, key, stream); camel_object_unref (CAMEL_OBJECT (stream)); } @@ -463,7 +480,8 @@ void camel_imap_message_cache_copy (CamelImapMessageCache *source, const char *source_uid, CamelImapMessageCache *dest, - const char *dest_uid) + const char *dest_uid, + CamelException *ex) { GPtrArray *subparts; CamelStream *stream; @@ -479,7 +497,7 @@ camel_imap_message_cache_copy (CamelImapMessageCache *source, if (!part++) continue; stream = camel_imap_message_cache_get (source, source_uid, part); - camel_imap_message_cache_insert_stream (dest, dest_uid, part, stream); + camel_imap_message_cache_insert_stream (dest, dest_uid, part, stream, ex); camel_object_unref (CAMEL_OBJECT (stream)); } } -- cgit v1.2.3