diff options
author | Karl Williamson <khw@cpan.org> | 2022-09-03 14:49:52 -0600 |
---|---|---|
committer | Karl Williamson <khw@cpan.org> | 2022-09-07 12:11:42 -0600 |
commit | ec18fac0008c98267fc560f7023d1d11703ed66d (patch) | |
tree | 36010312de8ebed3492df4154e97290913e1fcab /opcode.h | |
parent | d8e250fa2b45c62809ba490260a7de1930f7486f (diff) | |
download | perl-ec18fac0008c98267fc560f7023d1d11703ed66d.tar.gz |
locale.c: Don't ever use system LC_ALL
This fixes #20231
LC_ALL is a compendium of the individual locale categories, such as
LC_CTYPE, LC_NUMERIC, .... When all categories are in the same locale,
it acts just like an individual category. But when the categories are
not in the same locale, some means must be used to indicate that.
Platforms differ in how they represent this. Alpine uses:
a;b;c;d;e;f
where each letter is replaced by the correct locale for a given
category. Which category is in which position is deterministic, and
platform-specific. Other platforms separate by a '/'. And glibc uses a
more informative format:
LC_CTYPE=a;LC_NUMBERIC=b; ...
This has the advantage that it's obvious to the reader what is what, and
the order in the string is irrelevant.
It might be possible, but painful, for a Configure probe to figure out
what the syntax is for the current platform. I chose not to do that. A
platform might come along with a novel syntax unanticipated by whatever
probe we came up with.
Instead, perl uses the glibc format internally, and when it needs to get
or set LC_ALL from the system, it loops through each category
individually, so that by the time it has done all of them, LC_ALL will
have been implicitly handled.
The breaking commit a7ff7ac failed to do that.
Diffstat (limited to 'opcode.h')
0 files changed, 0 insertions, 0 deletions