diff options
author | James Booth <boothj5@gmail.com> | 2016-07-25 23:28:04 +0100 |
---|---|---|
committer | James Booth <boothj5@gmail.com> | 2016-07-25 23:28:04 +0100 |
commit | 8602ede65e2a4ef0edfa3a0b4b9c67c4158f15bb (patch) | |
tree | e51a5391b0b00df1fbe3a173724d61d1042107fa | |
parent | 6777919d96d77c5c1b08ad5ddd48ed2e4b15c87c (diff) | |
download | profani-tty-8602ede65e2a4ef0edfa3a0b4b9c67c4158f15bb.tar.gz |
Tidy rosterwin memory handling
-rw-r--r-- | src/ui/rosterwin.c | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/src/ui/rosterwin.c b/src/ui/rosterwin.c index 690677cd..933d1a72 100644 --- a/src/ui/rosterwin.c +++ b/src/ui/rosterwin.c @@ -102,6 +102,7 @@ rosterwin_roster(void) } else { GList *rooms = muc_rooms(); _rosterwin_rooms(layout, "Rooms", rooms); + g_list_free(rooms); } prefs_free_string(roomsbypref); @@ -162,6 +163,7 @@ rosterwin_roster(void) } else { GList *rooms = muc_rooms(); _rosterwin_rooms(layout, "Rooms", rooms); + g_list_free(rooms); } prefs_free_string(roomsbypref); @@ -660,7 +662,6 @@ _rosterwin_rooms(ProfLayoutSplit *layout, char *title, GList *rooms) } curr_room = g_list_next(curr_room); } - g_list_free(rooms); // if there are active rooms, or if we want to show empty groups if (rooms_sorted || prefs_get_boolean(PREF_ROSTER_EMPTY)) { @@ -679,15 +680,19 @@ _rosterwin_rooms(ProfLayoutSplit *layout, char *title, GList *rooms) static void _rosterwin_rooms_by_service(ProfLayoutSplit *layout) { - GList *curr_room = muc_rooms(); + GList *rooms = muc_rooms(); + GList *curr = rooms; GList *services = NULL; - while (curr_room) { - char *roomjid = curr_room->data; + while (curr) { + char *roomjid = curr->data; Jid *jidp = jid_create(roomjid); + if (!g_list_find_custom(services, jidp->domainpart, (GCompareFunc)g_strcmp0)) { services = g_list_insert_sorted(services, strdup(jidp->domainpart), (GCompareFunc)g_strcmp0); } - curr_room = g_list_next(curr_room); + + jid_destroy(jidp); + curr = g_list_next(curr); } GList *curr_service = services; @@ -695,22 +700,27 @@ _rosterwin_rooms_by_service(ProfLayoutSplit *layout) char *service = curr_service->data; GList *filtered_rooms = NULL; - curr_room = muc_rooms(); - while (curr_room) { - char *roomjid = curr_room->data; + curr = rooms; + while (curr) { + char *roomjid = curr->data; Jid *jidp = jid_create(roomjid); if (g_strcmp0(curr_service->data, jidp->domainpart) == 0) { - filtered_rooms = g_list_append(filtered_rooms, jidp->barejid); + filtered_rooms = g_list_append(filtered_rooms, strdup(jidp->barejid)); } - curr_room = g_list_next(curr_room); + jid_destroy(jidp); + curr = g_list_next(curr); } _rosterwin_rooms(layout, service, filtered_rooms); + g_list_free_full(filtered_rooms, free); curr_service = g_list_next(curr_service); } + + g_list_free(rooms); + g_list_free_full(services, free); } static void |