1
From ee21a86b6ea8b84962d878924b2daeb5e3d2087b Mon Sep 17 00:00:00 2001
2
From: Matthew Barnes <mbarnes@redhat.com>
3
Date: Wed, 19 Jan 2011 02:27:37 +0000
4
Subject: Treat empty cache files as nonexistent.
6
For some reason, cached mail message files are sometimes winding up as
7
zero-length files. Still need to figure out how this is happening, but
8
in the meantime teach Camel to disregard zero-length cache files.
10
diff --git a/camel/camel-data-cache.c b/camel/camel-data-cache.c
11
index f33b9b0..a72604c 100644
12
--- a/camel/camel-data-cache.c
13
+++ b/camel/camel-data-cache.c
14
@@ -420,8 +420,13 @@ camel_data_cache_get (CamelDataCache *cdc,
15
real = data_cache_path(cdc, FALSE, path, key);
16
stream = camel_object_bag_reserve(cdc->priv->busy_bag, real);
18
- stream = camel_stream_fs_new_with_name (
19
- real, O_RDWR, 0600, error);
22
+ /* Return NULL if the file is empty. */
23
+ if (g_stat (real, &st) == 0 && st.st_size > 0)
24
+ stream = camel_stream_fs_new_with_name (
25
+ real, O_RDWR, 0600, error);
28
camel_object_bag_add(cdc->priv->busy_bag, real, stream);
30
diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c
31
index bde4026..179252d 100644
32
--- a/camel/providers/imapx/camel-imapx-server.c
33
+++ b/camel/providers/imapx/camel-imapx-server.c
34
@@ -5014,19 +5014,11 @@ imapx_server_get_message (CamelIMAPXServer *is, CamelFolder *folder, CamelOperat
35
CamelStream *stream = NULL, *tmp_stream;
36
CamelIMAPXFolder *ifolder = (CamelIMAPXFolder *) folder;
38
- gchar *cache_file = NULL;
44
- cache_file = camel_data_cache_get_filename (ifolder->cache, "cur", uid, NULL);
45
- if (g_file_test (cache_file, G_FILE_TEST_EXISTS)) {
46
- g_free (cache_file);
49
- g_free (cache_file);
53
if ((job = imapx_is_job_in_queue (is, folder, IMAPX_JOB_GET_MESSAGE, uid))) {
54
@@ -5039,11 +5031,11 @@ imapx_server_get_message (CamelIMAPXServer *is, CamelFolder *folder, CamelOperat
58
- stream = camel_data_cache_get (ifolder->cache, "cur", uid, NULL);
61
- error, CAMEL_IMAPX_ERROR, 1,
62
- "Could not retrieve the message");
63
+ stream = camel_data_cache_get (
64
+ ifolder->cache, "cur", uid, error);
67
+ error, "Could not retrieve the message: ");
71
@@ -5116,12 +5108,17 @@ camel_imapx_server_sync_message (CamelIMAPXServer *is, CamelFolder *folder, cons
72
gchar *cache_file = NULL;
73
CamelIMAPXFolder *ifolder = (CamelIMAPXFolder *) folder;
78
+ /* Check if the cache file already exists and is non-empty. */
79
+ cache_file = camel_data_cache_get_filename (
80
+ ifolder->cache, "cur", uid, NULL);
81
+ is_cached = (g_stat (cache_file, &st) == 0 && st.st_size > 0);
82
+ g_free (cache_file);
84
- cache_file = camel_data_cache_get_filename (ifolder->cache, "cur", uid, NULL);
85
- if (g_file_test (cache_file, G_FILE_TEST_EXISTS)) {
86
- g_free (cache_file);
91
stream = imapx_server_get_message (is, folder, NULL, uid, IMAPX_PRIORITY_SYNC_MESSAGE, error);
93
@@ -5172,13 +5169,9 @@ camel_imapx_server_append_message(CamelIMAPXServer *is, CamelFolder *folder, Cam
95
/* chen cleanup this later */
96
uid = imapx_get_temp_uid ();
97
- stream = camel_data_cache_add (ifolder->cache, "new", uid, NULL);
98
+ stream = camel_data_cache_add (ifolder->cache, "new", uid, error);
102
- g_io_error_from_errno (errno),
103
- _("Cannot create spool file: %s"),
104
- g_strerror (errno));
105
+ g_prefix_error (error, _("Cannot create spool file: "));