Mercurial > hg
comparison mcabber/src/roster.c @ 246:57f9005b8844
[/trunk] Changeset 259 by mikael
* Fix a bug (segfault on buddy deletion) introduced when I added unread_list
author | mikael |
---|---|
date | Tue, 14 Jun 2005 19:37:11 +0000 |
parents | 72fd1273f2b7 |
children | 49e9e02dd6d0 |
comparison
equal
deleted
inserted
replaced
245:7ca7ca850270 | 246:57f9005b8844 |
---|---|
165 void roster_del_user(const char *jid) | 165 void roster_del_user(const char *jid) |
166 { | 166 { |
167 GSList *sl_user, *sl_group; | 167 GSList *sl_user, *sl_group; |
168 GSList **sl_group_listptr; | 168 GSList **sl_group_listptr; |
169 roster *roster_usr; | 169 roster *roster_usr; |
170 GSList *node; | |
170 | 171 |
171 sl_user = roster_find(jid, jidsearch, ROSTER_TYPE_USER|ROSTER_TYPE_AGENT); | 172 sl_user = roster_find(jid, jidsearch, ROSTER_TYPE_USER|ROSTER_TYPE_AGENT); |
172 if (sl_user == NULL) | 173 if (sl_user == NULL) |
173 return; | 174 return; |
174 // Let's free memory (jid, name) | |
175 roster_usr = (roster*)sl_user->data; | 175 roster_usr = (roster*)sl_user->data; |
176 | |
177 // Remove (if present) from unread messages list | |
178 node = g_slist_find(unread_list, roster_usr); | |
179 if (node) unread_list = g_slist_delete_link(unread_list, node); | |
180 | |
181 // Let's free memory (jid, name, status message) | |
176 if (roster_usr->jid) g_free((gchar*)roster_usr->jid); | 182 if (roster_usr->jid) g_free((gchar*)roster_usr->jid); |
177 if (roster_usr->name) g_free((gchar*)roster_usr->name); | 183 if (roster_usr->name) g_free((gchar*)roster_usr->name); |
178 if (roster_usr->status_msg) g_free((gchar*)roster_usr->status_msg); | 184 if (roster_usr->status_msg) g_free((gchar*)roster_usr->status_msg); |
179 g_free(roster_usr); | 185 g_free(roster_usr); |
180 | |
181 // Remove (if present) from unread messages list | |
182 unread_list = g_slist_delete_link(unread_list, sl_user); | |
183 | 186 |
184 // That's a little complex, we need to dereference twice | 187 // That's a little complex, we need to dereference twice |
185 sl_group = ((roster*)sl_user->data)->list; | 188 sl_group = ((roster*)sl_user->data)->list; |
186 sl_group_listptr = &((roster*)(sl_group->data))->list; | 189 sl_group_listptr = &((roster*)(sl_group->data))->list; |
187 *sl_group_listptr = g_slist_delete_link(*sl_group_listptr, sl_user); | 190 *sl_group_listptr = g_slist_delete_link(*sl_group_listptr, sl_user); |