scripts: fix return value of hook_infolist callback (pointer instead of string)
This commit is contained in:
parent
5ae557fa52
commit
41d63511b4
@ -37,6 +37,7 @@ Bug fixes::
|
||||
* php: fix return code of functions config_write_option and config_write_line
|
||||
* php: fix memory leak in 72 functions returning allocated strings
|
||||
* ruby: fix memory leak in 7 functions returning allocated strings
|
||||
* scripts: fix return value of hook_infolist callback (pointer instead of string)
|
||||
* scripts: return long integer instead of string in function infolist_time
|
||||
* xfer: set option TCP_NODELAY on socket when receiving a file via DCC (issue #1171)
|
||||
|
||||
|
@ -3001,7 +3001,7 @@ weechat_guile_api_hook_infolist_cb (const void *pointer, void *data,
|
||||
|
||||
result = (struct t_infolist *)weechat_guile_exec (
|
||||
script,
|
||||
WEECHAT_SCRIPT_EXEC_STRING,
|
||||
WEECHAT_SCRIPT_EXEC_POINTER,
|
||||
ptr_function,
|
||||
"ssss", func_argv);
|
||||
|
||||
|
@ -337,7 +337,7 @@ weechat_guile_exec (struct t_plugin_script *script,
|
||||
{
|
||||
struct t_plugin_script *old_guile_current_script;
|
||||
SCM rc, old_current_module;
|
||||
void *argv2[17], *ret_value;
|
||||
void *argv2[17], *ret_value, *ret_temp;
|
||||
int i, argc, *ret_int;
|
||||
|
||||
ret_value = NULL;
|
||||
@ -386,6 +386,21 @@ weechat_guile_exec (struct t_plugin_script *script,
|
||||
{
|
||||
ret_value = scm_to_locale_string (rc);
|
||||
}
|
||||
else if ((ret_type == WEECHAT_SCRIPT_EXEC_POINTER) && (scm_is_string (rc)))
|
||||
{
|
||||
ret_temp = scm_to_locale_string (rc);
|
||||
if (ret_temp)
|
||||
{
|
||||
ret_value = plugin_script_str2ptr (weechat_guile_plugin,
|
||||
script->name, function,
|
||||
ret_temp);
|
||||
free (ret_temp);
|
||||
}
|
||||
else
|
||||
{
|
||||
ret_value = NULL;
|
||||
}
|
||||
}
|
||||
else if ((ret_type == WEECHAT_SCRIPT_EXEC_INT) && (scm_is_integer (rc)))
|
||||
{
|
||||
ret_int = malloc (sizeof (*ret_int));
|
||||
|
@ -2909,7 +2909,7 @@ weechat_js_api_hook_infolist_cb (const void *pointer, void *data,
|
||||
|
||||
result = (struct t_infolist *)weechat_js_exec (
|
||||
script,
|
||||
WEECHAT_SCRIPT_EXEC_STRING,
|
||||
WEECHAT_SCRIPT_EXEC_POINTER,
|
||||
ptr_function,
|
||||
"ssss", func_argv);
|
||||
|
||||
|
@ -231,6 +231,20 @@ weechat_js_exec (struct t_plugin_script *script,
|
||||
v8::String::Utf8Value temp_str(ret_js);
|
||||
ret_value = (*temp_str) ? strdup(*temp_str) : NULL;
|
||||
}
|
||||
else if ((ret_type == WEECHAT_SCRIPT_EXEC_POINTER) && (ret_js->IsString()))
|
||||
{
|
||||
v8::String::Utf8Value temp_str(ret_js);
|
||||
if (*temp_str)
|
||||
{
|
||||
ret_value = plugin_script_str2ptr (weechat_js_plugin,
|
||||
script->name, function,
|
||||
*temp_str);
|
||||
}
|
||||
else
|
||||
{
|
||||
ret_value = NULL;
|
||||
}
|
||||
}
|
||||
else if ((ret_type == WEECHAT_SCRIPT_EXEC_INT) && (ret_js->IsInt32()))
|
||||
{
|
||||
ret_int = (int *)malloc (sizeof (*ret_int));
|
||||
|
@ -3124,7 +3124,7 @@ weechat_lua_api_hook_infolist_cb (const void *pointer, void *data,
|
||||
|
||||
result = (struct t_infolist *)weechat_lua_exec (
|
||||
script,
|
||||
WEECHAT_SCRIPT_EXEC_STRING,
|
||||
WEECHAT_SCRIPT_EXEC_POINTER,
|
||||
ptr_function,
|
||||
"ssss", func_argv);
|
||||
|
||||
|
@ -346,6 +346,24 @@ weechat_lua_exec (struct t_plugin_script *script, int ret_type,
|
||||
function);
|
||||
}
|
||||
}
|
||||
else if (ret_type == WEECHAT_SCRIPT_EXEC_POINTER)
|
||||
{
|
||||
ret_value = (char *) lua_tostring (lua_current_interpreter, -1);
|
||||
if (ret_value)
|
||||
{
|
||||
ret_value = plugin_script_str2ptr (weechat_lua_plugin,
|
||||
script->name, function,
|
||||
ret_value);
|
||||
}
|
||||
else
|
||||
{
|
||||
weechat_printf (NULL,
|
||||
weechat_gettext ("%s%s: function \"%s\" must "
|
||||
"return a valid value"),
|
||||
weechat_prefix ("error"), LUA_PLUGIN_NAME,
|
||||
function);
|
||||
}
|
||||
}
|
||||
else if (ret_type == WEECHAT_SCRIPT_EXEC_INT)
|
||||
{
|
||||
ret_i = malloc (sizeof (*ret_i));
|
||||
|
@ -3050,7 +3050,7 @@ weechat_perl_api_hook_infolist_cb (const void *pointer, void *data,
|
||||
|
||||
result = (struct t_infolist *)weechat_perl_exec (
|
||||
script,
|
||||
WEECHAT_SCRIPT_EXEC_STRING,
|
||||
WEECHAT_SCRIPT_EXEC_POINTER,
|
||||
ptr_function,
|
||||
"ssss", func_argv);
|
||||
|
||||
|
@ -413,6 +413,14 @@ weechat_perl_exec (struct t_plugin_script *script,
|
||||
ret_value = strdup (SvPV_nolen (ret_s));
|
||||
SvREFCNT_dec (ret_s);
|
||||
}
|
||||
else if (ret_type == WEECHAT_SCRIPT_EXEC_POINTER)
|
||||
{
|
||||
ret_s = newSVsv (POPs);
|
||||
ret_value = plugin_script_str2ptr (weechat_perl_plugin,
|
||||
script->name, function,
|
||||
SvPV_nolen (ret_s));
|
||||
SvREFCNT_dec (ret_s);
|
||||
}
|
||||
else if (ret_type == WEECHAT_SCRIPT_EXEC_INT)
|
||||
{
|
||||
ret_i = malloc (sizeof (*ret_i));
|
||||
|
@ -2930,7 +2930,7 @@ weechat_php_api_hook_infolist_cb (const void *pointer, void *data,
|
||||
func_argv[3] = (arguments) ? (char *)arguments : weechat_php_empty_arg;
|
||||
|
||||
weechat_php_cb (pointer, data, func_argv, "ssss",
|
||||
WEECHAT_SCRIPT_EXEC_STRING, &rc);
|
||||
WEECHAT_SCRIPT_EXEC_POINTER, &rc);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
@ -589,6 +589,13 @@ weechat_php_exec (struct t_plugin_script *script, int ret_type,
|
||||
convert_to_string (&zretval);
|
||||
ret_value = strdup ((char *)Z_STRVAL(zretval));
|
||||
}
|
||||
else if (ret_type == WEECHAT_SCRIPT_EXEC_POINTER)
|
||||
{
|
||||
convert_to_string (&zretval);
|
||||
ret_value = plugin_script_str2ptr (weechat_php_plugin,
|
||||
script->name, function,
|
||||
(char *)Z_STRVAL(zretval));
|
||||
}
|
||||
else if (ret_type == WEECHAT_SCRIPT_EXEC_INT)
|
||||
{
|
||||
convert_to_long (&zretval);
|
||||
|
@ -26,6 +26,7 @@ enum t_weechat_script_exec_type
|
||||
{
|
||||
WEECHAT_SCRIPT_EXEC_INT = 0,
|
||||
WEECHAT_SCRIPT_EXEC_STRING,
|
||||
WEECHAT_SCRIPT_EXEC_POINTER,
|
||||
WEECHAT_SCRIPT_EXEC_HASHTABLE,
|
||||
WEECHAT_SCRIPT_EXEC_IGNORE,
|
||||
};
|
||||
|
@ -3086,7 +3086,7 @@ weechat_python_api_hook_infolist_cb (const void *pointer, void *data,
|
||||
|
||||
result = (struct t_infolist *)weechat_python_exec (
|
||||
script,
|
||||
WEECHAT_SCRIPT_EXEC_STRING,
|
||||
WEECHAT_SCRIPT_EXEC_POINTER,
|
||||
ptr_function,
|
||||
"ssss", func_argv);
|
||||
|
||||
|
@ -440,7 +440,7 @@ weechat_python_exec (struct t_plugin_script *script,
|
||||
struct t_plugin_script *old_python_current_script;
|
||||
PyThreadState *old_interpreter;
|
||||
PyObject *evMain, *evDict, *evFunc, *rc;
|
||||
void *argv2[16], *ret_value;
|
||||
void *argv2[16], *ret_value, *ret_temp;
|
||||
int i, argc, *ret_int;
|
||||
|
||||
ret_value = NULL;
|
||||
@ -518,6 +518,36 @@ weechat_python_exec (struct t_plugin_script *script,
|
||||
ret_value = NULL;
|
||||
Py_XDECREF(rc);
|
||||
}
|
||||
else if ((ret_type == WEECHAT_SCRIPT_EXEC_POINTER) && (PyUnicode_Check (rc)))
|
||||
{
|
||||
ret_temp = weechat_python_unicode_to_string (rc);
|
||||
if (ret_temp)
|
||||
{
|
||||
ret_value = plugin_script_str2ptr (weechat_python_plugin,
|
||||
script->name, function,
|
||||
ret_temp);
|
||||
free (ret_temp);
|
||||
}
|
||||
else
|
||||
{
|
||||
ret_value = NULL;
|
||||
}
|
||||
Py_XDECREF(rc);
|
||||
}
|
||||
else if ((ret_type == WEECHAT_SCRIPT_EXEC_POINTER) && (PyBytes_Check (rc)))
|
||||
{
|
||||
if (PyBytes_AsString (rc))
|
||||
{
|
||||
ret_value = plugin_script_str2ptr (weechat_python_plugin,
|
||||
script->name, function,
|
||||
PyBytes_AsString (rc));
|
||||
}
|
||||
else
|
||||
{
|
||||
ret_value = NULL;
|
||||
}
|
||||
Py_XDECREF(rc);
|
||||
}
|
||||
else if ((ret_type == WEECHAT_SCRIPT_EXEC_INT) && (PY_INTEGER_CHECK(rc)))
|
||||
{
|
||||
ret_int = malloc (sizeof (*ret_int));
|
||||
|
@ -3667,7 +3667,7 @@ weechat_ruby_api_hook_infolist_cb (const void *pointer, void *data,
|
||||
|
||||
result = (struct t_infolist *)weechat_ruby_exec (
|
||||
script,
|
||||
WEECHAT_SCRIPT_EXEC_STRING,
|
||||
WEECHAT_SCRIPT_EXEC_POINTER,
|
||||
ptr_function,
|
||||
"ssss", func_argv);
|
||||
|
||||
|
@ -527,6 +527,19 @@ weechat_ruby_exec (struct t_plugin_script *script,
|
||||
else
|
||||
ret_value = NULL;
|
||||
}
|
||||
else if ((TYPE(rc) == T_STRING) && (ret_type == WEECHAT_SCRIPT_EXEC_POINTER))
|
||||
{
|
||||
if (StringValuePtr (rc))
|
||||
{
|
||||
ret_value = plugin_script_str2ptr (weechat_ruby_plugin,
|
||||
script->name, function,
|
||||
StringValuePtr (rc));
|
||||
}
|
||||
else
|
||||
{
|
||||
ret_value = NULL;
|
||||
}
|
||||
}
|
||||
else if ((TYPE(rc) == T_FIXNUM) && (ret_type == WEECHAT_SCRIPT_EXEC_INT))
|
||||
{
|
||||
ret_i = malloc (sizeof (*ret_i));
|
||||
|
@ -3343,7 +3343,7 @@ weechat_tcl_api_hook_infolist_cb (const void *pointer, void *data,
|
||||
|
||||
result = (struct t_infolist *)weechat_tcl_exec (
|
||||
script,
|
||||
WEECHAT_SCRIPT_EXEC_STRING,
|
||||
WEECHAT_SCRIPT_EXEC_POINTER,
|
||||
ptr_function,
|
||||
"ssss", func_argv);
|
||||
|
||||
|
@ -263,6 +263,18 @@ weechat_tcl_exec (struct t_plugin_script *script,
|
||||
else
|
||||
ret_val = NULL;
|
||||
}
|
||||
else if (ret_type == WEECHAT_SCRIPT_EXEC_POINTER)
|
||||
{
|
||||
ret_cv = Tcl_GetStringFromObj (Tcl_GetObjResult (interp), &i);
|
||||
if (ret_cv)
|
||||
{
|
||||
ret_val = plugin_script_str2ptr (weechat_tcl_plugin,
|
||||
script->name, function,
|
||||
ret_cv);
|
||||
}
|
||||
else
|
||||
ret_val = NULL;
|
||||
}
|
||||
else if ( ret_type == WEECHAT_SCRIPT_EXEC_INT
|
||||
&& Tcl_GetIntFromObj (interp, Tcl_GetObjResult (interp), &i) == TCL_OK)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user