aboutsummaryrefslogtreecommitdiffstats
path: root/camel/providers/imap/camel-imap-summary.c
diff options
context:
space:
mode:
Diffstat (limited to 'camel/providers/imap/camel-imap-summary.c')
-rw-r--r--camel/providers/imap/camel-imap-summary.c28
1 files changed, 20 insertions, 8 deletions
diff --git a/camel/providers/imap/camel-imap-summary.c b/camel/providers/imap/camel-imap-summary.c
index dba1134fa1..bebc672866 100644
--- a/camel/providers/imap/camel-imap-summary.c
+++ b/camel/providers/imap/camel-imap-summary.c
@@ -35,7 +35,7 @@
#include "camel-imap-summary.h"
#include "camel-file-utils.h"
-#define CAMEL_IMAP_SUMMARY_VERSION (0x300)
+#define CAMEL_IMAP_SUMMARY_VERSION (1)
static int summary_header_load (CamelFolderSummary *, FILE *);
static int summary_header_save (CamelFolderSummary *, FILE *);
@@ -94,9 +94,6 @@ camel_imap_summary_init (CamelImapSummary *obj)
/* subclasses need to set the right instance data sizes */
s->message_info_size = sizeof(CamelImapMessageInfo);
s->content_info_size = sizeof(CamelImapMessageContentInfo);
-
- /* and a unique file version */
- s->version += CAMEL_IMAP_SUMMARY_VERSION;
}
/**
@@ -125,7 +122,6 @@ camel_imap_summary_new (const char *filename)
return summary;
}
-
static int
summary_header_load (CamelFolderSummary *s, FILE *in)
{
@@ -134,7 +130,22 @@ summary_header_load (CamelFolderSummary *s, FILE *in)
if (camel_imap_summary_parent->summary_header_load (s, in) == -1)
return -1;
- return camel_file_util_decode_uint32 (in, &ims->validity);
+ /* Legacy version */
+ if (s->version == 0x30c)
+ return camel_file_util_decode_uint32(in, &ims->validity);
+
+ /* Version 1 */
+ if (camel_file_util_decode_fixed_int32(in, &ims->version) == -1
+ || camel_file_util_decode_fixed_int32(in, &ims->validity) == -1)
+ return -1;
+
+ if (ims->version > CAMEL_IMAP_SUMMARY_VERSION) {
+ g_warning("Unkown summary version\n");
+ errno = EINVAL;
+ return -1;
+ }
+
+ return 0;
}
static int
@@ -145,9 +156,10 @@ summary_header_save (CamelFolderSummary *s, FILE *out)
if (camel_imap_summary_parent->summary_header_save (s, out) == -1)
return -1;
- return camel_file_util_encode_uint32 (out, ims->validity);
-}
+ camel_file_util_encode_fixed_int32(out, CAMEL_IMAP_SUMMARY_VERSION);
+ return camel_file_util_encode_fixed_int32(out, ims->validity);
+}
static CamelMessageInfo *
message_info_load (CamelFolderSummary *s, FILE *in)