Mercurial > ~mikael > mcabber > hg
diff mcabber/src/roster.c @ 164:faf534be8ff0
[/trunk] Changeset 176 by mikael
* Add roster_free()
* Empty roster when disconnecting from the server / going offline
* Don't display buddies status when we're offline
* Fix a bug when the roster is empty and we try to send a message (commands.c)
author | mikael |
---|---|
date | Mon, 02 May 2005 20:31:01 +0000 |
parents | c3624b2a7059 |
children | aa5b635520ef |
line wrap: on
line diff
--- a/mcabber/src/roster.c Mon May 02 14:18:55 2005 +0000 +++ b/mcabber/src/roster.c Mon May 02 20:31:01 2005 +0000 @@ -195,6 +195,45 @@ // previous (or next) node. } +// Free all roster data. Call buddylist_build() to free the buddylist. +void roster_free(void) +{ + GSList *sl_grp = groups; + + // Walk through groups + while (sl_grp) { + roster *roster_grp = (roster*)sl_grp->data; + GSList *sl_usr = roster_grp->list; + // Walk through this group users + while (sl_usr) { + roster *roster_usr = (roster*)sl_usr->data; + // Free name and jid + if (roster_usr->jid) + g_free((gchar*)roster_usr->jid); + if (roster_usr->name) + g_free((gchar*)roster_usr->name); + sl_usr = g_slist_next(sl_usr); + } + // Free group's users list + if (roster_grp->list) + g_slist_free(roster_grp->list); + // Free group's name and jid + if (roster_grp->jid) + g_free((gchar*)roster_grp->jid); + if (roster_grp->name) + g_free((gchar*)roster_grp->name); + sl_grp = g_slist_next(sl_grp); + } + // Free groups list + if (groups) { + g_slist_free(groups); + groups = NULL; + // Update (i.e. free) buddylist + if (buddylist) + buddylist_build(); + } +} + void roster_setstatus(const char *jid, enum imstatus bstat) { GSList *sl_user;