summaryrefslogtreecommitdiff
blob: 3362947876b14ccad8aabd78078a3eee7f941eae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
https://bugs.gentoo.org/939014
https://github.com/Perl/perl5/pull/22569

From bd0ab509f890a6638bd5033ef58526f8c74f7e4b Mon Sep 17 00:00:00 2001
From: Andrei Horodniceanu <a.horodniceanu@proton.me>
Date: Wed, 4 Sep 2024 12:46:44 +0300
Subject: [PATCH] locale.c: Fix compilation on platforms with only a C locale

Signed-off-by: Andrei Horodniceanu <a.horodniceanu@proton.me>
--- a/AUTHORS
+++ b/AUTHORS
@@ -103,6 +103,7 @@ Andreas König                  <a.koenig@mind.de>
 Andreas Marienborg             <andreas.marienborg@gmail.com>
 Andreas Schwab                 <schwab@suse.de>
 Andreas Voegele                <andreas@andreasvoegele.com>
+Andrei Horodniceanu            <a.horodniceanu@proton.me>
 Andrei Yelistratov             <andrew@sundale.net>
 Andrej Borsenkow               <Andrej.Borsenkow@mow.siemens.ru>
 Andrew Bettison                <andrewb@zip.com.au>
--- a/locale.c
+++ b/locale.c
@@ -8963,6 +8963,7 @@ Perl_init_i18nl10n(pTHX_ int printwarn)
      * categories into our internal indices. */
     if (map_LC_ALL_position_to_index[0] == LC_ALL_INDEX_) {
 
+#    ifdef PERL_LC_ALL_CATEGORY_POSITIONS_INIT
         /* Use this array, initialized by a config.h constant */
         int lc_all_category_positions[] = PERL_LC_ALL_CATEGORY_POSITIONS_INIT;
         STATIC_ASSERT_STMT(   C_ARRAY_LENGTH(lc_all_category_positions)
@@ -8975,6 +8976,21 @@ Perl_init_i18nl10n(pTHX_ int printwarn)
             map_LC_ALL_position_to_index[i] =
                               get_category_index(lc_all_category_positions[i]);
         }
+#    else
+        /* It is possible for both PERL_LC_ALL_USES_NAME_VALUE_PAIRS and
+         * PERL_LC_ALL_CATEGORY_POSITIONS_INIT not to be defined, e.g. on
+         * systems with only a C locale during ./Configure.  Assume that this
+         * can only happen as part of some sort of bootstrapping so allow
+         * compilation to succeed by ignoring correctness.
+         */
+        for (unsigned int i = 0;
+             i < C_ARRAY_LENGTH(map_LC_ALL_position_to_index);
+             i++)
+        {
+            map_LC_ALL_position_to_index[i] = 0;
+        }
+#    endif
+
     }
 
     LOCALE_UNLOCK;