degesch: cleanup
Channels now need a reference to the server, so don't pass it to functions.
This commit is contained in:
		
							parent
							
								
									2c48bc9959
								
							
						
					
					
						commit
						76f4e6faa6
					
				
							
								
								
									
										50
									
								
								degesch.c
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								degesch.c
									
									
									
									
									
								
							| @ -4621,9 +4621,9 @@ irc_try_readd_user (struct server *s, | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | static void | ||||||
| irc_try_readd_channel (struct server *s, | irc_try_readd_channel (struct channel *channel, struct buffer *buffer) | ||||||
| 	struct channel *channel, struct buffer *buffer) |  | ||||||
| { | { | ||||||
|  | 	struct server *s = channel->s; | ||||||
| 	if (str_map_find (&s->irc_channels, channel->name)) | 	if (str_map_find (&s->irc_channels, channel->name)) | ||||||
| 	{ | 	{ | ||||||
| 		// Remove all users from channel and destroy any channel buffer
 | 		// Remove all users from channel and destroy any channel buffer
 | ||||||
| @ -4680,7 +4680,7 @@ irc_rehash_and_fix_conflicts (struct server *s) | |||||||
| 
 | 
 | ||||||
| 	iter = str_map_iter_make (&old_channels); | 	iter = str_map_iter_make (&old_channels); | ||||||
| 	while ((channel = str_map_iter_next (&iter))) | 	while ((channel = str_map_iter_next (&iter))) | ||||||
| 		irc_try_readd_channel (s, channel, | 		irc_try_readd_channel (channel, | ||||||
| 			str_map_find (&old_buffer_map, channel->name)); | 			str_map_find (&old_buffer_map, channel->name)); | ||||||
| 
 | 
 | ||||||
| 	// Hopefully we've either moved or destroyed all the old content
 | 	// Hopefully we've either moved or destroyed all the old content
 | ||||||
| @ -6315,10 +6315,9 @@ mode_processor_apply_channel (struct mode_processor *self) | |||||||
| 
 | 
 | ||||||
| /// Returns whether the change has only affected channel user modes
 | /// Returns whether the change has only affected channel user modes
 | ||||||
| static bool | static bool | ||||||
| irc_handle_mode_channel | irc_handle_mode_channel (struct channel *channel, char **params) | ||||||
| 	(struct server *s, struct channel *channel, char **params) |  | ||||||
| { | { | ||||||
| 	struct mode_processor p = { .s = s, .channel = channel }; | 	struct mode_processor p = { .s = channel->s, .channel = channel }; | ||||||
| 	mode_processor_run (&p, params, mode_processor_apply_channel); | 	mode_processor_run (&p, params, mode_processor_apply_channel); | ||||||
| 	return p.changes == p.usermode_changes; | 	return p.changes == p.usermode_changes; | ||||||
| } | } | ||||||
| @ -6720,7 +6719,7 @@ irc_handle_mode (struct server *s, const struct irc_message *msg) | |||||||
| 
 | 
 | ||||||
| 		int flags = 0; | 		int flags = 0; | ||||||
| 		if (channel | 		if (channel | ||||||
| 		 && irc_handle_mode_channel (s, channel, msg->params.vector + 1)) | 		 && irc_handle_mode_channel (channel, msg->params.vector + 1)) | ||||||
| 			// This is 90% automode spam, let's not let it steal attention,
 | 			// This is 90% automode spam, let's not let it steal attention,
 | ||||||
| 			// maybe this behaviour should be configurable though
 | 			// maybe this behaviour should be configurable though
 | ||||||
| 			flags = BUFFER_LINE_UNIMPORTANT; | 			flags = BUFFER_LINE_UNIMPORTANT; | ||||||
| @ -7375,7 +7374,7 @@ channel_user_sort_entry_cmp (const void *entry_a, const void *entry_b) | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static char * | static char * | ||||||
| make_channel_users_list (struct server *s, struct channel *channel) | make_channel_users_list (struct channel *channel) | ||||||
| { | { | ||||||
| 	size_t n_users = 0; | 	size_t n_users = 0; | ||||||
| 	LIST_FOR_EACH (struct channel_user, iter, channel->users) | 	LIST_FOR_EACH (struct channel_user, iter, channel->users) | ||||||
| @ -7385,7 +7384,7 @@ make_channel_users_list (struct server *s, struct channel *channel) | |||||||
| 	size_t i = 0; | 	size_t i = 0; | ||||||
| 	LIST_FOR_EACH (struct channel_user, iter, channel->users) | 	LIST_FOR_EACH (struct channel_user, iter, channel->users) | ||||||
| 	{ | 	{ | ||||||
| 		entries[i].s = s; | 		entries[i].s = channel->s; | ||||||
| 		entries[i].channel_user = iter; | 		entries[i].channel_user = iter; | ||||||
| 		i++; | 		i++; | ||||||
| 	} | 	} | ||||||
| @ -7399,7 +7398,7 @@ make_channel_users_list (struct server *s, struct channel *channel) | |||||||
| 	{ | 	{ | ||||||
| 		struct channel_user *channel_user = entries[i].channel_user; | 		struct channel_user *channel_user = entries[i].channel_user; | ||||||
| 		if (channel_user->user->away) str_append_c (&list, '\x1d'); | 		if (channel_user->user->away) str_append_c (&list, '\x1d'); | ||||||
| 		irc_get_channel_user_prefix (s, channel_user, &list); | 		irc_get_channel_user_prefix (channel->s, channel_user, &list); | ||||||
| 		str_append (&list, channel_user->user->nickname); | 		str_append (&list, channel_user->user->nickname); | ||||||
| 		if (channel_user->user->away) str_append_c (&list, '\x1d'); | 		if (channel_user->user->away) str_append_c (&list, '\x1d'); | ||||||
| 		str_append_c (&list, ' '); | 		str_append_c (&list, ' '); | ||||||
| @ -7410,10 +7409,10 @@ make_channel_users_list (struct server *s, struct channel *channel) | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | static void | ||||||
| irc_sync_channel_user (struct server *s, struct channel *channel, | irc_sync_channel_user (struct channel *channel, const char *nickname, | ||||||
| 	const char *nickname, const char *prefixes) | 	const char *prefixes) | ||||||
| { | { | ||||||
| 	struct user *user = irc_get_or_make_user (s, nickname); | 	struct user *user = irc_get_or_make_user (channel->s, nickname); | ||||||
| 	struct channel_user *channel_user = | 	struct channel_user *channel_user = | ||||||
| 		irc_channel_get_user (channel, user); | 		irc_channel_get_user (channel, user); | ||||||
| 	if (!channel_user) | 	if (!channel_user) | ||||||
| @ -7431,34 +7430,35 @@ irc_sync_channel_user (struct server *s, struct channel *channel, | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | static void | ||||||
| irc_process_names_finish (struct server *s, struct channel *channel) | irc_process_names_finish (struct channel *channel) | ||||||
| { | { | ||||||
|  | 	struct server *s = channel->s; | ||||||
| 	struct buffer *buffer = str_map_find (&s->irc_buffer_map, channel->name); | 	struct buffer *buffer = str_map_find (&s->irc_buffer_map, channel->name); | ||||||
| 	if (buffer) | 	if (buffer) | ||||||
| 	{ | 	{ | ||||||
| 		log_server_status (s, buffer, "Users on #S: #&m", | 		log_server_status (channel->s, buffer, "Users on #S: #&m", | ||||||
| 			channel->name, make_channel_users_list (s, channel)); | 			channel->name, make_channel_users_list (channel)); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void | static void | ||||||
| irc_process_names (struct server *s, struct channel *channel) | irc_process_names (struct channel *channel) | ||||||
| { | { | ||||||
| 	struct str_map present = str_map_make (NULL); | 	struct str_map present = str_map_make (NULL); | ||||||
| 	present.key_xfrm = s->irc_strxfrm; | 	present.key_xfrm = channel->s->irc_strxfrm; | ||||||
| 
 | 
 | ||||||
| 	struct strv *updates = &channel->names_buf; | 	struct strv *updates = &channel->names_buf; | ||||||
| 	for (size_t i = 0; i < updates->len; i++) | 	for (size_t i = 0; i < updates->len; i++) | ||||||
| 	{ | 	{ | ||||||
| 		const char *item = updates->vector[i]; | 		const char *item = updates->vector[i]; | ||||||
| 		size_t n_prefixes = strspn (item, s->irc_chanuser_prefixes); | 		size_t n_prefixes = strspn (item, channel->s->irc_chanuser_prefixes); | ||||||
| 		const char *nickname = item + n_prefixes; | 		const char *nickname = item + n_prefixes; | ||||||
| 
 | 
 | ||||||
| 		// Store the nickname in a hashset
 | 		// Store the nickname in a hashset
 | ||||||
| 		str_map_set (&present, nickname, (void *) 1); | 		str_map_set (&present, nickname, (void *) 1); | ||||||
| 
 | 
 | ||||||
| 		char *prefixes = xstrndup (item, n_prefixes); | 		char *prefixes = xstrndup (item, n_prefixes); | ||||||
| 		irc_sync_channel_user (s, channel, nickname, prefixes); | 		irc_sync_channel_user (channel, nickname, prefixes); | ||||||
| 		free (prefixes); | 		free (prefixes); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -7471,7 +7471,7 @@ irc_process_names (struct server *s, struct channel *channel) | |||||||
| 	strv_reset (&channel->names_buf); | 	strv_reset (&channel->names_buf); | ||||||
| 
 | 
 | ||||||
| 	if (!channel->show_names_after_who) | 	if (!channel->show_names_after_who) | ||||||
| 		irc_process_names_finish (s, channel); | 		irc_process_names_finish (channel); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | ||||||
| @ -7489,10 +7489,10 @@ irc_handle_rpl_endofnames (struct server *s, const struct irc_message *msg) | |||||||
| 		struct str_map_iter iter = str_map_iter_make (&s->irc_channels); | 		struct str_map_iter iter = str_map_iter_make (&s->irc_channels); | ||||||
| 		struct channel *channel; | 		struct channel *channel; | ||||||
| 		while ((channel = str_map_iter_next (&iter))) | 		while ((channel = str_map_iter_next (&iter))) | ||||||
| 			irc_process_names (s, channel); | 			irc_process_names (channel); | ||||||
| 	} | 	} | ||||||
| 	else if (channel) | 	else if (channel) | ||||||
| 		irc_process_names (s, channel); | 		irc_process_names (channel); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static bool | static bool | ||||||
| @ -7531,7 +7531,7 @@ irc_handle_rpl_endofwho (struct server *s, const struct irc_message *msg) | |||||||
| 	if (!channel || !channel->show_names_after_who) | 	if (!channel || !channel->show_names_after_who) | ||||||
| 		return false; | 		return false; | ||||||
| 
 | 
 | ||||||
| 	irc_process_names_finish (s, channel); | 	irc_process_names_finish (channel); | ||||||
| 	channel->show_names_after_who = false; | 	channel->show_names_after_who = false; | ||||||
| 	return true; | 	return true; | ||||||
| } | } | ||||||
| @ -7573,7 +7573,7 @@ irc_handle_rpl_channelmodeis (struct server *s, const struct irc_message *msg) | |||||||
| 		str_reset (&channel->no_param_modes); | 		str_reset (&channel->no_param_modes); | ||||||
| 		str_map_clear (&channel->param_modes); | 		str_map_clear (&channel->param_modes); | ||||||
| 
 | 
 | ||||||
| 		irc_handle_mode_channel (s, channel, msg->params.vector + 1); | 		irc_handle_mode_channel (channel, msg->params.vector + 1); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// XXX: do we want to log a message?
 | 	// XXX: do we want to log a message?
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user