diff options
Diffstat (limited to 'query.c')
| -rw-r--r-- | query.c | 13 | 
1 files changed, 8 insertions, 5 deletions
| @@ -30,7 +30,8 @@ static void query_display( irc_t *irc, query_t *q );  static query_t *query_default( irc_t *irc );  query_t *query_add( irc_t *irc, struct im_connection *ic, char *question, -                    query_callback yes, query_callback no, void *data ) +                    query_callback yes, query_callback no, query_callback free, +                    void *data )  {  	query_t *q = g_new0( query_t, 1 ); @@ -38,6 +39,7 @@ query_t *query_add( irc_t *irc, struct im_connection *ic, char *question,  	q->question = g_strdup( question );  	q->yes = yes;  	q->no = no; +	q->free = free;  	q->data = data;  	if( strchr( irc->umode, 'b' ) != NULL ) @@ -63,7 +65,7 @@ query_t *query_add( irc_t *irc, struct im_connection *ic, char *question,  		irc->queries = q;  	} -	if( g_strcasecmp( set_getstr( &irc->set, "query_order" ), "lifo" ) == 0 || irc->queries == q ) +	if( g_strcasecmp( set_getstr( &irc->b->set, "query_order" ), "lifo" ) == 0 || irc->queries == q )  		query_display( irc, q );  	return( q ); @@ -93,7 +95,8 @@ void query_del( irc_t *irc, query_t *q )  	}  	g_free( q->question ); -	if( q->data ) g_free( q->data ); /* Memory leak... */ +	if( q->free && q->data ) +		q->free( q->data );  	g_free( q );  } @@ -102,7 +105,7 @@ void query_del_by_conn( irc_t *irc, struct im_connection *ic )  	query_t *q, *n, *def;  	int count = 0; -	if(!ic) +	if( !ic )  		return;  	q = irc->queries; @@ -183,7 +186,7 @@ static query_t *query_default( irc_t *irc )  {  	query_t *q; -	if( g_strcasecmp( set_getstr( &irc->set, "query_order" ), "fifo" ) == 0 ) +	if( g_strcasecmp( set_getstr( &irc->b->set, "query_order" ), "fifo" ) == 0 )  		q = irc->queries;  	else  		for( q = irc->queries; q && q->next; q = q->next ); | 
