diff --git a/ChangeLog b/ChangeLog index af769386a..5f1b3ed92 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,7 @@ WeeChat ChangeLog ================= Sébastien Helleu -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) diff --git a/src/plugins/irc/irc-command.c b/src/plugins/irc/irc-command.c index 1c85c27bc..a26f7729c 100644 --- a/src/plugins/irc/irc-command.c +++ b/src/plugins/irc/irc-command.c @@ -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; } diff --git a/src/plugins/irc/irc-server.c b/src/plugins/irc/irc-server.c index 04f7b3752..ac523fe8a 100644 --- a/src/plugins/irc/irc-server.c +++ b/src/plugins/irc/irc-server.c @@ -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 */ diff --git a/src/plugins/irc/irc-server.h b/src/plugins/irc/irc-server.h index af5d6d1bb..8f8c4b3a2 100644 --- a/src/plugins/irc/irc-server.h +++ b/src/plugins/irc/irc-server.h @@ -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);