From 56dbd871ea5fb4a1aa27f74eba8907f0a962db7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Helleu?= Date: Sat, 15 Oct 2022 21:46:00 +0200 Subject: [PATCH] api: do not expect any return value in callbacks change/delete of config_new_option (scripting API) --- ChangeLog.adoc | 1 + ReleaseNotes.adoc | 10 +++++++ src/plugins/guile/weechat-guile-api.c | 22 +++++++--------- src/plugins/javascript/weechat-js-api.cpp | 22 +++++++--------- src/plugins/lua/weechat-lua-api.c | 22 +++++++--------- src/plugins/perl/weechat-perl-api.c | 22 +++++++--------- src/plugins/php/weechat-php-api.c | 32 +++++++++++++++-------- src/plugins/python/weechat-python-api.c | 22 +++++++--------- src/plugins/ruby/weechat-ruby-api.c | 22 +++++++--------- src/plugins/tcl/weechat-tcl-api.c | 22 +++++++--------- tests/scripts/python/testapi.py | 4 +-- tests/scripts/python/unparse.py | 2 +- 12 files changed, 105 insertions(+), 98 deletions(-) diff --git a/ChangeLog.adoc b/ChangeLog.adoc index 063189bb8..236c3771d 100644 --- a/ChangeLog.adoc +++ b/ChangeLog.adoc @@ -26,6 +26,7 @@ Bug fixes:: * core: fix context info in buffers with free content (issue #1832) * core: keep terminal title unchanged when option weechat.look.window_title is set to empty value (issue #1835, issue #1836) + * api: do not expect any return value in callbacks "callback_change" and "callback_delete" of function config_new_option (scripting API) * irc: escape backslashes in raw buffer (issue #1838) Tests:: diff --git a/ReleaseNotes.adoc b/ReleaseNotes.adoc index 61c1f3490..d347ba29c 100644 --- a/ReleaseNotes.adoc +++ b/ReleaseNotes.adoc @@ -17,6 +17,16 @@ https://weechat.org/files/changelog/ChangeLog-devel.html[ChangeLog] (file _ChangeLog.adoc_ in sources). +[[v3.8]] +== Version 3.8 (under dev) + +[[v3.8_config_new_option_callbacks]] +=== Callbacks of function config_new_option + +The two callbacks "callback_change" and "callback_delete" in scripting API function +config_new_option have been changed: an integer return value was expected by error, +now any return value is ignored (like it has always been in the C API). + [[v3.7]] == Version 3.7 (2022-10-09) diff --git a/src/plugins/guile/weechat-guile-api.c b/src/plugins/guile/weechat-guile-api.c index 04af03ecd..a70860fcd 100644 --- a/src/plugins/guile/weechat-guile-api.c +++ b/src/plugins/guile/weechat-guile-api.c @@ -1232,10 +1232,9 @@ weechat_guile_api_config_option_change_cb (const void *pointer, void *data, struct t_config_option *option) { struct t_plugin_script *script; - void *func_argv[2]; + void *func_argv[2], *rc; char empty_arg[1] = { '\0' }; const char *ptr_function, *ptr_data; - int *rc; script = (struct t_plugin_script *)pointer; plugin_script_get_function_and_data (data, &ptr_function, &ptr_data); @@ -1245,10 +1244,10 @@ weechat_guile_api_config_option_change_cb (const void *pointer, void *data, func_argv[0] = (ptr_data) ? (char *)ptr_data : empty_arg; func_argv[1] = (char *)API_PTR2STR(option); - rc = (int *) weechat_guile_exec (script, - WEECHAT_SCRIPT_EXEC_INT, - ptr_function, - "ss", func_argv); + rc = weechat_guile_exec (script, + WEECHAT_SCRIPT_EXEC_IGNORE, + ptr_function, + "ss", func_argv); if (rc) free (rc); @@ -1260,10 +1259,9 @@ weechat_guile_api_config_option_delete_cb (const void *pointer, void *data, struct t_config_option *option) { struct t_plugin_script *script; - void *func_argv[2]; + void *func_argv[2], *rc; char empty_arg[1] = { '\0' }; const char *ptr_function, *ptr_data; - int *rc; script = (struct t_plugin_script *)pointer; plugin_script_get_function_and_data (data, &ptr_function, &ptr_data); @@ -1273,10 +1271,10 @@ weechat_guile_api_config_option_delete_cb (const void *pointer, void *data, func_argv[0] = (ptr_data) ? (char *)ptr_data : empty_arg; func_argv[1] = (char *)API_PTR2STR(option); - rc = (int *) weechat_guile_exec (script, - WEECHAT_SCRIPT_EXEC_INT, - ptr_function, - "ss", func_argv); + rc = weechat_guile_exec (script, + WEECHAT_SCRIPT_EXEC_IGNORE, + ptr_function, + "ss", func_argv); if (rc) free (rc); diff --git a/src/plugins/javascript/weechat-js-api.cpp b/src/plugins/javascript/weechat-js-api.cpp index e880be653..03036e9b8 100644 --- a/src/plugins/javascript/weechat-js-api.cpp +++ b/src/plugins/javascript/weechat-js-api.cpp @@ -1149,10 +1149,9 @@ weechat_js_api_config_option_change_cb (const void *pointer, void *data, struct t_config_option *option) { struct t_plugin_script *script; - void *func_argv[2]; + void *func_argv[2], *rc; char empty_arg[1] = { '\0' }; const char *ptr_function, *ptr_data; - int *rc; script = (struct t_plugin_script *)pointer; plugin_script_get_function_and_data (data, &ptr_function, &ptr_data); @@ -1162,10 +1161,10 @@ weechat_js_api_config_option_change_cb (const void *pointer, void *data, func_argv[0] = (ptr_data) ? (char *)ptr_data : empty_arg; func_argv[1] = (char *)API_PTR2STR(option); - rc = (int *)weechat_js_exec (script, - WEECHAT_SCRIPT_EXEC_INT, - ptr_function, - "ss", func_argv); + rc = weechat_js_exec (script, + WEECHAT_SCRIPT_EXEC_IGNORE, + ptr_function, + "ss", func_argv); if (rc) free (rc); @@ -1177,10 +1176,9 @@ weechat_js_api_config_option_delete_cb (const void *pointer, void *data, struct t_config_option *option) { struct t_plugin_script *script; - void *func_argv[2]; + void *func_argv[2], *rc; char empty_arg[1] = { '\0' }; const char *ptr_function, *ptr_data; - int *rc; script = (struct t_plugin_script *)pointer; plugin_script_get_function_and_data (data, &ptr_function, &ptr_data); @@ -1190,10 +1188,10 @@ weechat_js_api_config_option_delete_cb (const void *pointer, void *data, func_argv[0] = (ptr_data) ? (char *)ptr_data : empty_arg; func_argv[1] = (char *)API_PTR2STR(option); - rc = (int *)weechat_js_exec (script, - WEECHAT_SCRIPT_EXEC_INT, - ptr_function, - "ss", func_argv); + rc = weechat_js_exec (script, + WEECHAT_SCRIPT_EXEC_IGNORE, + ptr_function, + "ss", func_argv); if (rc) free (rc); diff --git a/src/plugins/lua/weechat-lua-api.c b/src/plugins/lua/weechat-lua-api.c index 4022cfd92..95c129d98 100644 --- a/src/plugins/lua/weechat-lua-api.c +++ b/src/plugins/lua/weechat-lua-api.c @@ -1262,10 +1262,9 @@ weechat_lua_api_config_option_change_cb (const void *pointer, void *data, struct t_config_option *option) { struct t_plugin_script *script; - void *func_argv[2]; + void *func_argv[2], *rc; char empty_arg[1] = { '\0' }; const char *ptr_function, *ptr_data; - int *rc; script = (struct t_plugin_script *)pointer; plugin_script_get_function_and_data (data, &ptr_function, &ptr_data); @@ -1275,10 +1274,10 @@ weechat_lua_api_config_option_change_cb (const void *pointer, void *data, func_argv[0] = (ptr_data) ? (char *)ptr_data : empty_arg; func_argv[1] = (char *)API_PTR2STR(option); - rc = (int *) weechat_lua_exec (script, - WEECHAT_SCRIPT_EXEC_INT, - ptr_function, - "ss", func_argv); + rc = weechat_lua_exec (script, + WEECHAT_SCRIPT_EXEC_IGNORE, + ptr_function, + "ss", func_argv); if (rc) free (rc); @@ -1290,10 +1289,9 @@ weechat_lua_api_config_option_delete_cb (const void *pointer, void *data, struct t_config_option *option) { struct t_plugin_script *script; - void *func_argv[2]; + void *func_argv[2], *rc; char empty_arg[1] = { '\0' }; const char *ptr_function, *ptr_data; - int *rc; script = (struct t_plugin_script *)pointer; plugin_script_get_function_and_data (data, &ptr_function, &ptr_data); @@ -1303,10 +1301,10 @@ weechat_lua_api_config_option_delete_cb (const void *pointer, void *data, func_argv[0] = (ptr_data) ? (char *)ptr_data : empty_arg; func_argv[1] = (char *)API_PTR2STR(option); - rc = (int *) weechat_lua_exec (script, - WEECHAT_SCRIPT_EXEC_INT, - ptr_function, - "ss", func_argv); + rc = weechat_lua_exec (script, + WEECHAT_SCRIPT_EXEC_IGNORE, + ptr_function, + "ss", func_argv); if (rc) free (rc); diff --git a/src/plugins/perl/weechat-perl-api.c b/src/plugins/perl/weechat-perl-api.c index e63784040..9e6a78cb4 100644 --- a/src/plugins/perl/weechat-perl-api.c +++ b/src/plugins/perl/weechat-perl-api.c @@ -1203,10 +1203,9 @@ weechat_perl_api_config_option_change_cb (const void *pointer, void *data, struct t_config_option *option) { struct t_plugin_script *script; - void *func_argv[2]; + void *func_argv[2], *rc; char empty_arg[1] = { '\0' }; const char *ptr_function, *ptr_data; - int *rc; script = (struct t_plugin_script *)pointer; plugin_script_get_function_and_data (data, &ptr_function, &ptr_data); @@ -1216,10 +1215,10 @@ weechat_perl_api_config_option_change_cb (const void *pointer, void *data, func_argv[0] = (ptr_data) ? (char *)ptr_data : empty_arg; func_argv[1] = (char *)API_PTR2STR(option); - rc = (int *) weechat_perl_exec (script, - WEECHAT_SCRIPT_EXEC_INT, - ptr_function, - "ss", func_argv); + rc = weechat_perl_exec (script, + WEECHAT_SCRIPT_EXEC_IGNORE, + ptr_function, + "ss", func_argv); if (rc) free (rc); @@ -1231,10 +1230,9 @@ weechat_perl_api_config_option_delete_cb (const void *pointer, void *data, struct t_config_option *option) { struct t_plugin_script *script; - void *func_argv[2]; + void *func_argv[2], *rc; char empty_arg[1] = { '\0' }; const char *ptr_function, *ptr_data; - int *rc; script = (struct t_plugin_script *)pointer; plugin_script_get_function_and_data (data, &ptr_function, &ptr_data); @@ -1244,10 +1242,10 @@ weechat_perl_api_config_option_delete_cb (const void *pointer, void *data, func_argv[0] = (ptr_data) ? (char *)ptr_data : empty_arg; func_argv[1] = (char *)API_PTR2STR(option); - rc = (int *) weechat_perl_exec (script, - WEECHAT_SCRIPT_EXEC_INT, - ptr_function, - "ss", func_argv); + rc = weechat_perl_exec (script, + WEECHAT_SCRIPT_EXEC_IGNORE, + ptr_function, + "ss", func_argv); if (rc) free (rc); diff --git a/src/plugins/php/weechat-php-api.c b/src/plugins/php/weechat-php-api.c index afcbf193a..1728d147c 100644 --- a/src/plugins/php/weechat-php-api.c +++ b/src/plugins/php/weechat-php-api.c @@ -186,12 +186,14 @@ API_FUNC(register) static void weechat_php_cb (const void *pointer, void *data, void **func_argv, - const char *func_types, int func_type, void *rc) + const char *func_types, int ret_type, void *rc) { struct t_plugin_script *script; const char *ptr_function, *ptr_data; void *ret; + ret = NULL; + script = (struct t_plugin_script *)pointer; plugin_script_get_function_and_data (data, &ptr_function, &ptr_data); @@ -202,20 +204,25 @@ weechat_php_cb (const void *pointer, void *data, void **func_argv, goto weechat_php_cb_err; } - ret = weechat_php_exec (script, func_type, ptr_function, + ret = weechat_php_exec (script, ret_type, ptr_function, func_types, func_argv); - if (!ret) + if ((ret_type != WEECHAT_SCRIPT_EXEC_IGNORE) && !ret) { goto weechat_php_cb_err; } - if (func_type == WEECHAT_SCRIPT_EXEC_INT) + if (ret_type == WEECHAT_SCRIPT_EXEC_IGNORE) + { + if (ret) + free (ret); + } + else if (ret_type == WEECHAT_SCRIPT_EXEC_INT) { *((int *)rc) = *((int *)ret); free (ret); } - else if (func_type == WEECHAT_SCRIPT_EXEC_HASHTABLE) + else if (ret_type == WEECHAT_SCRIPT_EXEC_HASHTABLE) { *((struct t_hashtable **)rc) = (struct t_hashtable *)ret; } @@ -226,11 +233,16 @@ weechat_php_cb (const void *pointer, void *data, void **func_argv, return; weechat_php_cb_err: - if (func_type == WEECHAT_SCRIPT_EXEC_INT) + if (ret_type == WEECHAT_SCRIPT_EXEC_IGNORE) + { + if (ret) + free (ret); + } + else if (ret_type == WEECHAT_SCRIPT_EXEC_INT) { *((int *)rc) = WEECHAT_RC_ERROR; } - else if (func_type == WEECHAT_SCRIPT_EXEC_HASHTABLE) + else if (ret_type == WEECHAT_SCRIPT_EXEC_HASHTABLE) { *((struct t_hashtable **)rc) = NULL; } @@ -1273,13 +1285,12 @@ weechat_php_api_config_option_change_cb (const void *pointer, void *data, struct t_config_option *option) { - int *rc; void *func_argv[2]; func_argv[1] = (char *)API_PTR2STR(option); weechat_php_cb (pointer, data, func_argv, "ss", - WEECHAT_SCRIPT_EXEC_INT, &rc); + WEECHAT_SCRIPT_EXEC_IGNORE, NULL); } static void @@ -1287,13 +1298,12 @@ weechat_php_api_config_option_delete_cb (const void *pointer, void *data, struct t_config_option *option) { - int rc; void *func_argv[2]; func_argv[1] = (char *)API_PTR2STR(option); weechat_php_cb (pointer, data, func_argv, "ss", - WEECHAT_SCRIPT_EXEC_INT, &rc); + WEECHAT_SCRIPT_EXEC_IGNORE, NULL); } API_FUNC(config_new_option) diff --git a/src/plugins/python/weechat-python-api.c b/src/plugins/python/weechat-python-api.c index 1aab910f8..5e8399959 100644 --- a/src/plugins/python/weechat-python-api.c +++ b/src/plugins/python/weechat-python-api.c @@ -1195,10 +1195,9 @@ weechat_python_api_config_option_change_cb (const void *pointer, void *data, struct t_config_option *option) { struct t_plugin_script *script; - void *func_argv[2]; + void *func_argv[2], *rc; char empty_arg[1] = { '\0' }; const char *ptr_function, *ptr_data; - int *rc; script = (struct t_plugin_script *)pointer; plugin_script_get_function_and_data (data, &ptr_function, &ptr_data); @@ -1208,10 +1207,10 @@ weechat_python_api_config_option_change_cb (const void *pointer, void *data, func_argv[0] = (ptr_data) ? (char *)ptr_data : empty_arg; func_argv[1] = (char *)API_PTR2STR(option); - rc = (int *) weechat_python_exec (script, - WEECHAT_SCRIPT_EXEC_INT, - ptr_function, - "ss", func_argv); + rc = weechat_python_exec (script, + WEECHAT_SCRIPT_EXEC_IGNORE, + ptr_function, + "ss", func_argv); if (rc) free (rc); @@ -1223,10 +1222,9 @@ weechat_python_api_config_option_delete_cb (const void *pointer, void *data, struct t_config_option *option) { struct t_plugin_script *script; - void *func_argv[2]; + void *func_argv[2], *rc; char empty_arg[1] = { '\0' }; const char *ptr_function, *ptr_data; - int *rc; script = (struct t_plugin_script *)pointer; plugin_script_get_function_and_data (data, &ptr_function, &ptr_data); @@ -1236,10 +1234,10 @@ weechat_python_api_config_option_delete_cb (const void *pointer, void *data, func_argv[0] = (ptr_data) ? (char *)ptr_data : empty_arg; func_argv[1] = (char *)API_PTR2STR(option); - rc = (int *) weechat_python_exec (script, - WEECHAT_SCRIPT_EXEC_INT, - ptr_function, - "ss", func_argv); + rc = weechat_python_exec (script, + WEECHAT_SCRIPT_EXEC_IGNORE, + ptr_function, + "ss", func_argv); if (rc) free (rc); diff --git a/src/plugins/ruby/weechat-ruby-api.c b/src/plugins/ruby/weechat-ruby-api.c index 771b90234..ae491f76f 100644 --- a/src/plugins/ruby/weechat-ruby-api.c +++ b/src/plugins/ruby/weechat-ruby-api.c @@ -1437,10 +1437,9 @@ weechat_ruby_api_config_option_change_cb (const void *pointer, void *data, struct t_config_option *option) { struct t_plugin_script *script; - void *func_argv[2]; + void *func_argv[2], *rc; char empty_arg[1] = { '\0' }; const char *ptr_function, *ptr_data; - int *rc; script = (struct t_plugin_script *)pointer; plugin_script_get_function_and_data (data, &ptr_function, &ptr_data); @@ -1450,10 +1449,10 @@ weechat_ruby_api_config_option_change_cb (const void *pointer, void *data, func_argv[0] = (ptr_data) ? (char *)ptr_data : empty_arg; func_argv[1] = (char *)API_PTR2STR(option); - rc = (int *) weechat_ruby_exec (script, - WEECHAT_SCRIPT_EXEC_INT, - ptr_function, - "ss", func_argv); + rc = weechat_ruby_exec (script, + WEECHAT_SCRIPT_EXEC_IGNORE, + ptr_function, + "ss", func_argv); if (rc) free (rc); @@ -1465,10 +1464,9 @@ weechat_ruby_api_config_option_delete_cb (const void *pointer, void *data, struct t_config_option *option) { struct t_plugin_script *script; - void *func_argv[2]; + void *func_argv[2], *rc; char empty_arg[1] = { '\0' }; const char *ptr_function, *ptr_data; - int *rc; script = (struct t_plugin_script *)pointer; plugin_script_get_function_and_data (data, &ptr_function, &ptr_data); @@ -1478,10 +1476,10 @@ weechat_ruby_api_config_option_delete_cb (const void *pointer, void *data, func_argv[0] = (ptr_data) ? (char *)ptr_data : empty_arg; func_argv[1] = (char *)API_PTR2STR(option); - rc = (int *) weechat_ruby_exec (script, - WEECHAT_SCRIPT_EXEC_INT, - ptr_function, - "ss", func_argv); + rc = weechat_ruby_exec (script, + WEECHAT_SCRIPT_EXEC_IGNORE, + ptr_function, + "ss", func_argv); if (rc) free (rc); diff --git a/src/plugins/tcl/weechat-tcl-api.c b/src/plugins/tcl/weechat-tcl-api.c index cd1474521..b7e1cf24c 100644 --- a/src/plugins/tcl/weechat-tcl-api.c +++ b/src/plugins/tcl/weechat-tcl-api.c @@ -1410,10 +1410,9 @@ weechat_tcl_api_config_option_change_cb (const void *pointer, void *data, struct t_config_option *option) { struct t_plugin_script *script; - void *func_argv[2]; + void *func_argv[2], *rc; char empty_arg[1] = { '\0' }; const char *ptr_function, *ptr_data; - int *rc; script = (struct t_plugin_script *)pointer; plugin_script_get_function_and_data (data, &ptr_function, &ptr_data); @@ -1423,10 +1422,10 @@ weechat_tcl_api_config_option_change_cb (const void *pointer, void *data, func_argv[0] = (ptr_data) ? (char *)ptr_data : empty_arg; func_argv[1] = (char *)API_PTR2STR(option); - rc = (int *) weechat_tcl_exec (script, - WEECHAT_SCRIPT_EXEC_INT, - ptr_function, - "ss", func_argv); + rc = weechat_tcl_exec (script, + WEECHAT_SCRIPT_EXEC_IGNORE, + ptr_function, + "ss", func_argv); if (rc) free (rc); @@ -1438,10 +1437,9 @@ weechat_tcl_api_config_option_delete_cb (const void *pointer, void *data, struct t_config_option *option) { struct t_plugin_script *script; - void *func_argv[2]; + void *func_argv[2], *rc; char empty_arg[1] = { '\0' }; const char *ptr_function, *ptr_data; - int *rc; script = (struct t_plugin_script *)pointer; plugin_script_get_function_and_data (data, &ptr_function, &ptr_data); @@ -1451,10 +1449,10 @@ weechat_tcl_api_config_option_delete_cb (const void *pointer, void *data, func_argv[0] = (ptr_data) ? (char *)ptr_data : empty_arg; func_argv[1] = (char *)API_PTR2STR(option); - rc = (int *) weechat_tcl_exec (script, - WEECHAT_SCRIPT_EXEC_INT, - ptr_function, - "ss", func_argv); + rc = weechat_tcl_exec (script, + WEECHAT_SCRIPT_EXEC_IGNORE, + ptr_function, + "ss", func_argv); if (rc) free (rc); diff --git a/tests/scripts/python/testapi.py b/tests/scripts/python/testapi.py index 1370fa884..2b12e8011 100644 --- a/tests/scripts/python/testapi.py +++ b/tests/scripts/python/testapi.py @@ -181,12 +181,12 @@ def option_check_value_cb(data, option, value): def option_change_cb(data, option): """Option change callback.""" - return 1 + pass def option_delete_cb(data, option): """Option delete callback.""" - return 1 + pass def test_config(): diff --git a/tests/scripts/python/unparse.py b/tests/scripts/python/unparse.py index 6a7e51240..99b6b2869 100755 --- a/tests/scripts/python/unparse.py +++ b/tests/scripts/python/unparse.py @@ -1090,7 +1090,7 @@ class UnparseGuile(UnparsePython): def _ast_pass(self, node): """Add an AST Pass in output.""" - pass + self.add('#t') def _ast_return(self, node): """Add an AST Return in output."""