plperl: windows: Use Perl_setlocale on 5.28+, fixing compile failure.
authorAndres Freund <andres@anarazel.de>
Sun, 30 Jan 2022 22:29:04 +0000 (14:29 -0800)
committerAndres Freund <andres@anarazel.de>
Mon, 31 Jan 2022 00:42:14 +0000 (16:42 -0800)
For older versions we need our own copy of perl's setlocale(), because it was
not exposed (why we need the setlocale in the first place is explained in
plperl_init_interp) . The copy stopped working in 5.28, as some of the used
macros are not public anymore.  But Perl_setlocale is available in 5.28, so
use that.

Author: Victor Wagner <vitus@wagner.pp.ru>
Reviewed-By: Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>
Discussion: https://postgr.es/m/20200501134711.08750c5f@antares.wagner.home
Backpatch: all versions

src/pl/plperl/plperl.c

index 1ae8195e023d7f5f6730acba3f1f3459d7242b87..3f785b1e8d5a522e22004f66367ec3995a07fd43 100644 (file)
@@ -298,9 +298,11 @@ static char *strip_trailing_ws(const char *msg);
 static OP  *pp_require_safe(pTHX);
 static void activate_interpreter(plperl_interp_desc *interp_desc);
 
-#ifdef WIN32
+#if defined(WIN32) && PERL_VERSION_LT(5, 28, 0)
 static char *setlocale_perl(int category, char *locale);
-#endif
+#else
+#define setlocale_perl(a,b)  Perl_setlocale(a,b)
+#endif                                                 /* defined(WIN32) && PERL_VERSION_LT(5, 28, 0) */
 
 /*
  * Decrement the refcount of the given SV within the active Perl interpreter
@@ -4130,8 +4132,10 @@ plperl_inline_callback(void *arg)
 /*
  * Perl's own setlocale(), copied from POSIX.xs
  * (needed because of the calls to new_*())
+ *
+ * Starting in 5.28, perl exposes Perl_setlocale to do so.
  */
-#ifdef WIN32
+#if defined(WIN32) && PERL_VERSION_LT(5, 28, 0)
 static char *
 setlocale_perl(int category, char *locale)
 {
@@ -4199,5 +4203,4 @@ setlocale_perl(int category, char *locale)
 
        return RETVAL;
 }
-
-#endif                                                 /* WIN32 */
+#endif                                                 /* defined(WIN32) && PERL_VERSION_LT(5, 28, 0) */