summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSébastien Helleu <flashcode@flashtux.org>2018-07-25 20:19:26 +0200
committerSébastien Helleu <flashcode@flashtux.org>2018-07-25 20:19:26 +0200
commitb7d6be593634c51d62c8041e32d888484b580ff6 (patch)
treeb235e51a72b702586305bcdd09a2487cdfa05edf /src
parentdf27a3b76af05df15e4f855fc19b73afa839c338 (diff)
downloadweechat-b7d6be593634c51d62c8041e32d888484b580ff6.zip
scripts: fix duplicated lines in output of script eval (python, perl, ruby, lua and guile)
When there was a call to a hook callback during the eval, the output buffer was cleared too late, and displayed multiple times in the buffer. This commit clears the buffer even before we display it (this display can trigger a hook callback).
Diffstat (limited to 'src')
-rw-r--r--src/plugins/guile/weechat-guile.c32
-rw-r--r--src/plugins/lua/weechat-lua.c32
-rw-r--r--src/plugins/perl/weechat-perl.c32
-rw-r--r--src/plugins/python/weechat-python.c32
-rw-r--r--src/plugins/ruby/weechat-ruby.c32
5 files changed, 95 insertions, 65 deletions
diff --git a/src/plugins/guile/weechat-guile.c b/src/plugins/guile/weechat-guile.c
index 52f0c8631..7f4481489 100644
--- a/src/plugins/guile/weechat-guile.c
+++ b/src/plugins/guile/weechat-guile.c
@@ -118,36 +118,42 @@ void
weechat_guile_output_flush ()
{
const char *ptr_command;
- char *command;
+ char *temp_buffer, *command;
int length;
if (!*guile_buffer_output[0])
return;
+ /* if there's no buffer, we catch the output, so there's no flush */
+ if (guile_eval_mode && !guile_eval_buffer)
+ return;
+
+ temp_buffer = strdup (*guile_buffer_output);
+ if (!temp_buffer)
+ return;
+
+ weechat_string_dyn_copy (guile_buffer_output, NULL);
+
if (guile_eval_mode)
{
- /* if there's no buffer, we catch the output, so there's no flush */
- if (!guile_eval_buffer)
- return;
-
if (guile_eval_send_input)
{
if (guile_eval_exec_commands)
- ptr_command = *guile_buffer_output;
+ ptr_command = temp_buffer;
else
- ptr_command = weechat_string_input_for_buffer (*guile_buffer_output);
+ ptr_command = weechat_string_input_for_buffer (temp_buffer);
if (ptr_command)
{
- weechat_command (guile_eval_buffer, *guile_buffer_output);
+ weechat_command (guile_eval_buffer, temp_buffer);
}
else
{
- length = 1 + strlen (*guile_buffer_output) + 1;
+ length = 1 + strlen (temp_buffer) + 1;
command = malloc (length);
if (command)
{
snprintf (command, length, "%c%s",
- *guile_buffer_output[0], *guile_buffer_output);
+ temp_buffer[0], temp_buffer);
weechat_command (guile_eval_buffer,
(command[0]) ? command : " ");
free (command);
@@ -156,7 +162,7 @@ weechat_guile_output_flush ()
}
else
{
- weechat_printf (guile_eval_buffer, "%s", *guile_buffer_output);
+ weechat_printf (guile_eval_buffer, "%s", temp_buffer);
}
}
else
@@ -167,10 +173,10 @@ weechat_guile_output_flush ()
weechat_gettext ("%s: stdout/stderr (%s): %s"),
GUILE_PLUGIN_NAME,
(guile_current_script) ? guile_current_script->name : "?",
- *guile_buffer_output);
+ temp_buffer);
}
- weechat_string_dyn_copy (guile_buffer_output, NULL);
+ free (temp_buffer);
}
/*
diff --git a/src/plugins/lua/weechat-lua.c b/src/plugins/lua/weechat-lua.c
index 124ccbdab..b3e5b3c28 100644
--- a/src/plugins/lua/weechat-lua.c
+++ b/src/plugins/lua/weechat-lua.c
@@ -190,36 +190,42 @@ void
weechat_lua_output_flush ()
{
const char *ptr_command;
- char *command;
+ char *temp_buffer, *command;
int length;
if (!*lua_buffer_output[0])
return;
+ /* if there's no buffer, we catch the output, so there's no flush */
+ if (lua_eval_mode && !lua_eval_buffer)
+ return;
+
+ temp_buffer = strdup (*lua_buffer_output);
+ if (!temp_buffer)
+ return;
+
+ weechat_string_dyn_copy (lua_buffer_output, NULL);
+
if (lua_eval_mode)
{
- /* if there's no buffer, we catch the output, so there's no flush */
- if (!lua_eval_buffer)
- return;
-
if (lua_eval_send_input)
{
if (lua_eval_exec_commands)
- ptr_command = *lua_buffer_output;
+ ptr_command = temp_buffer;
else
- ptr_command = weechat_string_input_for_buffer (*lua_buffer_output);
+ ptr_command = weechat_string_input_for_buffer (temp_buffer);
if (ptr_command)
{
- weechat_command (lua_eval_buffer, *lua_buffer_output);
+ weechat_command (lua_eval_buffer, temp_buffer);
}
else
{
- length = 1 + strlen (*lua_buffer_output) + 1;
+ length = 1 + strlen (temp_buffer) + 1;
command = malloc (length);
if (command)
{
snprintf (command, length, "%c%s",
- *lua_buffer_output[0], *lua_buffer_output);
+ temp_buffer[0], temp_buffer);
weechat_command (lua_eval_buffer,
(command[0]) ? command : " ");
free (command);
@@ -228,7 +234,7 @@ weechat_lua_output_flush ()
}
else
{
- weechat_printf (lua_eval_buffer, "%s", *lua_buffer_output);
+ weechat_printf (lua_eval_buffer, "%s", temp_buffer);
}
}
else
@@ -239,10 +245,10 @@ weechat_lua_output_flush ()
weechat_gettext ("%s: stdout/stderr (%s): %s"),
LUA_PLUGIN_NAME,
(lua_current_script) ? lua_current_script->name : "?",
- *lua_buffer_output);
+ temp_buffer);
}
- weechat_string_dyn_copy (lua_buffer_output, NULL);
+ free (temp_buffer);
}
/*
diff --git a/src/plugins/perl/weechat-perl.c b/src/plugins/perl/weechat-perl.c
index 846a0ae6f..e06603165 100644
--- a/src/plugins/perl/weechat-perl.c
+++ b/src/plugins/perl/weechat-perl.c
@@ -226,36 +226,42 @@ void
weechat_perl_output_flush ()
{
const char *ptr_command;
- char *command;
+ char *temp_buffer, *command;
int length;
if (!*perl_buffer_output[0])
return;
+ /* if there's no buffer, we catch the output, so there's no flush */
+ if (perl_eval_mode && !perl_eval_buffer)
+ return;
+
+ temp_buffer = strdup (*perl_buffer_output);
+ if (!temp_buffer)
+ return;
+
+ weechat_string_dyn_copy (perl_buffer_output, NULL);
+
if (perl_eval_mode)
{
- /* if there's no buffer, we catch the output, so there's no flush */
- if (!perl_eval_buffer)
- return;
-
if (perl_eval_send_input)
{
if (perl_eval_exec_commands)
- ptr_command = *perl_buffer_output;
+ ptr_command = temp_buffer;
else
- ptr_command = weechat_string_input_for_buffer (*perl_buffer_output);
+ ptr_command = weechat_string_input_for_buffer (temp_buffer);
if (ptr_command)
{
- weechat_command (perl_eval_buffer, *perl_buffer_output);
+ weechat_command (perl_eval_buffer, temp_buffer);
}
else
{
- length = 1 + strlen (*perl_buffer_output) + 1;
+ length = 1 + strlen (temp_buffer) + 1;
command = malloc (length);
if (command)
{
snprintf (command, length, "%c%s",
- *perl_buffer_output[0], *perl_buffer_output);
+ temp_buffer[0], temp_buffer);
weechat_command (perl_eval_buffer,
(command[0]) ? command : " ");
free (command);
@@ -264,7 +270,7 @@ weechat_perl_output_flush ()
}
else
{
- weechat_printf (perl_eval_buffer, "%s", *perl_buffer_output);
+ weechat_printf (perl_eval_buffer, "%s", temp_buffer);
}
}
else
@@ -275,10 +281,10 @@ weechat_perl_output_flush ()
weechat_gettext ("%s: stdout/stderr (%s): %s"),
PERL_PLUGIN_NAME,
(perl_current_script) ? perl_current_script->name : "?",
- *perl_buffer_output);
+ temp_buffer);
}
- weechat_string_dyn_copy (perl_buffer_output, NULL);
+ free (temp_buffer);
}
/*
diff --git a/src/plugins/python/weechat-python.c b/src/plugins/python/weechat-python.c
index 8ae89da93..7469ffb77 100644
--- a/src/plugins/python/weechat-python.c
+++ b/src/plugins/python/weechat-python.c
@@ -337,36 +337,42 @@ void
weechat_python_output_flush ()
{
const char *ptr_command;
- char *command;
+ char *temp_buffer, *command;
int length;
if (!*python_buffer_output[0])
return;
+ /* if there's no buffer, we catch the output, so there's no flush */
+ if (python_eval_mode && !python_eval_buffer)
+ return;
+
+ temp_buffer = strdup (*python_buffer_output);
+ if (!temp_buffer)
+ return;
+
+ weechat_string_dyn_copy (python_buffer_output, NULL);
+
if (python_eval_mode)
{
- /* if there's no buffer, we catch the output, so there's no flush */
- if (!python_eval_buffer)
- return;
-
if (python_eval_send_input)
{
if (python_eval_exec_commands)
- ptr_command = *python_buffer_output;
+ ptr_command = temp_buffer;
else
- ptr_command = weechat_string_input_for_buffer (*python_buffer_output);
+ ptr_command = weechat_string_input_for_buffer (temp_buffer);
if (ptr_command)
{
- weechat_command (python_eval_buffer, *python_buffer_output);
+ weechat_command (python_eval_buffer, temp_buffer);
}
else
{
- length = 1 + strlen (*python_buffer_output) + 1;
+ length = 1 + strlen (temp_buffer) + 1;
command = malloc (length);
if (command)
{
snprintf (command, length, "%c%s",
- *python_buffer_output[0], *python_buffer_output);
+ temp_buffer[0], temp_buffer);
weechat_command (python_eval_buffer,
(command[0]) ? command : " ");
free (command);
@@ -375,7 +381,7 @@ weechat_python_output_flush ()
}
else
{
- weechat_printf (python_eval_buffer, "%s", *python_buffer_output);
+ weechat_printf (python_eval_buffer, "%s", temp_buffer);
}
}
else
@@ -386,10 +392,10 @@ weechat_python_output_flush ()
weechat_gettext ("%s: stdout/stderr (%s): %s"),
PYTHON_PLUGIN_NAME,
(python_current_script) ? python_current_script->name : "?",
- *python_buffer_output);
+ temp_buffer);
}
- weechat_string_dyn_copy (python_buffer_output, NULL);
+ free (temp_buffer);
}
/*
diff --git a/src/plugins/ruby/weechat-ruby.c b/src/plugins/ruby/weechat-ruby.c
index 09aa122d5..39b3e55d2 100644
--- a/src/plugins/ruby/weechat-ruby.c
+++ b/src/plugins/ruby/weechat-ruby.c
@@ -362,36 +362,42 @@ void
weechat_ruby_output_flush ()
{
const char *ptr_command;
- char *command;
+ char *temp_buffer, *command;
int length;
if (!*ruby_buffer_output[0])
return;
+ /* if there's no buffer, we catch the output, so there's no flush */
+ if (ruby_eval_mode && !ruby_eval_buffer)
+ return;
+
+ temp_buffer = strdup (*ruby_buffer_output);
+ if (!temp_buffer)
+ return;
+
+ weechat_string_dyn_copy (ruby_buffer_output, NULL);
+
if (ruby_eval_mode)
{
- /* if there's no buffer, we catch the output, so there's no flush */
- if (!ruby_eval_buffer)
- return;
-
if (ruby_eval_send_input)
{
if (ruby_eval_exec_commands)
- ptr_command = *ruby_buffer_output;
+ ptr_command = temp_buffer;
else
- ptr_command = weechat_string_input_for_buffer (*ruby_buffer_output);
+ ptr_command = weechat_string_input_for_buffer (temp_buffer);
if (ptr_command)
{
- weechat_command (ruby_eval_buffer, *ruby_buffer_output);
+ weechat_command (ruby_eval_buffer, temp_buffer);
}
else
{
- length = 1 + strlen (*ruby_buffer_output) + 1;
+ length = 1 + strlen (temp_buffer) + 1;
command = malloc (length);
if (command)
{
snprintf (command, length, "%c%s",
- *ruby_buffer_output[0], *ruby_buffer_output);
+ temp_buffer[0], temp_buffer);
weechat_command (ruby_eval_buffer,
(command[0]) ? command : " ");
free (command);
@@ -400,7 +406,7 @@ weechat_ruby_output_flush ()
}
else
{
- weechat_printf (ruby_eval_buffer, "%s", *ruby_buffer_output);
+ weechat_printf (ruby_eval_buffer, "%s", temp_buffer);
}
}
else
@@ -411,10 +417,10 @@ weechat_ruby_output_flush ()
weechat_gettext ("%s: stdout/stderr (%s): %s"),
RUBY_PLUGIN_NAME,
(ruby_current_script) ? ruby_current_script->name : "?",
- *ruby_buffer_output);
+ temp_buffer);
}
- weechat_string_dyn_copy (ruby_buffer_output, NULL);
+ free (temp_buffer);
}
/*