# HG changeset patch # User Nicolas Cornu # Date 1281979910 -7200 # Node ID 8c98308c139dcdc143e553043120a37ffd44fb4c # Parent 361d8577ebd14d75456c6e9fef689aedf89aaa56 Correct a bug diff -r 361d8577ebd1 -r 8c98308c139d 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);