From b6507ad5ee6a813efa1698b7383db2f5e720ca2f Mon Sep 17 00:00:00 2001 From: ailin-nemui Date: Sat, 27 Jan 2024 17:42:42 +0000 Subject: [PATCH] Merge pull request #1510 from ailin-nemui/perl-again restore locale if perl breaks it (cherry picked from commit 504fd7bc609dfd9daee49f4eb9634338bdba1d81) --- src/perl/irssi-core.pl | 7 ------- src/perl/perl-core.c | 25 +++++++++++++++++++++---- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/perl/irssi-core.pl b/src/perl/irssi-core.pl index 0999de9e..46066a38 100644 --- a/src/perl/irssi-core.pl +++ b/src/perl/irssi-core.pl @@ -52,10 +52,3 @@ sub eval_file { die "cap_sasl has been unloaded from Irssi ".Irssi::version()." because it conflicts with the built-in SASL support. See /help network for configuring SASL or read the ChangeLog for more information."; } } - -if ( $] >= 5.037005 && $] <= 5.038000 ) { - # https://github.com/Perl/perl5/issues/21366 - print STDERR "\e7 \e[A Irssi: applying locale workaround for Perl 5.38.0 \e8"; - require POSIX; - POSIX::setlocale(&POSIX::LC_ALL, ""); -} diff --git a/src/perl/perl-core.c b/src/perl/perl-core.c index 24f0218c..c0130612 100644 --- a/src/perl/perl-core.c +++ b/src/perl/perl-core.c @@ -111,27 +111,44 @@ static void xs_init(pTHX) void perl_scripts_init(void) { char *code, *use_code; + int broken_perl; perl_scripts = NULL; perl_sources_start(); perl_signals_start(); my_perl = perl_alloc(); + broken_perl = wcwidth(160); perl_construct(my_perl); + broken_perl = broken_perl != wcwidth(160); - perl_parse(my_perl, xs_init, G_N_ELEMENTS(perl_args)-1, perl_args, NULL); + perl_parse(my_perl, xs_init, G_N_ELEMENTS(perl_args) - 1, perl_args, NULL); #if PERL_STATIC_LIBS == 1 perl_eval_pv("Irssi::Core::->boot_Irssi_Core(0.9);", TRUE); #endif - perl_common_start(); + perl_common_start(); use_code = perl_get_use_list(); code = g_strdup_printf(irssi_core_code, PERL_STATIC_LIBS, use_code); perl_eval_pv(code, TRUE); + if (broken_perl) { + g_warning("applying locale workaround for Perl %d.%d, see " + "https://github.com/Perl/perl5/issues/21366", + PERL_REVISION, PERL_VERSION); + perl_eval_pv("package Irssi::Core;" + /* https://github.com/Perl/perl5/issues/21746 */ + "if ( $] == $] )" + "{" + "require POSIX;" + "POSIX::setlocale(&POSIX::LC_ALL, \"\");" + "}" + "1;", + TRUE); + } g_free(code); - g_free(use_code); + g_free(use_code); } /* Destroy all perl scripts and deinitialize perl interpreter */ @@ -476,7 +493,7 @@ void perl_core_init(void) char **argv = perl_args; PERL_SYS_INIT3(&argc, &argv, &environ); - print_script_errors = 1; + print_script_errors = 1; settings_add_str("perl", "perl_use_lib", PERL_USE_LIB); /*PL_perl_destruct_level = 1; - this crashes with some people.. */ -- 2.43.0