1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-04 08:43:13 +02:00

irc: do not allow the creation of two servers with same name but different case (fix error when writing file irc.conf) (bug #35840)

This commit is contained in:
Sebastien Helleu
2012-03-17 10:14:25 +01:00
parent 89349e6f9a
commit b69e82cb94
4 changed files with 64 additions and 34 deletions
+3 -1
View File
@@ -1,7 +1,7 @@
WeeChat ChangeLog
=================
Sébastien Helleu <flashcode@flashtux.org>
v0.3.8-dev, 2012-03-15
v0.3.8-dev, 2012-03-17
Version 0.3.8 (under dev!)
@@ -15,6 +15,8 @@ Version 0.3.8 (under dev!)
(task #11316)
* core: fix display of wide chars on last column of chat area (patch #7733)
* api: add list "gui_buffer_last_displayed" in hdata "buffer"
* irc: do not allow the creation of two servers with same name but different
case (fix error when writing file irc.conf) (bug #35840)
* irc: update away flag for nicks on manual /who
* irc: display privmsg messages to "@#channel" and "+#channel" in channel buffer
(bug #35331)
+9 -6
View File
@@ -3809,13 +3809,14 @@ irc_command_server (void *data, struct t_gui_buffer *buffer, int argc,
{
IRC_COMMAND_TOO_FEW_ARGUMENTS(NULL, "server add");
}
if (irc_server_search (argv[2]))
ptr_server2 = irc_server_casesearch (argv[2]);
if (ptr_server2)
{
weechat_printf (NULL,
_("%s%s: server \"%s\" already exists, "
"can't create it!"),
weechat_prefix ("error"), IRC_PLUGIN_NAME,
argv[2]);
ptr_server2->name);
return WEECHAT_RC_OK;
}
if (argv[2][0] == '#')
@@ -3875,13 +3876,14 @@ irc_command_server (void *data, struct t_gui_buffer *buffer, int argc,
}
/* check if target name already exists */
if (irc_server_search (argv[3]))
ptr_server2 = irc_server_casesearch (argv[3]);
if (ptr_server2)
{
weechat_printf (NULL,
_("%s%s: server \"%s\" already exists for "
"\"%s\" command"),
weechat_prefix ("error"), IRC_PLUGIN_NAME,
argv[3], "server copy");
ptr_server2->name, "server copy");
return WEECHAT_RC_OK;
}
@@ -3925,13 +3927,14 @@ irc_command_server (void *data, struct t_gui_buffer *buffer, int argc,
}
/* check if target name already exists */
if (irc_server_search (argv[3]))
ptr_server2 = irc_server_casesearch (argv[3]);
if (ptr_server2)
{
weechat_printf (NULL,
_("%s%s: server \"%s\" already exists for "
"\"%s\" command"),
weechat_prefix ("error"), IRC_PLUGIN_NAME,
argv[3], "server rename");
ptr_server2->name, "server rename");
return WEECHAT_RC_OK;
}
+50 -26
View File
@@ -136,6 +136,53 @@ irc_server_valid (struct t_irc_server *server)
return 0;
}
/*
* irc_server_search: return pointer on a server with a name
*/
struct t_irc_server *
irc_server_search (const char *server_name)
{
struct t_irc_server *ptr_server;
if (!server_name)
return NULL;
for (ptr_server = irc_servers; ptr_server;
ptr_server = ptr_server->next_server)
{
if (strcmp (ptr_server->name, server_name) == 0)
return ptr_server;
}
/* server not found */
return NULL;
}
/*
* irc_server_casesearch: return pointer on a server with a name
* (case insensitive search)
*/
struct t_irc_server *
irc_server_casesearch (const char *server_name)
{
struct t_irc_server *ptr_server;
if (!server_name)
return NULL;
for (ptr_server = irc_servers; ptr_server;
ptr_server = ptr_server->next_server)
{
if (weechat_strcasecmp (ptr_server->name, server_name) == 0)
return ptr_server;
}
/* server not found */
return NULL;
}
/*
* irc_server_search_option: search a server option name
* return index of option in array
@@ -674,7 +721,7 @@ irc_server_alloc (const char *name)
int i, length;
char *option_name;
if (irc_server_search (name))
if (irc_server_casesearch (name))
return NULL;
/* alloc memory for new server */
@@ -1278,7 +1325,7 @@ irc_server_copy (struct t_irc_server *server, const char *new_name)
int length, index_option;
/* check if another server exists with this name */
if (irc_server_search (new_name))
if (irc_server_casesearch (new_name))
return NULL;
new_server = irc_server_alloc (new_name);
@@ -1336,7 +1383,7 @@ irc_server_rename (struct t_irc_server *server, const char *new_server_name)
struct t_irc_channel *ptr_channel;
/* check if another server exists with this name */
if (irc_server_search (new_server_name))
if (irc_server_casesearch (new_server_name))
return 0;
/* rename options */
@@ -3812,29 +3859,6 @@ irc_server_autojoin_channels (struct t_irc_server *server)
server->disable_autojoin = 0;
}
/*
* irc_server_search: return pointer on a server with a name
*/
struct t_irc_server *
irc_server_search (const char *server_name)
{
struct t_irc_server *ptr_server;
if (!server_name)
return NULL;
for (ptr_server = irc_servers; ptr_server;
ptr_server = ptr_server->next_server)
{
if (strcmp (ptr_server->name, server_name) == 0)
return ptr_server;
}
/* server not found */
return NULL;
}
/*
* irc_server_get_number_connected: returns number of connected server
*/
+2 -1
View File
@@ -220,6 +220,8 @@ extern char *irc_server_option_string[];
extern char *irc_server_option_default[];
extern int irc_server_valid (struct t_irc_server *server);
extern struct t_irc_server *irc_server_search (const char *server_name);
extern struct t_irc_server *irc_server_casesearch (const char *server_name);
extern int irc_server_search_option (const char *option_name);
extern int irc_server_search_casemapping (const char *casemapping);
extern int irc_server_strcasecmp (struct t_irc_server *server,
@@ -265,7 +267,6 @@ extern struct t_hashtable *irc_server_sendf (struct t_irc_server *server,
int flags,
const char *tags,
const char *format, ...);
extern struct t_irc_server *irc_server_search (const char *server_name);
extern void irc_server_set_buffer_title (struct t_irc_server *server);
extern struct t_gui_buffer *irc_server_create_buffer (struct t_irc_server *server);
extern int irc_server_connect (struct t_irc_server *server);