From c5eb982424150894959b978d98dcf6a005eb6c9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Helleu?= Date: Mon, 21 Aug 2023 13:10:26 +0200 Subject: [PATCH] perl: fix display of non-ASCII chars after load of a script with Perl >= 5.38 (issue #1996) --- ChangeLog.adoc | 1 + src/plugins/perl/weechat-perl.c | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/ChangeLog.adoc b/ChangeLog.adoc index 56480e830..d391b8ed8 100644 --- a/ChangeLog.adoc +++ b/ChangeLog.adoc @@ -20,6 +20,7 @@ Bug fixes:: * irc: add missing tags on multiline messages (issue #1987) * irc: fix redirection of command `/list` when the reply doesn't start with message 321 (start of /list) * irc: fix wrong time displayed for CTCP messages received from self nick (issue #2000) + * perl: fix display of non-ASCII chars after load of a script with Perl >= 5.38 (issue #1996) * scripts: fix function string_parse_size on 32-bit systems (python and ruby) (issue #1999) * xfer: fix conversion of string to IPv4 on 32-bit systems (issue #1999) diff --git a/src/plugins/perl/weechat-perl.c b/src/plugins/perl/weechat-perl.c index 1759a4810..1796679d9 100644 --- a/src/plugins/perl/weechat-perl.c +++ b/src/plugins/perl/weechat-perl.c @@ -22,6 +22,7 @@ #undef _ +#include #include #include #include @@ -567,6 +568,10 @@ weechat_perl_load (const char *filename, const char *code) temp_script.interpreter = (PerlInterpreter *) perl_current_interpreter; perl_parse (perl_current_interpreter, weechat_perl_api_init, perl_args_count, perl_args, NULL); +#if PERL_REVISION >= 6 || (PERL_REVISION == 5 && PERL_VERSION >= 38) + /* restore the locale that could be changed by Perl >= 5.38 */ + Perl_setlocale (LC_CTYPE, ""); +#endif length = strlen (perl_weechat_code) + strlen (str_warning) + strlen (str_error) - 2 + 4 + strlen ((code) ? code : filename) + 4 + 1; perl_code = malloc (length); @@ -1290,6 +1295,10 @@ weechat_plugin_init (struct t_weechat_plugin *plugin, int argc, char *argv[]) perl_construct (perl_main); perl_parse (perl_main, weechat_perl_api_init, perl_args_count, perl_args, NULL); +#if PERL_REVISION >= 6 || (PERL_REVISION == 5 && PERL_VERSION >= 38) + /* restore the locale that could be changed by Perl >= 5.38 */ + Perl_setlocale (LC_CTYPE, ""); +#endif #endif /* MULTIPLICITY */ perl_data.config_file = &perl_config_file;