summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog.adoc1
-rw-r--r--src/plugins/irc/irc-server.c53
2 files changed, 29 insertions, 25 deletions
diff --git a/ChangeLog.adoc b/ChangeLog.adoc
index 12d24d101..9256a7f8a 100644
--- a/ChangeLog.adoc
+++ b/ChangeLog.adoc
@@ -33,6 +33,7 @@ Bug fixes::
* core: fix memory leak in completion
* core: flush stdout/stderr before forking in hook_process function (issue #1441)
* core: fix evaluation of condition with nested "if" (issue #1434)
+ * irc: copy temporary server flag in command /server copy
* irc: add nick changes in the hotlist (except self nick change)
* irc: case-insensitive comparison on incoming CTCP command, force upper case on CTCP replies (issue #1439)
* irc: fix memory leak when the channel topic is changed
diff --git a/src/plugins/irc/irc-server.c b/src/plugins/irc/irc-server.c
index cd6c100d7..436b53c22 100644
--- a/src/plugins/irc/irc-server.c
+++ b/src/plugins/irc/irc-server.c
@@ -2024,40 +2024,43 @@ irc_server_copy (struct t_irc_server *server, const char *new_name)
return NULL;
new_server = irc_server_alloc (new_name);
- if (new_server)
+ if (!new_server)
+ return NULL;
+
+ /* duplicate temporary server flag */
+ new_server->temp_server = server->temp_server;
+
+ /* duplicate options */
+ length = 32 + strlen (server->name) + 1;
+ mask = malloc (length);
+ if (!mask)
+ return 0;
+ snprintf (mask, length, "irc.server.%s.*", server->name);
+ infolist = weechat_infolist_get ("option", NULL, mask);
+ free (mask);
+ if (infolist)
{
- /* duplicate options */
- length = 32 + strlen (server->name) + 1;
- mask = malloc (length);
- if (!mask)
- return 0;
- snprintf (mask, length, "irc.server.%s.*", server->name);
- infolist = weechat_infolist_get ("option", NULL, mask);
- free (mask);
- if (infolist)
+ while (weechat_infolist_next (infolist))
{
- while (weechat_infolist_next (infolist))
+ if (!weechat_infolist_integer (infolist, "value_is_null"))
{
- if (!weechat_infolist_integer (infolist, "value_is_null"))
+ option_name = weechat_infolist_string (infolist,
+ "option_name");
+ pos = strrchr (option_name, '.');
+ if (pos)
{
- option_name = weechat_infolist_string (infolist,
- "option_name");
- pos = strrchr (option_name, '.');
- if (pos)
+ index_option = irc_server_search_option (pos + 1);
+ if (index_option >= 0)
{
- index_option = irc_server_search_option (pos + 1);
- if (index_option >= 0)
- {
- weechat_config_option_set (
- new_server->options[index_option],
- weechat_infolist_string (infolist, "value"),
- 1);
- }
+ weechat_config_option_set (
+ new_server->options[index_option],
+ weechat_infolist_string (infolist, "value"),
+ 1);
}
}
}
- weechat_infolist_free (infolist);
}
+ weechat_infolist_free (infolist);
}
return new_server;