1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-27 21:36:37 +02:00

irc: use util functions to parse integers

This commit is contained in:
Sébastien Helleu
2026-06-20 11:09:20 +02:00
parent 9b418b4dc2
commit b49eac6f2d
11 changed files with 93 additions and 185 deletions
+15 -28
View File
@@ -96,8 +96,8 @@ char *irc_color_string_decoded[32];
int
irc_color_convert_rgb2term (long rgb)
{
char str_color[64], *info_color, *error;
long number;
char str_color[64], *info_color;
int number;
if (rgb < 0)
return -1;
@@ -111,9 +111,7 @@ irc_color_convert_rgb2term (long rgb)
return -1;
}
error = NULL;
number = strtol (info_color, &error, 10);
if (!error || error[0])
if (!weechat_util_parse_int (info_color, 10, &number))
{
free (info_color);
return -1;
@@ -121,7 +119,7 @@ irc_color_convert_rgb2term (long rgb)
free (info_color);
return (int)number;
return number;
}
/*
@@ -133,8 +131,8 @@ irc_color_convert_rgb2term (long rgb)
int
irc_color_convert_rgb2irc (long rgb)
{
char str_color[64], *error, *info_color;
long number;
char str_color[64], *info_color;
int number;
if (rgb < 0)
return -1;
@@ -151,9 +149,7 @@ irc_color_convert_rgb2irc (long rgb)
return -1;
}
error = NULL;
number = strtol (info_color, &error, 10);
if (!error || error[0]
if (!weechat_util_parse_int (info_color, 10, &number)
|| (number < 0) || (number >= IRC_COLOR_TERM2IRC_NUM_COLORS))
{
free (info_color);
@@ -174,7 +170,7 @@ irc_color_convert_rgb2irc (long rgb)
int
irc_color_convert_term2irc (int color)
{
char str_color[64], *error, *info_color;
char str_color[64], *info_color;
long number;
snprintf (str_color, sizeof (str_color), "%d", color);
@@ -186,9 +182,8 @@ irc_color_convert_term2irc (int color)
return -1;
}
error = NULL;
number = strtol (info_color, &error, 10);
if (!error || error[0] || (number < 0) || (number > 0xFFFFFF))
if (!weechat_util_parse_long (info_color, 10, &number)
|| (number < 0) || (number > 0xFFFFFF))
{
free (info_color);
return -1;
@@ -211,7 +206,7 @@ irc_color_convert_term2irc (int color)
char *
irc_color_decode (const char *string, int keep_colors)
{
char **out, *error;
char **out;
char str_fg[16], str_bg[16], str_color[128], str_key[128], str_to_add[128];
const char *remapped_color;
unsigned char *ptr_string;
@@ -337,18 +332,14 @@ irc_color_decode (const char *string, int keep_colors)
bg = -1;
if (str_fg[0])
{
error = NULL;
fg = (int)strtol (str_fg, &error, 10);
if (error && !error[0])
if (weechat_util_parse_int (str_fg, 10, &fg))
fg %= IRC_NUM_COLORS;
else
fg = -1;
}
if (str_bg[0])
{
error = NULL;
bg = (int)strtol (str_bg, &error, 10);
if (error && !error[0])
if (weechat_util_parse_int (str_bg, 10, &bg))
bg %= IRC_NUM_COLORS;
else
bg = -1;
@@ -422,16 +413,12 @@ irc_color_decode (const char *string, int keep_colors)
bg_rgb = -1;
if (str_fg[0])
{
error = NULL;
fg_rgb = strtol (str_fg, &error, 16);
if (!error || error[0])
if (!weechat_util_parse_long (str_fg, 16, &fg_rgb))
fg_rgb = -1;
}
if (str_bg[0])
{
error = NULL;
bg_rgb = strtol (str_bg, &error, 16);
if (!error || error[0])
if (!weechat_util_parse_long (str_bg, 16, &bg_rgb))
bg_rgb = -1;
}
str_fg[0] = '\0';
+13 -29
View File
@@ -232,9 +232,8 @@ irc_command_mode_nicks (struct t_irc_server *server,
char **
irc_command_mode_masks_convert_ranges (char **argv, int arg_start)
{
char **str_masks, **masks, *error1, *error2, *pos, str_number[32];
int i, length, added;
long j, number1, number2;
char **str_masks, **masks, *pos, str_number[32];
int i, j, length, added, number1, number2;
if (!argv || (arg_start < 0))
return NULL;
@@ -255,12 +254,8 @@ irc_command_mode_masks_convert_ranges (char **argv, int arg_start)
&& (argv[i][length - 1] != '-'))
{
pos[0] = '\0';
error1 = NULL;
number1 = strtol (argv[i], &error1, 10);
error2 = NULL;
number2 = strtol (pos + 1, &error2, 10);
if (error1 && !error1[0]
&& error2 && !error2[0]
if (weechat_util_parse_int (argv[i], 10, &number1)
&& weechat_util_parse_int (pos + 1, 10, &number2)
&& (number1 > 0) && (number1 < 128)
&& (number2 > 0) && (number2 < 128)
&& (number1 < number2))
@@ -269,8 +264,7 @@ irc_command_mode_masks_convert_ranges (char **argv, int arg_start)
{
if ((*str_masks)[0])
weechat_string_dyn_concat (str_masks, " ", -1);
snprintf (str_number, sizeof (str_number),
"%ld", j);
snprintf (str_number, sizeof (str_number), "%d", j);
weechat_string_dyn_concat (str_masks, str_number, -1);
}
added = 1;
@@ -312,14 +306,12 @@ irc_command_mode_masks (struct t_irc_server *server,
const char *set, const char *mode,
char **argv, int pos_masks)
{
int max_modes, modes_added, msg_priority;
int max_modes, modes_added, msg_priority, number;
char **modes, **masks, *mask;
struct t_irc_channel *ptr_channel;
struct t_irc_nick *ptr_nick;
struct t_irc_modelist *ptr_modelist;
struct t_irc_modelist_item *ptr_item;
long number;
char *error;
if (irc_mode_get_chanmode_type (server, mode[0]) != 'A')
{
@@ -367,9 +359,7 @@ irc_command_mode_masks (struct t_irc_server *server,
/* use modelist item for number arguments */
if (ptr_modelist && (set[0] == '-'))
{
error = NULL;
number = strtol (argv[pos_masks], &error, 10);
if (error && !error[0])
if (weechat_util_parse_int (argv[pos_masks], 10, &number))
{
ptr_item = irc_modelist_item_search_number (ptr_modelist,
number - 1);
@@ -2622,9 +2612,8 @@ irc_command_ignore_display (struct t_irc_ignore *ignore)
IRC_COMMAND_CALLBACK(ignore)
{
struct t_irc_ignore *ptr_ignore;
char *mask, *regex, *regex2, *ptr_regex, *pos, *server, *channel, *error;
int length, update;
long number;
char *mask, *regex, *regex2, *ptr_regex, *pos, *server, *channel;
int length, number, update;
/* make C compiler happy */
(void) pointer;
@@ -2767,9 +2756,7 @@ IRC_COMMAND_CALLBACK(ignore)
}
else
{
error = NULL;
number = strtol (argv[2], &error, 10);
if (error && !error[0])
if (weechat_util_parse_int (argv[2], 10, &number))
{
ptr_ignore = irc_ignore_search_by_number (number);
if (ptr_ignore)
@@ -3430,18 +3417,15 @@ int
irc_command_list_get_int_arg (int argc, char **argv, int arg_number,
int default_value)
{
long value;
char *error;
int value;
value = default_value;
if (argc > arg_number)
{
error = NULL;
value = strtol (argv[arg_number], &error, 10);
if (!error || error[0])
if (!weechat_util_parse_int (argv[arg_number], 10, &value))
value = default_value;
}
return (int)value;
return value;
}
/*
+2 -6
View File
@@ -1288,10 +1288,8 @@ irc_config_server_check_value_cb (const void *pointer, void *data,
struct t_config_option *option,
const char *value)
{
int index_option, proxy_found;
int index_option, number, proxy_found;
const char *pos_error, *proxy_name;
char *error;
long number;
struct t_infolist *infolist;
/* make C compiler happy */
@@ -1364,9 +1362,7 @@ irc_config_server_check_value_cb (const void *pointer, void *data,
case IRC_SERVER_OPTION_SPLIT_MSG_MAX_LENGTH:
if (!value || !value[0])
break;
error = NULL;
number = strtol (value, &error, 10);
if (!error || error[0])
if (!weechat_util_parse_int (value, 10, &number))
{
/*
* not a valid number, but we return 1 (OK) to let WeeChat
+4 -8
View File
@@ -985,9 +985,8 @@ irc_info_infolist_irc_modelist_item_cb (const void *pointer, void *data,
struct t_irc_channel *ptr_channel;
struct t_irc_modelist *ptr_modelist;
struct t_irc_modelist_item *ptr_item;
char **argv, *error;
int argc;
long number;
char **argv;
int argc, number;
/* make C compiler happy */
(void) pointer;
@@ -1029,15 +1028,12 @@ irc_info_infolist_irc_modelist_item_cb (const void *pointer, void *data,
}
if (!obj_pointer && (argc >= 4))
{
error = NULL;
number = strtol (argv[3], &error, 10);
if (!error || error[0] || (number < 0))
if (!weechat_util_parse_int (argv[3], 10, &number) || (number < 0))
{
weechat_string_free_split (argv);
return NULL;
}
obj_pointer = irc_modelist_item_search_number (ptr_modelist,
(int)number);
obj_pointer = irc_modelist_item_search_number (ptr_modelist, number);
if (!obj_pointer)
{
weechat_string_free_split (argv);
+13 -18
View File
@@ -234,9 +234,8 @@ int
irc_list_channel_match_filter (struct t_irc_server *server,
struct t_irc_list_channel *channel)
{
char *error, *result;
long number;
int match;
char *result;
int match, number;
/* no filter? then any channel is matching */
if (!server->list->filter)
@@ -280,25 +279,22 @@ irc_list_channel_match_filter (struct t_irc_server *server,
else if (strncmp (server->list->filter, "u:>", 3) == 0)
{
/* filter by users (> N)*/
error = NULL;
number = strtol (server->list->filter + 3, &error, 10);
if (error && !error[0] && channel->users > (int)number)
if (weechat_util_parse_int (server->list->filter + 3, 10, &number)
&& (channel->users > number))
return 1;
}
else if (strncmp (server->list->filter, "u:<", 3) == 0)
{
/* filter by users (< N)*/
error = NULL;
number = strtol (server->list->filter + 3, &error, 10);
if (error && !error[0] && channel->users < (int)number)
if (weechat_util_parse_int (server->list->filter + 3, 10, &number)
&& (channel->users < number))
return 1;
}
else if (strncmp (server->list->filter, "u:", 2) == 0)
{
/* filter by users */
error = NULL;
number = strtol (server->list->filter + 2, &error, 10);
if (error && !error[0] && channel->users >= (int)number)
if (weechat_util_parse_int (server->list->filter + 2, 10, &number)
&& (channel->users >= number))
return 1;
}
else
@@ -375,10 +371,9 @@ int
irc_list_parse_messages (struct t_irc_server *server, const char *output)
{
struct t_irc_list_channel *channel;
char **irc_msgs, *command, **params, *error;
char **irc_msgs, *command, **params;
const char *ptr_name;
int i, count_irc_msgs, num_params, length, keep_colors;
long number;
int i, count_irc_msgs, num_params, length, keep_colors, number;
if (server->list->channels)
{
@@ -439,9 +434,9 @@ irc_list_parse_messages (struct t_irc_server *server, const char *output)
ptr_name++;
}
channel->name2 = strdup (ptr_name);
error = NULL;
number = strtol (params[2], &error, 10);
channel->users = (error && !error[0]) ? number : 0;
if (!weechat_util_parse_int (params[2], 10, &number))
number = 0;
channel->users = number;
channel->topic = (num_params > 3) ?
irc_color_decode (params[3], keep_colors) : NULL;
length = weechat_utf8_strlen_screen (channel->name);
+3 -8
View File
@@ -598,8 +598,7 @@ irc_message_parse_cap_multiline_value (struct t_irc_server *server,
{
struct t_hashtable *values;
const char *ptr_value;
char *error;
long number;
int number;
if (!server)
return;
@@ -617,18 +616,14 @@ irc_message_parse_cap_multiline_value (struct t_irc_server *server,
ptr_value = (const char *)weechat_hashtable_get (values, "max-bytes");
if (ptr_value)
{
error = NULL;
number = strtol (ptr_value, &error, 10);
if (error && !error[0])
if (weechat_util_parse_int (ptr_value, 10, &number))
server->multiline_max_bytes = number;
}
ptr_value = (const char *)weechat_hashtable_get (values, "max-lines");
if (ptr_value)
{
error = NULL;
number = strtol (ptr_value, &error, 10);
if (error && !error[0])
if (weechat_util_parse_int (ptr_value, 10, &number))
server->multiline_max_lines = number;
}
+12 -23
View File
@@ -4061,9 +4061,8 @@ IRC_PROTOCOL_CALLBACK(001)
IRC_PROTOCOL_CALLBACK(005)
{
char *str_info, *error, *isupport2;
int i, arg_last, length_isupport, length, casemapping, utf8mapping;
long value;
char *str_info, *isupport2;
int i, arg_last, length_isupport, length, casemapping, utf8mapping, value;
IRC_PROTOCOL_MIN_PARAMS(2);
@@ -4081,34 +4080,26 @@ IRC_PROTOCOL_CALLBACK(005)
else if (strncmp (ctxt->params[i], "LINELEN=", 8) == 0)
{
/* save max message length */
error = NULL;
value = strtol (ctxt->params[i] + 8, &error, 10);
if (error && !error[0] && (value > 0))
ctxt->server->msg_max_length = (int)value;
if (weechat_util_parse_int (ctxt->params[i] + 8, 10, &value) && (value > 0))
ctxt->server->msg_max_length = value;
}
else if (strncmp (ctxt->params[i], "NICKLEN=", 8) == 0)
{
/* save max nick length */
error = NULL;
value = strtol (ctxt->params[i] + 8, &error, 10);
if (error && !error[0] && (value > 0))
ctxt->server->nick_max_length = (int)value;
if (weechat_util_parse_int (ctxt->params[i] + 8, 10, &value) && (value > 0))
ctxt->server->nick_max_length = value;
}
else if (strncmp (ctxt->params[i], "USERLEN=", 8) == 0)
{
/* save max user length */
error = NULL;
value = strtol (ctxt->params[i] + 8, &error, 10);
if (error && !error[0] && (value > 0))
ctxt->server->user_max_length = (int)value;
if (weechat_util_parse_int (ctxt->params[i] + 8, 10, &value) && (value > 0))
ctxt->server->user_max_length = value;
}
else if (strncmp (ctxt->params[i], "HOSTLEN=", 8) == 0)
{
/* save max host length */
error = NULL;
value = strtol (ctxt->params[i] + 8, &error, 10);
if (error && !error[0] && (value > 0))
ctxt->server->host_max_length = (int)value;
if (weechat_util_parse_int (ctxt->params[i] + 8, 10, &value) && (value > 0))
ctxt->server->host_max_length = value;
}
else if (strncmp (ctxt->params[i], "CASEMAPPING=", 12) == 0)
{
@@ -4144,10 +4135,8 @@ IRC_PROTOCOL_CALLBACK(005)
else if (strncmp (ctxt->params[i], "MONITOR=", 8) == 0)
{
/* save monitor (limit) */
error = NULL;
value = strtol (ctxt->params[i] + 8, &error, 10);
if (error && !error[0] && (value > 0))
ctxt->server->monitor = (int)value;
if (weechat_util_parse_int (ctxt->params[i] + 8, 10, &value) && (value > 0))
ctxt->server->monitor = value;
}
else if (strncmp (ctxt->params[i], "CLIENTTAGDENY=", 14) == 0)
{
+6 -17
View File
@@ -404,9 +404,8 @@ irc_redirect_new_with_commands (struct t_irc_server *server,
const char *cmd_filter)
{
struct t_irc_redirect *new_redirect;
char **items[4], *item_upper, *pos, *error;
int i, j, num_items[4];
long value;
char **items[4], *item_upper, *pos;
int i, j, num_items[4], value;
struct t_hashtable *hash_cmd[4];
new_redirect = malloc (sizeof (*new_redirect));
@@ -460,9 +459,7 @@ irc_redirect_new_with_commands (struct t_irc_server *server,
if (pos)
{
pos[0] = '\0';
error = NULL;
value = strtol (pos + 1, &error, 10);
if (!error || error[0])
if (!weechat_util_parse_int (pos + 1, 10, &value))
value = -1;
}
item_upper = weechat_string_toupper (items[i][j]);
@@ -1257,7 +1254,6 @@ irc_redirect_pattern_hsignal_cb (const void *pointer, void *data,
struct t_hashtable *hashtable)
{
const char *pattern, *str_timeout, *cmd_start, *cmd_stop, *cmd_extra;
char *error;
int number, timeout;
/* make C compiler happy */
@@ -1295,9 +1291,7 @@ irc_redirect_pattern_hsignal_cb (const void *pointer, void *data,
timeout = 0;
if (str_timeout && str_timeout[0])
{
error = NULL;
number = (int)strtol (str_timeout, &error, 10);
if (error && !error[0])
if (weechat_util_parse_int (str_timeout, 10, &number))
timeout = number;
}
@@ -1325,7 +1319,6 @@ irc_redirect_command_hsignal_cb (const void *pointer, void *data,
{
const char *server, *pattern, *redirect_signal, *str_count, *string;
const char *str_timeout, *cmd_filter;
char *error;
struct t_irc_server *ptr_server;
int number, count, timeout;
@@ -1366,18 +1359,14 @@ irc_redirect_command_hsignal_cb (const void *pointer, void *data,
count = 1;
if (str_count && str_count[0])
{
error = NULL;
number = (int)strtol (str_count, &error, 10);
if (error && !error[0])
if (weechat_util_parse_int (str_count, 10, &number))
count = number;
}
timeout = 0;
if (str_timeout && str_timeout[0])
{
error = NULL;
number = (int)strtol (str_timeout, &error, 10);
if (error && !error[0])
if (weechat_util_parse_int (str_timeout, 10, &number))
timeout = number;
}
+5 -7
View File
@@ -109,7 +109,7 @@ irc_sasl_mechanism_scram (struct t_irc_server *server,
const char *sasl_password,
char **sasl_error)
{
char *answer_base64, *string, *username, *username2, *data, **attrs, *error;
char *answer_base64, *string, *username, *username2, *data, **attrs;
char nonce_client[18], nonce_client_base64[24 + 1], *nonce_server;
char *salt_base64, *salt, *verifier_base64, *verifier, *attr_error;
char *auth_no_proof, *auth_message;
@@ -117,10 +117,10 @@ irc_sasl_mechanism_scram (struct t_irc_server *server,
char client_signature[512 / 8], client_proof[512 / 8];
char client_proof_base64[((512 / 8) * 4) + 1], server_key[512 / 8];
char server_signature[512 / 8];
int i, rc, length, num_attrs, iterations, salt_size, salted_password_size;
int i, rc, length, num_attrs, iterations, number;
int salt_size, salted_password_size;
int client_key_size, stored_key_size, client_signature_size;
int server_key_size, server_signature_size, verifier_size;
long number;
if (!server || !hash_algo || !data_base64 || !sasl_username
|| !sasl_password)
@@ -202,10 +202,8 @@ irc_sasl_mechanism_scram (struct t_irc_server *server,
}
else if (strncmp (attrs[i], "i=", 2) == 0)
{
error = NULL;
number = strtol (attrs[i] + 2, &error, 10);
if (error && !error[0])
iterations = (int)number;
if (weechat_util_parse_int (attrs[i] + 2, 10, &number))
iterations = number;
}
else if (strncmp (attrs[i], "v=", 2) == 0)
{
+7 -17
View File
@@ -676,10 +676,9 @@ int
irc_server_set_addresses (struct t_irc_server *server, const char *addresses,
int tls)
{
int rc, i, default_port;
char *pos, *error, *addresses_eval;
int rc, i, default_port, number;
char *pos, *addresses_eval;
const char *ptr_addresses;
long number;
if (!server)
return 0;
@@ -753,19 +752,14 @@ irc_server_set_addresses (struct t_irc_server *server, const char *addresses,
server->addresses_count * sizeof (server->retry_array[0]));
for (i = 0; i < server->addresses_count; i++)
{
server->ports_array[i] = default_port;
pos = strchr (server->addresses_array[i], '/');
if (pos)
{
pos[0] = 0;
pos++;
error = NULL;
number = strtol (pos, &error, 10);
server->ports_array[i] = (error && !error[0]) ?
number : default_port;
}
else
{
server->ports_array[i] = default_port;
if (weechat_util_parse_int (pos, 10, &number))
server->ports_array[i] = number;
}
server->retry_array[i] = 0;
}
@@ -1518,18 +1512,14 @@ int
irc_server_get_max_modes (struct t_irc_server *server)
{
const char *support_modes;
char *error;
long number;
int max_modes;
int max_modes, number;
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])
if (weechat_util_parse_int (support_modes, 10, &number))
{
max_modes = number;
if (max_modes < 1)
+13 -24
View File
@@ -356,11 +356,10 @@ irc_upgrade_read_cb (const void *pointer, void *data,
int object_id,
struct t_infolist *infolist)
{
int flags, sock, size, i, index, nicks_count, num_items, utf8mapping;
long number;
int flags, sock, size, i, index, nicks_count, num_items, number, utf8mapping;
long long number_longlong;
time_t join_time;
char *buf, option_name[64], **nicks, *nick_join, *pos, *error;
char **items;
char *buf, option_name[64], **nicks, *nick_join, *pos, **items;
const char *buffer_name, *str, *nick;
struct t_irc_server *ptr_server;
struct t_irc_nick *ptr_nick;
@@ -521,10 +520,8 @@ irc_upgrade_read_cb (const void *pointer, void *data,
"LINELEN");
if (str)
{
error = NULL;
number = strtol (str, &error, 10);
if (error && !error[0])
irc_upgrade_current_server->msg_max_length = (int)number;
if (weechat_util_parse_int (str, 10, &number))
irc_upgrade_current_server->msg_max_length = number;
}
}
irc_upgrade_current_server->nick_max_length = weechat_infolist_integer (infolist, "nick_max_length");
@@ -540,10 +537,8 @@ irc_upgrade_read_cb (const void *pointer, void *data,
"USERLEN");
if (str)
{
error = NULL;
number = strtol (str, &error, 10);
if (error && !error[0])
irc_upgrade_current_server->user_max_length = (int)number;
if (weechat_util_parse_int (str, 10, &number))
irc_upgrade_current_server->user_max_length = number;
}
}
/* "host_max_length" is new in WeeChat 2.6 */
@@ -558,10 +553,8 @@ irc_upgrade_read_cb (const void *pointer, void *data,
"HOSTLEN");
if (str)
{
error = NULL;
number = strtol (str, &error, 10);
if (error && !error[0])
irc_upgrade_current_server->host_max_length = (int)number;
if (weechat_util_parse_int (str, 10, &number))
irc_upgrade_current_server->host_max_length = number;
}
}
irc_upgrade_current_server->casemapping = weechat_infolist_integer (infolist, "casemapping");
@@ -621,10 +614,8 @@ irc_upgrade_read_cb (const void *pointer, void *data,
"MONITOR");
if (str)
{
error = NULL;
number = strtol (str, &error, 10);
if (error && !error[0])
irc_upgrade_current_server->monitor = (int)number;
if (weechat_util_parse_int (str, 10, &number))
irc_upgrade_current_server->monitor = number;
}
}
/* "clienttagdeny" is new in WeeChat 3.3 */
@@ -771,11 +762,9 @@ irc_upgrade_read_cb (const void *pointer, void *data,
pos - nicks[i]);
if (nick_join)
{
error = NULL;
number = strtol (pos + 1, &error, 10);
if (error && !error[0])
if (weechat_util_parse_longlong (pos + 1, 10, &number_longlong))
{
join_time = (time_t)number;
join_time = (time_t)number_longlong;
irc_channel_join_smart_filtered_add (irc_upgrade_current_channel,
nick_join,
join_time);