0.9.3claws68
[claws.git] / src / procmsg.c
index 075318e530a50d08bce16d2fad8163c430c41e3c..19cd8878329f2cd47b9584dca98504ca51e9a851 100644 (file)
@@ -382,27 +382,32 @@ gchar *procmsg_get_message_file(MsgInfo *msginfo)
        return filename;
 }
 
-GSList *procmsg_get_message_file_list(MsgInfoList *mlist)
+GSList *procmsg_get_message_file_list(GSList *mlist)
 {
-       GSList *file_list = NULL;
-       MsgInfo *msginfo;
-       gchar *file;
-
-       while (mlist != NULL) {
-               msginfo = (MsgInfo *)mlist->data;
-               file = procmsg_get_message_file(msginfo);
-               if (!file) {
-                       slist_free_strings(file_list);
-                       g_slist_free(file_list);
-                       return NULL;
-               }
-               file_list = g_slist_prepend(file_list, file);
-               mlist = mlist->next;
-       }
-
-       file_list = g_slist_reverse(file_list);
-
-       return file_list;
+        GSList *file_list = NULL;
+        MsgInfo *msginfo;
+        MsgFileInfo *fileinfo;
+        gchar *file;
+
+        while (mlist != NULL) {
+                msginfo = (MsgInfo *)mlist->data;
+                file = procmsg_get_message_file(msginfo);
+                if (!file) {
+                        procmsg_message_file_list_free(file_list);
+                        return NULL;
+                }
+                fileinfo = g_new(MsgFileInfo, 1);
+               fileinfo->msginfo = procmsg_msginfo_new_ref(msginfo);
+                fileinfo->file = file;
+                fileinfo->flags = g_new(MsgFlags, 1);
+                *fileinfo->flags = msginfo->flags;
+                file_list = g_slist_prepend(file_list, fileinfo);
+                mlist = mlist->next;
+        }
+
+        file_list = g_slist_reverse(file_list);
+
+        return file_list;
 }
 
 void procmsg_message_file_list_free(MsgInfoList *file_list)
@@ -412,6 +417,7 @@ void procmsg_message_file_list_free(MsgInfoList *file_list)
 
        for (cur = file_list; cur != NULL; cur = cur->next) {
                fileinfo = (MsgFileInfo *)cur->data;
+               procmsg_msginfo_free(fileinfo->msginfo);
                g_free(fileinfo->file);
                g_free(fileinfo->flags);
                g_free(fileinfo);