Correct a bug
authorNicolas Cornu <nicolas.cornu@ensi-bourges.fr>
Mon, 16 Aug 2010 19:31:50 +0200
changeset 134 8c98308c139d
parent 133 361d8577ebd1
child 135 06b7c6f1c05c
Correct a bug
jingle-filetransfer/filetransfer.c
--- a/jingle-filetransfer/filetransfer.c	Mon Aug 16 18:33:33 2010 +0200
+++ b/jingle-filetransfer/filetransfer.c	Mon Aug 16 19:31:50 2010 +0200
@@ -60,7 +60,7 @@
 // Return must be free
 static gchar *_convert_size(guint64 size);
 static int _next_index(void);
-static void _free(gconstpointer data);
+static void _free(JingleFT *jft);
 
 const gchar *deps[] = { "jingle", NULL };
 
@@ -401,21 +401,26 @@
       g_free(strsize);
     }
   } else if (!g_strcmp0(args[0], "flush")) {
-    GSList *el, *el2 = NULL;
+    GSList *el, *el2 = info_list;
     int count = 0;
-    for (el = info_list; el; el = el -> next) {
-      JingleFTInfo *jftio = el->data;
-      if (jftio->jft->state == JINGLE_FT_ERROR ||
-          jftio->jft->state == JINGLE_FT_REJECT ||
-          jftio->jft->state == JINGLE_FT_ENDING) {
-        g_slist_free_1(el2);
+    el = info_list;
+    while (el) {
+      JingleFTInfo *jftinf;
+      jftinf = el->data;
+      if (jftinf->jft->state == JINGLE_FT_ERROR ||
+          jftinf->jft->state == JINGLE_FT_REJECT ||
+          jftinf->jft->state == JINGLE_FT_ENDING) {
         count++;
-        _free(jftio->jft);
-        info_list = g_slist_remove(info_list, jftio);
-        el2 = el;
+        _free(jftinf->jft);
+        info_list = g_slist_delete_link(info_list, el);
+        if (info_list == NULL)
+          break;
+        el = el2;
+        continue;
       }
+      el2 = el;
+      el = el->next;
     }
-    g_slist_free_1(el2);
     scr_LogPrint(LPRINT_LOGNORM, "JFT: %i files removed", count);
   } else {
     scr_LogPrint(LPRINT_LOGNORM, "/jft: %s is not a correct option.", args[1]);
@@ -424,9 +429,8 @@
   free_arg_lst(args);
 }
 
-static void _free(gconstpointer data)
+static void _free(JingleFT *jft)
 {
-  JingleFT *jft = (JingleFT *)data;
   g_free(jft->hash);
   g_free(jft->name);
   g_free(jft->desc);