diff --git a/src/plugins/irc/irc-command.c b/src/plugins/irc/irc-command.c index d8cf4a02b..bb426d7ed 100644 --- a/src/plugins/irc/irc-command.c +++ b/src/plugins/irc/irc-command.c @@ -71,9 +71,7 @@ irc_command_mode_nicks (struct t_irc_server *server, int argc, char **argv) { int i, arg_yes, max_modes, modes_added, msg_priority, prefix_found; - long number; - char *error, prefix, modes[128+1], nicks[1024]; - const char *ptr_modes; + char prefix, modes[128+1], nicks[1024]; struct t_irc_nick *ptr_nick; struct t_hashtable *nicks_sent; @@ -103,27 +101,8 @@ irc_command_mode_nicks (struct t_irc_server *server, } } - /* default is 4 modes max (if server did not send the info) */ - max_modes = 4; - - /* - * look for the max modes supported in one command by the server - * (in isupport value, with the format: "MODES=4") - */ - ptr_modes = irc_server_get_isupport_value (server, "MODES"); - if (ptr_modes) - { - error = NULL; - number = strtol (ptr_modes, &error, 10); - if (error && !error[0]) - { - max_modes = number; - if (max_modes < 1) - max_modes = 1; - if (max_modes > 128) - max_modes = 128; - } - } + /* get the max number of modes we can send in a message */ + max_modes = irc_server_get_max_modes (server); /* get prefix for the mode (example: prefix == '@' for mode 'o') */ prefix = irc_server_get_prefix_char_for_mode (server, mode[0]); @@ -256,9 +235,7 @@ irc_command_mode_masks (struct t_irc_server *server, char **argv, int pos_masks) { int max_modes, modes_added, msg_priority, mask_fits; - long number; - char *error, modes[128+1], masks[1024], *mask; - const char *ptr_modes; + char modes[128+1], masks[1024], *mask; struct t_irc_channel *ptr_channel; struct t_irc_nick *ptr_nick; @@ -272,27 +249,8 @@ irc_command_mode_masks (struct t_irc_server *server, return; } - /* default is 4 modes max (if server did not send the info) */ - max_modes = 4; - - /* - * look for the max modes supported in one command by the server - * (in isupport value, with the format: "MODES=4") - */ - ptr_modes = irc_server_get_isupport_value (server, "MODES"); - if (ptr_modes) - { - error = NULL; - number = strtol (ptr_modes, &error, 10); - if (error && !error[0]) - { - max_modes = number; - if (max_modes < 1) - max_modes = 1; - if (max_modes > 128) - max_modes = 128; - } - } + /* get the max number of modes we can send in a message */ + max_modes = irc_server_get_max_modes (server); /* * first message has high priority and subsequent messages have low priority diff --git a/src/plugins/irc/irc-server.c b/src/plugins/irc/irc-server.c index 1218ef785..569888f36 100644 --- a/src/plugins/irc/irc-server.c +++ b/src/plugins/irc/irc-server.c @@ -952,6 +952,41 @@ irc_server_prefix_char_statusmsg (struct t_irc_server *server, 1 : 0; } +/* + * Get max modes supported in one command by the server + * (in isupport value, with the format: "MODES=4"). + * + * Default is 4 if the info is not given by the server. + */ + +int +irc_server_get_max_modes (struct t_irc_server *server) +{ + const char *support_modes; + char *error; + long number; + int max_modes; + + max_modes = 4; + + support_modes = irc_server_get_isupport_value (server, "MODES"); + if (support_modes) + { + error = NULL; + number = strtol (support_modes, &error, 10); + if (error && !error[0]) + { + max_modes = number; + if (max_modes < 1) + max_modes = 1; + if (max_modes > 128) + max_modes = 128; + } + } + + return max_modes; +} + /* * Gets an evaluated default_msg server option: replaces "%v" by WeeChat * version if there's no ${...} in string, or just evaluates the string. diff --git a/src/plugins/irc/irc-server.h b/src/plugins/irc/irc-server.h index 8d3db81fd..359c32356 100644 --- a/src/plugins/irc/irc-server.h +++ b/src/plugins/irc/irc-server.h @@ -302,6 +302,7 @@ extern char irc_server_get_prefix_char_for_mode (struct t_irc_server *server, extern const char *irc_server_get_chanmodes (struct t_irc_server *server); extern int irc_server_prefix_char_statusmsg (struct t_irc_server *server, char prefix_char); +extern int irc_server_get_max_modes (struct t_irc_server *server); extern char *irc_server_get_default_msg (const char *default_msg, struct t_irc_server *server, const char *channel_name);