fix wrong test
[claws.git] / src / msgcache.c
index 6273f54cce56681902638a7797992f86e0f2f9e5..f9fb46671c44ea44ebce3231cc657d877671cca3 100644 (file)
@@ -84,7 +84,7 @@ void msgcache_add_msg(MsgCache *cache, MsgInfo *msginfo)
        cache->memusage += procmsg_msginfo_memusage(msginfo);
        cache->last_access = time(NULL);
 
-       debug_print("Cache size: %d messages, %d byte\n", g_hash_table_size(cache->msgnum_table), cache->memusage);
+       debug_print("Cache size: %d messages, %d bytes\n", g_hash_table_size(cache->msgnum_table), cache->memusage);
 }
 
 void msgcache_remove_msg(MsgCache *cache, guint msgnum)
@@ -116,11 +116,13 @@ void msgcache_update_msg(MsgCache *cache, MsgInfo *msginfo)
        g_return_if_fail(msginfo != NULL);
 
        oldmsginfo = g_hash_table_lookup(cache->msgnum_table, &msginfo->msgnum);
-       if(msginfo) {
+       if(oldmsginfo && oldmsginfo->msgid) {
                g_hash_table_remove(cache->msgid_table, oldmsginfo->msgid);
                g_hash_table_remove(cache->msgnum_table, &oldmsginfo->msgnum);
+       } 
+       if (oldmsginfo)
                procmsg_msginfo_free(oldmsginfo);
-       }
+
        cache->memusage -= procmsg_msginfo_memusage(oldmsginfo);
 
        newmsginfo = procmsg_msginfo_new_ref(msginfo);
@@ -215,20 +217,28 @@ gint msgcache_get_memory_usage(MsgCache *cache)
 
 #define READ_CACHE_DATA_INT(n, fp) \
 { \
-       if (fread(&n, sizeof(n), 1, fp) != 1) { \
+       guint32 idata; \
+ \
+       if (fread(&idata, sizeof(idata), 1, fp) != 1) { \
                g_warning("Cache data is corrupted\n"); \
                procmsg_msginfo_free(msginfo); \
                error = TRUE; \
                break; \
-       } \
+       } else \
+               n = idata;\
 }
 
-#define WRITE_CACHE_DATA_INT(n, fp) \
-       fwrite(&n, sizeof(n), 1, fp)
+#define WRITE_CACHE_DATA_INT(n, fp)            \
+{                                              \
+       guint32 idata;                          \
+                                               \
+       idata = (guint32)n;                     \
+       fwrite(&idata, sizeof(idata), 1, fp);   \
+}
 
 #define WRITE_CACHE_DATA(data, fp) \
 { \
-       gint len; \
+       size_t len; \
        if (data == NULL) \
                len = 0; \
        else \
@@ -297,10 +307,10 @@ static gint msgcache_read_cache_data_str(FILE *fp, gchar **str)
 {
        gchar buf[BUFFSIZE];
        gint ret = 0;
-       size_t len;
+       guint32 len;
 
        if (fread(&len, sizeof(len), 1, fp) == 1) {
-               if (len < 0)
+               if (len > G_MAXINT)
                        ret = -1;
                else {
                        gchar *tmp = NULL;
@@ -384,6 +394,7 @@ MsgCache *msgcache_read_cache(FolderItem *item, const gchar *cache_file)
                READ_CACHE_DATA(msginfo->inreplyto, fp);
                READ_CACHE_DATA(msginfo->references, fp);
                READ_CACHE_DATA(msginfo->xref, fp);
+               READ_CACHE_DATA_INT(msginfo->planned_download, fp);
 
                msginfo->folder = item;
                msginfo->flags.tmp_flags |= tmp_flags;
@@ -394,15 +405,14 @@ MsgCache *msgcache_read_cache(FolderItem *item, const gchar *cache_file)
                cache->memusage += procmsg_msginfo_memusage(msginfo);
        }
        fclose(fp);
+       g_hash_table_thaw(cache->msgnum_table);
 
        if(error) {
-               g_hash_table_thaw(cache->msgnum_table);
                msgcache_destroy(cache);
                return NULL;
        }
 
        cache->last_access = time(NULL);
-       g_hash_table_thaw(cache->msgnum_table);
 
        debug_print("done. (%d items read)\n", g_hash_table_size(cache->msgnum_table));
        debug_print("Cache size: %d messages, %d byte\n", g_hash_table_size(cache->msgnum_table), cache->memusage);
@@ -455,6 +465,7 @@ void msgcache_write_cache(MsgInfo *msginfo, FILE *fp)
        WRITE_CACHE_DATA(msginfo->inreplyto, fp);
        WRITE_CACHE_DATA(msginfo->references, fp);
        WRITE_CACHE_DATA(msginfo->xref, fp);
+       WRITE_CACHE_DATA_INT(msginfo->planned_download, fp);
 }
 
 static void msgcache_write_flags(MsgInfo *msginfo, FILE *fp)