diff options
| -rw-r--r-- | protocols/jabber/jabber.c | 2 | ||||
| -rw-r--r-- | protocols/jabber/jabber.h | 1 | ||||
| -rw-r--r-- | protocols/jabber/jabber_util.c | 26 | ||||
| -rw-r--r-- | protocols/twitter/twitter.c | 2 | ||||
| -rw-r--r-- | storage_xml.c | 6 | 
5 files changed, 34 insertions, 3 deletions
| diff --git a/protocols/jabber/jabber.c b/protocols/jabber/jabber.c index 75bc44d3..cf491f81 100644 --- a/protocols/jabber/jabber.c +++ b/protocols/jabber/jabber.c @@ -299,6 +299,8 @@ static void jabber_logout( struct im_connection *ic )  	if( jd->node_cache )  		g_hash_table_destroy( jd->node_cache ); +	jabber_buddy_remove_all( ic ); +	  	xt_free( jd->xt );  	g_free( jd->away_message ); diff --git a/protocols/jabber/jabber.h b/protocols/jabber/jabber.h index 5be7978b..b3638597 100644 --- a/protocols/jabber/jabber.h +++ b/protocols/jabber/jabber.h @@ -291,6 +291,7 @@ struct jabber_buddy *jabber_buddy_by_jid( struct im_connection *ic, char *jid, g  struct jabber_buddy *jabber_buddy_by_ext_jid( struct im_connection *ic, char *jid, get_buddy_flags_t flags );  int jabber_buddy_remove( struct im_connection *ic, char *full_jid );  int jabber_buddy_remove_bare( struct im_connection *ic, char *bare_jid ); +void jabber_buddy_remove_all( struct im_connection *ic );  time_t jabber_get_timestamp( struct xt_node *xt );  struct jabber_error *jabber_error_parse( struct xt_node *node, char *xmlns );  void jabber_error_free( struct jabber_error *err ); diff --git a/protocols/jabber/jabber_util.c b/protocols/jabber/jabber_util.c index 608cb52a..ab3e6c38 100644 --- a/protocols/jabber/jabber_util.c +++ b/protocols/jabber/jabber_util.c @@ -668,6 +668,32 @@ int jabber_buddy_remove_bare( struct im_connection *ic, char *bare_jid )  	}  } +static gboolean jabber_buddy_remove_all_cb( gpointer key, gpointer value, gpointer data ) +{ +	struct jabber_buddy *bud, *next; +	 +	bud = value; +	while( bud ) +	{ +		next = bud->next; +		g_free( bud->ext_jid ); +		g_free( bud->full_jid ); +		g_free( bud->away_message ); +		g_free( bud ); +		bud = next; +	} +	 +	return TRUE; +} + +void jabber_buddy_remove_all( struct im_connection *ic ) +{ +	struct jabber_data *jd = ic->proto_data; +	 +	g_hash_table_foreach_remove( jd->buddies, jabber_buddy_remove_all_cb, NULL ); +	g_hash_table_destroy( jd->buddies ); +} +  time_t jabber_get_timestamp( struct xt_node *xt )  {  	struct xt_node *c; diff --git a/protocols/twitter/twitter.c b/protocols/twitter/twitter.c index a5fc68ab..db893e17 100644 --- a/protocols/twitter/twitter.c +++ b/protocols/twitter/twitter.c @@ -235,6 +235,8 @@ static void twitter_logout( struct im_connection *ic )  	if( td )  	{  		oauth_info_free( td->oauth_info ); +		g_free( td->url_host ); +		g_free( td->url_path );  		g_free( td->pass );  		g_free( td );  	} diff --git a/storage_xml.c b/storage_xml.c index a0e2fd25..3ce85713 100644 --- a/storage_xml.c +++ b/storage_xml.c @@ -403,8 +403,8 @@ static storage_status_t xml_save( irc_t *irc, int overwrite )  	if( !overwrite && g_access( path, F_OK ) == 0 )  		return STORAGE_ALREADY_EXISTS; -	strcat( path, "~" ); -	if( ( fd = open( path, O_WRONLY | O_CREAT | O_TRUNC, 0600 ) ) < 0 ) +	strcat( path, ".XXXXXX" ); +	if( ( fd = mkstemp( path ) ) < 0 )  	{  		irc_usermsg( irc, "Error while opening configuration file." );  		return STORAGE_OTHER_ERROR; @@ -500,7 +500,7 @@ static storage_status_t xml_save( irc_t *irc, int overwrite )  	fsync( fd );  	close( fd ); -	path2 = g_strndup( path, strlen( path ) - 1 ); +	path2 = g_strndup( path, strlen( path ) - 7 );  	if( rename( path, path2 ) != 0 )  	{  		irc_usermsg( irc, "Error while renaming temporary configuration file." ); | 
