From 63a520b8ce1776442f2f79528ddd23fb0de51f94 Mon Sep 17 00:00:00 2001 From: Wilmer van der Gaast Date: Fri, 26 Mar 2010 23:11:02 -0400 Subject: Collect that garbage. --- irc.c | 5 +++++ irc_channel.c | 17 +++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/irc.c b/irc.c index 7c7445e3..f21dc974 100644 --- a/irc.c +++ b/irc.c @@ -210,6 +210,9 @@ void irc_free( irc_t * irc ) irc_user_free( irc, iu->nick ); } + while( irc->channels ) + irc_channel_free( irc->channels->data ); + if( irc->ping_source_id > 0 ) b_event_remove( irc->ping_source_id ); if( irc->r_watch_source_id > 0 ) @@ -591,7 +594,9 @@ int irc_check_login( irc_t *irc ) irc->user = irc_user_new( irc, iu->nick ); irc->user->user = iu->user; irc->user->fullname = iu->fullname; + g_free( iu->fullname ); g_free( iu->nick ); + g_free( iu->host ); g_free( iu ); irc->umode[0] = '\0'; diff --git a/irc_channel.c b/irc_channel.c index 17904d72..c58d6b1c 100644 --- a/irc_channel.c +++ b/irc_channel.c @@ -59,6 +59,23 @@ irc_channel_t *irc_channel_by_name( irc_t *irc, const char *name ) return NULL; } +int irc_channel_free( irc_channel_t *ic ) +{ + irc_t *irc = ic->irc; + + if( ic->flags & IRC_CHANNEL_JOINED ) + irc_channel_del_user( ic, irc->user ); + + irc->channels = g_slist_remove( irc->channels, ic ); + g_slist_free( ic->users ); + + g_free( ic->name ); + g_free( ic->topic ); + g_free( ic ); + + return 1; +} + int irc_channel_add_user( irc_channel_t *ic, irc_user_t *iu ) { if( g_slist_find( ic->users, iu ) != NULL ) -- cgit v1.2.3