]> jfr.im git - irc/weechat/weechat.git/commitdiff
perl: fix display of non-ASCII chars after load of a script with Perl >= 5.38 (issue...
authorSébastien Helleu <redacted>
Mon, 21 Aug 2023 11:10:26 +0000 (13:10 +0200)
committerSébastien Helleu <redacted>
Mon, 21 Aug 2023 11:11:58 +0000 (13:11 +0200)
ChangeLog.adoc
src/plugins/perl/weechat-perl.c

index 56480e830849a5ece8f49af477e6028fecf3ec77..d391b8ed8070bdde4216fa5180cca822abd8c395 100644 (file)
@@ -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)
 
index 1759a48107a5c6d083813cdaf32f6ded0ec4faa7..1796679d9caa6f8065b26556c7a03e6ca8ab6789 100644 (file)
@@ -22,6 +22,7 @@
 
 #undef _
 
+#include <locale.h>
 #include <EXTERN.h>
 #include <perl.h>
 #include <XSUB.h>
@@ -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;