develooper Front page | perl.perl5.changes | Postings from March 2021

[Perl/perl5] 4e1bfe: Add ability to easily add info to DEBUG output

From:
Karl Williamson via perl5-changes
Date:
March 10, 2021 22:53
Subject:
[Perl/perl5] 4e1bfe: Add ability to easily add info to DEBUG output
Message ID:
Perl/perl5/push/refs/heads/smoke-me/khw-locale/92dde7-cc1997@github.com
  Branch: refs/heads/smoke-me/khw-locale
  Home:   https://github.com/Perl/perl5
  Commit: 4e1bfe8bfbb3406c85666d98a71b2207e7f31500
      https://github.com/Perl/perl5/commit/4e1bfe8bfbb3406c85666d98a71b2207e7f31500
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M perl.h

  Log Message:
  -----------
  Add ability to easily add info to DEBUG output

This commit adds two macros that a user can define and recompile Perl to
get every active DEBUG statement to do  something beyond what it would
normally do.

This allows someone to recompile Perl when they need to delve deeper
into fixing a bug without increasing memory use or slowing execution
otherwise.


  Commit: 9cbe57cbea7d73ee7d793ec62317e18189d14e7b
      https://github.com/Perl/perl5/commit/9cbe57cbea7d73ee7d793ec62317e18189d14e7b
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M intrpvar.h

  Log Message:
  -----------
  intrpvar.h: Add clarifying comment


  Commit: fc7d08a2ffcdf5b196b5e0208786cd686aed1c5a
      https://github.com/Perl/perl5/commit/fc7d08a2ffcdf5b196b5e0208786cd686aed1c5a
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M dosish.h
    M unixish.h

  Log Message:
  -----------
  Unixish.sh, doshish.sh: Reorder terminations; simplify

The IO and memory terminations need to be after other things.  Add a
comment so that future maintainers won't make the mistakes I did.

Also refactor to that amiga os doesn't have a separate list to get out
of sync

I suspect that the amiga termination should be moved to earlier in
the sequence, but absent any evidence; I'm leaving it unchanged.


  Commit: aa8cdf4f308a598b6d6e2dabc093928fe53827aa
      https://github.com/Perl/perl5/commit/aa8cdf4f308a598b6d6e2dabc093928fe53827aa
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M perl.h

  Log Message:
  -----------
  perl.h: Clarify debugging msg for locales

I wrote this years ago, and now have discovered it was written
assuming the consumer is more familiar with the underlying code than
warranted.


  Commit: 0f2b766ce67ed7f9b041f38aea7a7f9bde0c7fe7
      https://github.com/Perl/perl5/commit/0f2b766ce67ed7f9b041f38aea7a7f9bde0c7fe7
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M mg.c

  Log Message:
  -----------
  XXX better message: mg.c: Silence compiler warning


  Commit: 37dfe059bfd576ddfaba6272acb1ebee2a40da01
      https://github.com/Perl/perl5/commit/37dfe059bfd576ddfaba6272acb1ebee2a40da01
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M cygwin/cygwin.c

  Log Message:
  -----------
  cygwin


  Commit: b326fa9bec70cfc2608d17706b166a10ff80dbf7
      https://github.com/Perl/perl5/commit/b326fa9bec70cfc2608d17706b166a10ff80dbf7
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M lib/locale_threads.t

  Log Message:
  -----------
  XXX locale_threads


  Commit: 5fb6fdc65d668675b81750ee375fd1baae1c7689
      https://github.com/Perl/perl5/commit/5fb6fdc65d668675b81750ee375fd1baae1c7689
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c
    M perl.h

  Log Message:
  -----------
  DEBUG_L now also looks at environment variable

Because locale initialization happens before command line processing,
one can't pass a -DL argument to enable debugging of locale
initialization.  Instead, an environment variable is read then, and is
used to enable debugging or not.  In the past, code specifically had to
test for this being set.  This commit changes that so that debugging can
automatically be enabled without having to write special code.  Future
commits will strip out those special checks.


  Commit: 7e218d8679b04ef038d26615934a5e68f71bbc3c
      https://github.com/Perl/perl5/commit/7e218d8679b04ef038d26615934a5e68f71bbc3c
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Replace most #ifdef DEBUGGING lines

THe previous commit enhanced the DEBUG macros so that they contain the
logic that previously had to be done with conditional compilation
statements.  Removing them makes the code easier to read.


  Commit: bc40ff0caf59ba3cacd5f38373550e994131d009
      https://github.com/Perl/perl5/commit/bc40ff0caf59ba3cacd5f38373550e994131d009
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M handy.h
    M numeric.c
    M regcomp.c
    M regexec.c
    M utfebcdic.h

  Log Message:
  -----------
  Change macro names to be C standard conformant

C reserves symbols beginning with underscores for its own use.  This
commit moves the underscore so it is trailing, which is legal.  The
symbols changed here are most of the ones in handy.h that have few uses
outside it.


  Commit: 000b68c5434368184f3190165947f45229e0d261
      https://github.com/Perl/perl5/commit/000b68c5434368184f3190165947f45229e0d261
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M handy.h

  Log Message:
  -----------
  handy.h: Refactor some #ifdef's for commonality

This changes these compilation conditionals so that things in common
between Windows and other platforms are only defined once.

It changes the isWORDCHAR_LC definition for non-Windows to match that
platform, adding an UNLIKELY().


  Commit: cd560bfa660738654b6c4ae39ecd0473a6da5fcc
      https://github.com/Perl/perl5/commit/cd560bfa660738654b6c4ae39ecd0473a6da5fcc
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M handy.h

  Log Message:
  -----------
  handy.h: White-space, comment only


  Commit: 400fdb4471bcb3ff0a6ff3c88eea3deacfe69afa
      https://github.com/Perl/perl5/commit/400fdb4471bcb3ff0a6ff3c88eea3deacfe69afa
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M handy.h

  Log Message:
  -----------
  handy.h: Remove only call to an internal macro

Replace isIDFIRST_LC  with a slightly faster implementation, in line
with what isWORDCHAR already does


  Commit: e1dff7941dd15b364f7cec72c7413ed87281f8d7
      https://github.com/Perl/perl5/commit/e1dff7941dd15b364f7cec72c7413ed87281f8d7
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M charclass_invlists.h
    M handy.h
    M l1_char_class_tab.h
    M lib/unicore/uni_keywords.pl
    M perl.c
    M perl.h
    M regcomp.c
    M regcomp.h
    M regen/mk_PL_charclass.pl
    M regexec.c
    M sv.c
    M uni_keywords.h
    M utfebcdic.h

  Log Message:
  -----------
  Change macro names to be C standard conformant

C reserves symbols beginning with underscores for its own use.  This
commit moves the underscore so it is trailing, which is legal.  The
symbols changed here are many of the ones in handy.h that have
significant uses outside it.


  Commit: 06bcc48bf3ed96205b1e78135167e675b26bbfe1
      https://github.com/Perl/perl5/commit/06bcc48bf3ed96205b1e78135167e675b26bbfe1
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M handy.h

  Log Message:
  -----------
  handy.h: Rmv unneeded generality

The possible first character of an ID is always an alpha in the range
0-255, so there is no harm changing from the former to the latter.  And
future changes would otherwise have needed an extra parameter in a bunch
of macros.


  Commit: fc0d4b9797fae955c192c29bf1ca74ae7bb1028c
      https://github.com/Perl/perl5/commit/fc0d4b9797fae955c192c29bf1ca74ae7bb1028c
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M handy.h

  Log Message:
  -----------
  handy.h: Don't special case isASCII_LC

This was an attempt to save instructions, but future commits will need
the generality


  Commit: d2b8aaca7f3f06a8d424ea3d07225b2b0da3534e
      https://github.com/Perl/perl5/commit/d2b8aaca7f3f06a8d424ea3d07225b2b0da3534e
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M handy.h

  Log Message:
  -----------
  handy.h: Refactor some internal macros

This changes the parameters etc, in preparation for further changes


  Commit: a85353b461880625934cd115d12c0c30b8c8dcb6
      https://github.com/Perl/perl5/commit/a85353b461880625934cd115d12c0c30b8c8dcb6
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M globvar.sym
    M handy.h
    M inline.h
    M perl.h
    M proto.h
    M regexec.c

  Log Message:
  -----------
  regexec.c: Use function call table to streamline code

This replaces a switch() statement with a function pointer table.  But
the main reason I'm doing this is for future functionality.


  Commit: 43a17a4cbfcdfac33b046e91beb724225567f00f
      https://github.com/Perl/perl5/commit/43a17a4cbfcdfac33b046e91beb724225567f00f
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Declare three static arrays to be so.


  Commit: 3043386b9e784f010b33a288c81510f300842894
      https://github.com/Perl/perl5/commit/3043386b9e784f010b33a288c81510f300842894
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c
    M perl.h

  Log Message:
  -----------
  Move some locale.c #defines to perl.h

This is in preparation for them to be used in macros from outside
locale.c


  Commit: 35acabfad4c53ae6f514ea594c7fdfffd85a2f0b
      https://github.com/Perl/perl5/commit/35acabfad4c53ae6f514ea594c7fdfffd85a2f0b
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c
    M perl.h

  Log Message:
  -----------
  Mark newly moved symbols as private

The previous commit made certain symbols that previously were local to
locale.c now available everywhere.  Add a trailing underscore to their
names to mark them as private.


  Commit: 57016958b99ab25810007b3e24f568e5c7ca3ea8
      https://github.com/Perl/perl5/commit/57016958b99ab25810007b3e24f568e5c7ca3ea8
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c
    M makedef.pl
    M perl.h

  Log Message:
  -----------
  Add USE_LOCALE_THREADS #define

This is in preparation for supporting configurations where there threads
are available, but the locale handling code should ignore that fact.

This stems from the unusual locale handling of z/OS, where any attempt
is ignored to change locales after the first thread is created.


  Commit: 5ebb336f53621f94be866361944d0a239cd1537c
      https://github.com/Perl/perl5/commit/5ebb336f53621f94be866361944d0a239cd1537c
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M ext/POSIX/POSIX.xs
    M ext/POSIX/lib/POSIX.pm
    M intrpvar.h
    M locale.c
    M makedef.pl
    M perl.c
    M perl.h
    M sv.c

  Log Message:
  -----------
  Regularize HAS_POSIX_2008_LOCALE, USE_POSIX_2008_LOCALE

A platform shouldn't be required to use the Posix 2008 locale handling
functions if they are present.  Perhaps they are buggy.  So, a separate
define for using them was introduced, USE_POSIX_2008_LOCALE.  But until
this commit there were cases that were looking at the underlying
availability of the functions, not if the Configuration called for their
use.


  Commit: 7c6328a4ff74a3f333d64611d9fba92a03d186c2
      https://github.com/Perl/perl5/commit/7c6328a4ff74a3f333d64611d9fba92a03d186c2
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Change macro name

Adopt the git convention of 'porcelain' meaning without special
handling.  This makes it clear that porcelain_setlocale  macro is the
base level.


  Commit: 5200965f22395bb21d5e4884ef244b961e5a20a0
      https://github.com/Perl/perl5/commit/5200965f22395bb21d5e4884ef244b961e5a20a0
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Cast return of setlocale() to const

If they had it to do over again, the libc makers would have made the
return of this function 'const char *'.  We can cast it that way
internally to catch erroneous uses at compile time.


  Commit: 7b0c43bfae362b1b1f02c993fe5d306d83d3c03e
      https://github.com/Perl/perl5/commit/7b0c43bfae362b1b1f02c993fe5d306d83d3c03e
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Create S_get_category_index()

libc locale categories, like LC_NUMERIC, are opaque integers.  This
makes it inconvenient to have table-driven code.  Instead, we have
tables that are indexed by small positive integers, which are a
compile-time mapping from the libc values.

This commit creates a run-time function to also do that mapping.  It
will first be used in the next commit.

The function does a loop through the available categories, looking for a
match.  It could be replaced by some sort of quick hash lookup, but the
largest arrays in the field have a max of 12 elements, with almost all
searches finding their quarry in the first 6.  It doesn't seem
worthwhile to me to replace a linear search of 6 elements by something
more complicated.  The design intent is this search will be used only at
the edgest of the locale-handling code; once found the index is used in
future bits of the current operation.


  Commit: 701d4efa637f92429b23acc5c6480c2538977619
      https://github.com/Perl/perl5/commit/701d4efa637f92429b23acc5c6480c2538977619
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Use get_category_index()

This creates the first uses of the function added in the previous commit.

It changes the name of a function that now takes an index to have the
suffix _i to indicate its calling parameter is a category index rather
than a category.  This will become a common paradigm in this file in
later commits.

Two macros are also created to call that function; they have suffixes _c
(to indicate the parameter is a category known at compile time, and _r
(to indicate it needs to be computed at runtime).  This is in keeping
with the already existing paradigm in this file.


  Commit: 168a4ba0c3855241539246759211745a81a96151
      https://github.com/Perl/perl5/commit/168a4ba0c3855241539246759211745a81a96151
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Change S_emulate_setlocale name and sig

It turns out this function is called only from places where we have the
category index already computed; so change the signature to use the
index and remove the re-calculation.

It renames it to emulate_setlocale_i() to indicate that the category
parameter is an index.

This also means, that it's very unlikely that it will be called with an
out-of-bounds value.  Remove the debugging statement for that case (but
retain the error return value).


  Commit: 1177bd4a647097745fb1189f618a136281968f32
      https://github.com/Perl/perl5/commit/1177bd4a647097745fb1189f618a136281968f32
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Use nocontext; avoid rarely needed dTHX

This is a rare case; no point in doing a dTHX just for it.


  Commit: 9fe0814bf42f0af2d08534822281f8b657d6c243
      https://github.com/Perl/perl5/commit/9fe0814bf42f0af2d08534822281f8b657d6c243
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c
    M pod/perldelta.pod
    M pod/perldiag.pod

  Log Message:
  -----------
  locale.c: Simplify S_category_name

We can use the new function S_get_category_index() to simplify this.
Also, when I wrote it I didn't know about Perl_form(), and had
reimplemented a portion of it here; which is yanked as well.


  Commit: e4c813edd4f394f36c8d102f7a2c525d5f89a37b
      https://github.com/Perl/perl5/commit/e4c813edd4f394f36c8d102f7a2c525d5f89a37b
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Move unreachable code

It turns out this code, setting errno, is unreachable.  Move it to the
place where it would do some good, removing an extraneous, unreachable
return;


  Commit: 05b6d1d1ba4f1ac7ba7cd15ab2561222d0c4fe7f
      https://github.com/Perl/perl5/commit/05b6d1d1ba4f1ac7ba7cd15ab2561222d0c4fe7f
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Comment clarifications, white space

Some of these are to make future difference listings shorter

Some of the changes look like incorrect indentation here, but anticipate
future commits.


  Commit: a5d3803196ede54b4ea41c7002ddcb5965a47c81
      https://github.com/Perl/perl5/commit/a5d3803196ede54b4ea41c7002ddcb5965a47c81
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Separate query part of emulate_setlocale()

This splits a large function so that it is easier to comprehend, and is
in preparation for them to be separately callable.


  Commit: 916f68c5ffb180f3f7938653b9745a5fdaa472ba
      https://github.com/Perl/perl5/commit/916f68c5ffb180f3f7938653b9745a5fdaa472ba
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Remove spaces around a '##' preprocessor directive

It turns out that at least my gcc preprocessor gets confused in some
contexts if spaces surround the ##.  CAT2() doesn't work for these.

It is working in this context, but future commits will introduce ones
where it won't, so this commit will help make things consistent within
this file

What seems to fail is #define f(x) (..., g(x ## y), ...) where 'x' is a
an already #defined symbol.  I want 'xy', but instead, for example if
'x' has been defined to be 1, I get '1y'


  Commit: 88bc5d959ed1ef80852d7b0736ace96b89f1c538
      https://github.com/Perl/perl5/commit/88bc5d959ed1ef80852d7b0736ace96b89f1c538
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: #define some macros in terms of a base one

This is so changes to the lowest level automatically propagate to the
others


  Commit: 0c421258151a6c56fe0e9405c6afc13bfb2f600e
      https://github.com/Perl/perl5/commit/0c421258151a6c56fe0e9405c6afc13bfb2f600e
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Create new macros for just querying locale

There are two sets of names, which immediately indicate if the result
can be relied on to be thread level or must be assumed to be global to
the whole process.  At the moment they all expand to the same thing,
since on a threadless perl, it's a don't care; and on a threaded perl,
they are all already thread-level, in the Configurations we support.

Future commits will cause the macros to diverge, and comments will be
added then.

For POSIX 2008, this commit causes queries to go directly to the query
function, avoiding S_emulate_setlocale_i() completely.


  Commit: 492ac6cd2ede5d0bf911e639ac6763c0ddec208c
      https://github.com/Perl/perl5/commit/492ac6cd2ede5d0bf911e639ac6763c0ddec208c
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Generalize certain Win32 calls

The old versions were windows-specific; the changes use a more generic
macro that currently expands to the same thing, but future commits will
change that.


  Commit: 9b37aad6fd26c91cd6e795911e74c546192071b6
      https://github.com/Perl/perl5/commit/9b37aad6fd26c91cd6e795911e74c546192071b6
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Add a convenience #define

This makes it clear if we are using an array that currently only happens
on non-querylocale systems, but that will change in future commits.


  Commit: 8dd7afc467a9a7cc896df8e620ce1a74ff79725f
      https://github.com/Perl/perl5/commit/8dd7afc467a9a7cc896df8e620ce1a74ff79725f
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Add setlocale() return context macros

Future commits will benefit from knowing if the return value of
setlocale is to be ignored, just checked for if it worked, or the full
value is needed and can be relied on (or not) to be per-thread.


  Commit: 6291e7e9bb446c83c83ee5297867a04b564d9bb2
      https://github.com/Perl/perl5/commit/6291e7e9bb446c83c83ee5297867a04b564d9bb2
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Add panic check/message

This panic is done when a setlocale unexpectedly fails.


  Commit: 1f1558a264f70d0a9b0ed1f0d4163ed598d9880a
      https://github.com/Perl/perl5/commit/1f1558a264f70d0a9b0ed1f0d4163ed598d9880a
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Use a function table to simplify code

Some locale categories require extra steps when they are changed.  This
moves that logic to a table, which gets rid of some code


  Commit: 784bc572fb394452eb1f1280d18048ca75f8065a
      https://github.com/Perl/perl5/commit/784bc572fb394452eb1f1280d18048ca75f8065a
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  Perl_setlocale(): Same code for all param2 == NULL

Calling Perl_setlocale() with a NULL 2nd parameter returns the current
locale, rather than changing it.  Previously LC_NUMERIC and LC_ALL were
treated specially; other categories were lumped in with the code that
changes the locale.

Changing some categories involves a non-trivial amount of work.  This
commit avoids that by moving all queries to the same 'if' branch.
LC_NUMERIC and LC_ALL still have to be treated specially, but now it's
all within the same outer 'if', and the unnecessarily executing code
for when the locale changes is avoided.


  Commit: 6783619d3a39973bcebcd536c9fbf13c74d01d51
      https://github.com/Perl/perl5/commit/6783619d3a39973bcebcd536c9fbf13c74d01d51
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Use low level macros at low level

Implementing Perl_setlocale, we can safely use the internal macros that
the public ones expand to call, without the overhead those public macros
impose (which they do to be more immune from improper calls from outside
code).


  Commit: 6be0488707cd5a6656bffddb7c561de3aaf4cc45
      https://github.com/Perl/perl5/commit/6be0488707cd5a6656bffddb7c561de3aaf4cc45
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Remove exploratory code

This code was to find out, in debugging builds, if an undocumented glibc
feature worked.  There were no reports that it didn't, and so, after,
several releases, it has served its purpose.  A future commit will allow
enabling this feature as a Configuration option.


  Commit: db99ee2edce6af0090687047bb872724d915285e
      https://github.com/Perl/perl5/commit/db99ee2edce6af0090687047bb872724d915285e
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M intrpvar.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: querylocale() doesn't work on LC_ALL

I had misread the man pages.  This bug has been in the field for several
releases now, but most likely hasn't shown up because it's almost always
the case that the locale categories will be set to the same locale.  And
so most implementations of querylocale() would return the correct
result.

This commit works by splitting the calculation of the value of LC_ALL
from S_emulate_setlocale_i() into a separate function, and extending it
to work on querylocale() systems.  This has the added benefit of
removing tangential code from the main line, making
S_emulate_setlocale_i easier to read.

calculate_LC_ALL() is the new function, and is now called from two
places.

Part of this change is to keep our records of LC_ALL on non-querylocale
systems always up-to-date, which is better practice

And part of this change is temporary, marked as such, to be removed a
few commits later.


  Commit: a1973629a826a2f88f6a67dfc51a404e3bb609c7
      https://github.com/Perl/perl5/commit/a1973629a826a2f88f6a67dfc51a404e3bb609c7
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Use setlocale() for init, not P2008

We have found bugs in the POSIX 2008 libc implementations on various
platforms.  This code, which does the initialization of locale handling
has always been very conservative, expecting possible failures due to
bugs in it our the libc implementations, and backing out if necessary to
a crippled, but workable state, if something goes wrong.

I think we should use the oldest, most stable locale implementation in
these circumstances


  Commit: ee5431be4f791a4ee66be8b88c89e149f46a2cee
      https://github.com/Perl/perl5/commit/ee5431be4f791a4ee66be8b88c89e149f46a2cee
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c
    M perl.h

  Log Message:
  -----------
  Allow use of glibc undocumented locale fcn

glibc does not furnish querylocale() that Darwin and *BSD systems do.
But glibc does provide a long-standing, undocumented querylocale
equivalent.

Perl provides a workaround for systems without querylocale(), but this
commit causes -Accflags=-DUSE_NL_LOCALE_NAME when passed to Configure to
use the undocumented function instead of the workaround.  For now, I am
not otherwise documenting this ability, since the underlying function
isn't documented.


  Commit: 1ac5ca631ff0d66548d59fef72201e6746ad9c51
      https://github.com/Perl/perl5/commit/1ac5ca631ff0d66548d59fef72201e6746ad9c51
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Split aggregate LC_ALL from emulate_setlocale

This splits into a separate function the code necessary in some
Configurations to calculate LC_ALL from a potentially disparate
aggregate of categories having different locales.

This done just for readability, as this extensive code in the middle of
something else distracts from the main point.

A goto is hence replaced by a recursive call.


  Commit: 1015952f8a31a38385502aab5a952c9d52ce7ae2
      https://github.com/Perl/perl5/commit/1015952f8a31a38385502aab5a952c9d52ce7ae2
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Change internal variable name

The new name better reflects its purpose, so is less confusing


  Commit: 8e3a57c3a3d923cf390525f890dc496e2acb3e69
      https://github.com/Perl/perl5/commit/8e3a57c3a3d923cf390525f890dc496e2acb3e69
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Clean up handling of a glibc bug

This commit moves all mention of this bug to just the code that requires
it, and inlines a macro, making it easier to comprehend


  Commit: 926c42b3b467d2a8a40b73e323d2c68a32a10542
      https://github.com/Perl/perl5/commit/926c42b3b467d2a8a40b73e323d2c68a32a10542
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Split ancillary from S_emulate_setlocale

This takes the code to update LC_ALL, used only in some Configurations,
out of the main line, making the main line more readable.

It also allows the removal of temporary code added a few commits back


  Commit: d55d1df7007231a9651d9e3e1d1b577a70557f1e
      https://github.com/Perl/perl5/commit/d55d1df7007231a9651d9e3e1d1b577a70557f1e
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: locale "" can be disparate

Setting a locale "" means to get the value from environment variables.
These can set locale categories to different locales, and this needs to
be handled.  The logic before this commit only handled the disparate
case when the locale wasn't ""; but this was compensated for elsewhere.
A future commit will remove that compensation.


  Commit: 2ef8f431c1ccf433e57442b3b6294155d6959119
      https://github.com/Perl/perl5/commit/2ef8f431c1ccf433e57442b3b6294155d6959119
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  Split off setting locale to "" from S_emulate_setlocale

This is done for readability, to move the special casing of setting a
locale to the empty string (hence getting it from the environment) out
of the main line code.


  Commit: 333422b1e0326996b4232c61ebac4da8c4cd78e8
      https://github.com/Perl/perl5/commit/333422b1e0326996b4232c61ebac4da8c4cd78e8
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M sv.c

  Log Message:
  -----------
  sv.c: Duplicate more variables during cloning

These locale-related ones should be getting initialized in the new
thread, but be certain.


  Commit: 7097d346b9d532cfa125599a10f7f39847cd8f91
      https://github.com/Perl/perl5/commit/7097d346b9d532cfa125599a10f7f39847cd8f91
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M embedvar.h
    M intrpvar.h
    M locale.c
    M makedef.pl
    M perl.c
    M proto.h
    M sv.c

  Log Message:
  -----------
  locale.c: Add fcn to hide edge case undefined behavior

The POSIX 2008 API has an edge case in that the result of most of the
functions when called with a global (as opposed to a per-thread) locale
is undefined.

The duplocale() function is the exception which will create a per-thread
locale containing the values copied from the global one.

This commit just calls duplocale, if needed, and the caller need not
concern itself with this possibility


  Commit: 3fbbda3b0f281f9d2667c8ca5e9d7e0266584a70
      https://github.com/Perl/perl5/commit/3fbbda3b0f281f9d2667c8ca5e9d7e0266584a70
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Add DEBUGGING information

These functions are called as expansions of macros.  It may be useful to
know where in the file the macro occurred.


  Commit: d9d9c7acfa759f0b677ec242fca5ff901a641d9d
      https://github.com/Perl/perl5/commit/d9d9c7acfa759f0b677ec242fca5ff901a641d9d
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Separate out two Win fcns from a larger one

This makes the larger one easier to understand, and prepares for
possible independent calls to the two, which are potentially useful on
their own.


  Commit: 31ebe532a62aee2fe1abf35472671db2d936410f
      https://github.com/Perl/perl5/commit/31ebe532a62aee2fe1abf35472671db2d936410f
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M ext/POSIX/POSIX.xs

  Log Message:
  -----------
  POSIX.xs: Use macro to reduce complexity

This #defines a macro and uses it to populate a structure, so that
strings don't have to be typed twice.


  Commit: 81c031790cf38f3dfbb71b6b57b8a30eaef1be6f
      https://github.com/Perl/perl5/commit/81c031790cf38f3dfbb71b6b57b8a30eaef1be6f
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M ext/POSIX/POSIX.xs

  Log Message:
  -----------
  POSIX.xs: White-space only

Properly indent some nested preprocessor directives


  Commit: 7438adee6e822bd8e46919901e83d91f6cc5ee62
      https://github.com/Perl/perl5/commit/7438adee6e822bd8e46919901e83d91f6cc5ee62
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M ext/POSIX/POSIX.xs
    M locale.c
    M proto.h

  Log Message:
  -----------
  Move code from POSIX.xs to locale.c

This avoids duplicated logic.


  Commit: 1b4a115c9ebe94f08dab7531eb7a32b96e201912
      https://github.com/Perl/perl5/commit/1b4a115c9ebe94f08dab7531eb7a32b96e201912
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Reorder cases in a switch

This moves handling the CODESET to the end, as future commits will make
its handling more complicated.  The cases are now ordered so the
simplest (based on the direction of future commits) are first


  Commit: 06bd908ef713888c1d813339f585f909514d4c6e
      https://github.com/Perl/perl5/commit/06bd908ef713888c1d813339f585f909514d4c6e
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Make statics of repeated string constants

These strings are (or soon will be) used in multiple places; so have
just one definition for them.


  Commit: 579c31ef2d4549989f41dbdeab81740cb7c7cffb
      https://github.com/Perl/perl5/commit/579c31ef2d4549989f41dbdeab81740cb7c7cffb
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Add two #defines

This makes sure that we handle having any variant of nl_langinfo() or
localeconv().


  Commit: 8d7f708ee702d9e50ae6108e4a1fb37a6d0b50bf
      https://github.com/Perl/perl5/commit/8d7f708ee702d9e50ae6108e4a1fb37a6d0b50bf
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Return defaults for uncomputable langinfo items

Return the values from the C locale for nl_langinfo() items that aren't
computable on this platform.  If the platform has nl_langinfo(), then
all of them are computable, but if not, some can't be computed, and
others can be, but only if there are alternative methods available on
the platform.

As part of this commit, S_my_nl_langinfo() and S_save_to_buffer() are no
longer used when USE_LOCALE is not defined, so don't compile them.


  Commit: ea50006be667ca08099d6fa926b30813be86aae9
      https://github.com/Perl/perl5/commit/ea50006be667ca08099d6fa926b30813be86aae9
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Rmv reimplementation of my_strftime()

Prior to this commit, there was a near duplicate copy of the code from
util.c that implements my_strftime().  This was done because the util.c
version zaps the wday field, which made it incompatible.

But it dawned on me that if the arbitrary date we use to do our
calculations were such that it was for a year in which January 1 falls
on a Sunday, then the util.c version automatically works.


  Commit: 48ea4a1869b3ab53461f9f2b5d0a836bb592cead
      https://github.com/Perl/perl5/commit/48ea4a1869b3ab53461f9f2b5d0a836bb592cead
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Shorten static function name

The extra syllable(s) are unnecessary noise


  Commit: da2e347fb0dc6928c4ec603169244b42e252a573
      https://github.com/Perl/perl5/commit/da2e347fb0dc6928c4ec603169244b42e252a573
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Extend a static function

This will allow it to be used in situations where the buffer it controls
is single use, and we don't need to keep track of the size for future
calls.


  Commit: ac73626631c0d506315d497387185865024f5b3e
      https://github.com/Perl/perl5/commit/ac73626631c0d506315d497387185865024f5b3e
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Use typedef to simplify

This allows some preprocessor conditionals to be removed


  Commit: e838b5f4d7ab81f7d3f0790e5f9f71d93aa53c24
      https://github.com/Perl/perl5/commit/e838b5f4d7ab81f7d3f0790e5f9f71d93aa53c24
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Rmv redundant cBOOL()

strEQ and && already return booleans


  Commit: 7cd87c61f5f4dfcb2aec242c07f5b166464b4a93
      https://github.com/Perl/perl5/commit/7cd87c61f5f4dfcb2aec242c07f5b166464b4a93
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Fix currency symbol derivation

On platforms without nl_langinfo(), we derive the currency symbol from
localeconv().  The symbol must be tweaked to conform to nl_langinfo()
standards.  Prior to this commit, it guessed at how to tweak a rare
circumstance.  I now have seen evidence this guess was wrong, so give up
on it.

This also no longer returns just an empty string in certain cases.
nl_langinfo() itself doesn't, so conform to that.


  Commit: 9140c67b2fcd6382b29c1c955a4419e63959b64f
      https://github.com/Perl/perl5/commit/9140c67b2fcd6382b29c1c955a4419e63959b64f
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Don't add CP to Windows code page names

The actual name appears to be just the number for purposes of
nl_langinfo()-ish things.


  Commit: d61b5ece52c50aefe91edfb27875c1ef28123bcb
      https://github.com/Perl/perl5/commit/d61b5ece52c50aefe91edfb27875c1ef28123bcb
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Don't ask a static fcn to be inlined

It's too complicated to really be inlined, and the compiler can figure
things out itself given it is a static function


  Commit: 573c08579a8ed6acc80fc4e07c092861c1cb5dfb
      https://github.com/Perl/perl5/commit/573c08579a8ed6acc80fc4e07c092861c1cb5dfb
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Rmv no longer used param from static fnc

Previous commits have gotten rid of this parameter to S_save_to_buffer


  Commit: e07dfc19e7eae4a312e11f56de681020c90c8a57
      https://github.com/Perl/perl5/commit/e07dfc19e7eae4a312e11f56de681020c90c8a57
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Don't change locale if already there

Changing the locale is cheap for some categories, but expensive for
others.  Changing LC_COLLATE is most expensive, requiring recalculation
of the collation transformation mapping.

This commit checks before blindly changing locales that we aren't
already in the desired one, in which case this could be just as well a
no-op, and with this commit becomes one.


  Commit: 2560e445914b2665e66947c0f26599721499f4a2
      https://github.com/Perl/perl5/commit/2560e445914b2665e66947c0f26599721499f4a2
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M intrpvar.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  Make two locale PL_ strings const char*

This adds some compile safety to these.


  Commit: f9349cb7f253a16c0a9a6cee85715421d78276c6
      https://github.com/Perl/perl5/commit/f9349cb7f253a16c0a9a6cee85715421d78276c6
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Use a scratch buf; instead of resuing old

This is in preparation for the next commit


  Commit: 8172db594d7508b4cb6d0b8281766ea9b6c79627
      https://github.com/Perl/perl5/commit/8172db594d7508b4cb6d0b8281766ea9b6c79627
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Make static fcn reentrant

This makes my_langinfo() reentrant by adding parameters specifying where
to store the result.

This prepares for future commits, and fixes some minor bugs for XS
writers, in that the claim was that the buffer in calling
Perl_langinfo() was safe from getting zapped until the next call to it
in the same thread.  It turns out there were cases where, because of
internal calls, the buffer did get zapped.


  Commit: dec63fcf6b2e59abed5bc28be704ecaae92079ef
      https://github.com/Perl/perl5/commit/dec63fcf6b2e59abed5bc28be704ecaae92079ef
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: langinfo: Use Windows fcn to find CODESET

There is a Windows function available for quite a long time that will
return the current code page.  Use this for the nl_langinfo() CODESET,
as that libc function isn't implemented on Windows.


  Commit: ca9819bec63af51d770c42f91e67157ae2098b56
      https://github.com/Perl/perl5/commit/ca9819bec63af51d770c42f91e67157ae2098b56
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Add static fcn to analyze locale codeset

It determines if the name indicates it is UTF-8 or not.  There are
several variant spellings in use, and this hides that from the the
callers.

It won't be actually used until the next commit


  Commit: 2ee4a6bd2cb51e3c48bea25f1161ecd06973ce8f
      https://github.com/Perl/perl5/commit/2ee4a6bd2cb51e3c48bea25f1161ecd06973ce8f
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M ext/I18N-Langinfo/Langinfo.pm
    M locale.c

  Log Message:
  -----------
  locale.c: Improve non-nl_langinfo() CODESET calc

Prior to this commit, on non-Windows platforms that don't have a
nl_langinfo() libc function, the code completely punted computation of
the CODESET item.  I have not been able to figure out how to do this,
even going to the locale definition files on disk (which may vary
anyway), but we can do a lot better than punting.

This commit adds three checks:

1) If the locale name is C or POSIX, we know the codeset

2) We can detect if a locale is UTF-8.  If it is, that is the codeset.
Many modern locales are of this ilk.

3) Failing that, some locales have the codeset appear in the name,
following a dot.

It isn't perfect, but it's a lot better than completely punting.


  Commit: 85f827c5cfc8c49e0739eeed72e51d35647d45e0
      https://github.com/Perl/perl5/commit/85f827c5cfc8c49e0739eeed72e51d35647d45e0
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  New signature for static fcn my_langinfo()

This commit changes the calling sequence for my_langinfo to add the
desired locale (or a sentinel to indicate to use the current locale),
and the locale category of the desired item.

This allows the function to be able to return the desired value for any
locale, avoiding some locale changes that would happen until this
commit, and hiding the need for locale changes from outside functions,
though a couple continue to do so to avoid potential multiple changes.


  Commit: e91425fe401ee533f358b58dd514cf92906f3a0e
      https://github.com/Perl/perl5/commit/e91425fe401ee533f358b58dd514cf92906f3a0e
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Add is_locale_utf8()

Previous commits have added the infrastructure to be able to determine
if a locale is UTF-8.  This will prove useful, and this commit adds
a function to encapsulate this information, and uses it in a couple of
places, with more to come in future commits.

This uses as a final fallback, mbtowc(), which some sources view was a
late adder to C89, and others as not really being available until C99.
Future commits will add heuristics when that function isn't available.


  Commit: 5f037f6f05800a0f8b9556d7df878402709dfe2c
      https://github.com/Perl/perl5/commit/5f037f6f05800a0f8b9556d7df878402709dfe2c
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Add fcn for UTF8ness determination

get_locale_string_utf8ness_i() will determine if the string it is passed
in the locale it is passed is to be treated as UTF-8, or not.


  Commit: a2e6da38659a5efd8b8fabd25d50b8e7c6358511
      https://github.com/Perl/perl5/commit/a2e6da38659a5efd8b8fabd25d50b8e7c6358511
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M ext/POSIX/POSIX.xs
    M locale.c
    M proto.h

  Log Message:
  -----------
  XXX perldelta Move POSIX::localeconv() logic to locale.c

The code currently in POSIX.xs is moved to locale.c, and reworked some
to fit in that scheme, and the logic for the workaround for the Windows
broken localeconv() is made more robust.

This is in preparation for the next commit which will use this logic
instead of (imperfectly) duplicating it.

This also creates Perl_localeconv() for direct XS calls of this
functionality.


  Commit: a38feaf2ce146ea3c733e15fe94a5738acdd9353
      https://github.com/Perl/perl5/commit/a38feaf2ce146ea3c733e15fe94a5738acdd9353
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Collapse duplicate logic into one instance

The previous commit move the logic for localeconv() into locale.c.  This
commit takes advantage of that to use it instead of repeating the logic.

On Windows, there is alternative way of finding the radix character for
systems that have a localeconv() that could cause a race.  Prior to this
commit, if that failed to find something that looked like the radix, it
returned a '?'.  Now it will drop down to using this new code, as the
likelihood of the race is small.

Notably, this commit removes the inconsistent duplicate logic that had
been used to deal with the Windows broken localeconv() bug.


  Commit: b26e2f9cd4f150f258712a566f9ad9ccc21a6160
      https://github.com/Perl/perl5/commit/b26e2f9cd4f150f258712a566f9ad9ccc21a6160
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Fix windows bug with broken localeconv()

localeconv() was broken on Windows until VS 2015.  As a workaround, this
was using my_snprintf() to find what the decimal point character is,
trying to avoid our workaround for localeconv(), which has a (slight)
chance of a race condition.

The problem is that my_snprintf() might not end up calling snprintf at
all; I didn't trace all possibilities in Windows.  So it doesn't make
for a reliable sentinel.

This commit now specifically uses libc snprintf(), and if it fails, drops
down to try localeconv().


  Commit: 6b92b20ce3dbc7eb150c37fbe958233648b9cb63
      https://github.com/Perl/perl5/commit/6b92b20ce3dbc7eb150c37fbe958233648b9cb63
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M ext/POSIX/POSIX.xs
    M locale.c
    M proto.h

  Log Message:
  -----------
  XXXdelta Add my_strftime8()

This is like plain my_strftime(), but additionally returns an indication
of the UTF-8ness of the returned string


  Commit: de8f49fc9ee9a1aa0dc55cfb95c48d99907c298e
      https://github.com/Perl/perl5/commit/de8f49fc9ee9a1aa0dc55cfb95c48d99907c298e
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Add utf8ness return param to static fcn

my_langinfo_i() now will additionally return the UTF-8ness of the
returned string.


  Commit: ea36ecca1bfc67006d66c1995a893092e8b45df1
      https://github.com/Perl/perl5/commit/ea36ecca1bfc67006d66c1995a893092e8b45df1
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M ext/I18N-Langinfo/Langinfo.xs
    M locale.c
    M proto.h

  Log Message:
  -----------
  XXXdelta Add Perl_langinfo8()

This is like Perl_langinfo() but additionally returns information about
the UTF-8ness of the returned string.


  Commit: e0c736841ab659afdd732ceef5b3b17036396455
      https://github.com/Perl/perl5/commit/e0c736841ab659afdd732ceef5b3b17036396455
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Add fallbacks if no mbtowc()

This add heuristics that work well for non-English locales to determine
if a locale is UTF-8 or not when mbtowc() isn't available.  It would be
a very rare compiler that didn't have that these days, but this covers
that case as best as I have been able to figure out.


  Commit: ddfe9528ab8b127e3af560fc9ee810973d2f45df
      https://github.com/Perl/perl5/commit/ddfe9528ab8b127e3af560fc9ee810973d2f45df
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Use Strerror(), not strerror()


  Commit: bd1a816d8e3bed011b3806f80b46c4b7d31aaa2a
      https://github.com/Perl/perl5/commit/bd1a816d8e3bed011b3806f80b46c4b7d31aaa2a
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Refactor #ifdef's for clarity

The my_strerror() function has effectively 5 different implementations
depending on the capabilities of the platform.  Only a few lines are
common to all, the set-up and the return.  The #ifdefs obscure the
underlying logic.  So this commit separates them out into 5 different
functions, with the result that it's clear what is going on in each.


  Commit: e9a329cefd39587cd55f2dc94d8296c1987e018c
      https://github.com/Perl/perl5/commit/e9a329cefd39587cd55f2dc94d8296c1987e018c
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  Avoid mojibake in "$!"

In stress testing, I discovered that the LC_CTYPE and LC_MESSAGES
locales need to be the same locale, or strerror() can return
question marks or mojibake instead of the proper message.

This commit refactors the handling of stringifying "$!" to make the
locales of both categories the same during the stringification.

Actually, I suspect it isn't the locale, but the codeset of the locale
that needs to be the same.  I suspect that if the categories were both
in different UTF-8 locales, or both in single-byte locales, that things
would work fine.  But it's cheaper to find the locale rather than the
locale's codeset, so that is what is done.


  Commit: 36e56087fc5fa3616aef7c09e09129fe62ef949a
      https://github.com/Perl/perl5/commit/36e56087fc5fa3616aef7c09e09129fe62ef949a
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M makedef.pl
    M mg.c
    M proto.h

  Log Message:
  -----------
  Move utf8ness calc for $! into locale.c from mg.c

locale.c has the infrastructure to handle this, so remove repeated
logic.

The removed code tried to discern better based on using script runs, but
this actually doesn't help, so is removed.


  Commit: 85b2266fd5af95ab5fc0ea3e227ae6bdadc838ea
      https://github.com/Perl/perl5/commit/85b2266fd5af95ab5fc0ea3e227ae6bdadc838ea
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M mg.c

  Log Message:
  -----------
  mg.c: White-space only

Indent newly formed block from the previous commit.


  Commit: 851c37723a2031f1188e646588043c1593f36315
      https://github.com/Perl/perl5/commit/851c37723a2031f1188e646588043c1593f36315
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M embedvar.h
    M intrpvar.h
    M locale.c
    M proto.h
    M sv.c

  Log Message:
  -----------
  locale.c: Rmv no longer used code; UTF8ness cache

What these functions do has been subsumed by code introduced in previous
commits, and in a more straight forward manner.

Also removed in this commit is the cache of the knowing what locales are
UTF-8 or not.  This data is now cheaper to calculate when needed, and
there is now a single entry cache, so I don't think the complexity
warrants keeping it.

It could be added back if necessary, split off from the remainder of
this commit.


  Commit: 55bc180823bb10afe9dfd5337e7560939962abf2
      https://github.com/Perl/perl5/commit/55bc180823bb10afe9dfd5337e7560939962abf2
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  Don't discard locale info in starting P2008

The program is started in the global locale, and then is converted to
the POSIX 2008 per-thread locale API.  Prior to this commit the startup
locale was discarded.  It really should be the foundation for the 2008
locales.  I don't know of any current paths through the code that this
makes a difference for, but it is a potential hole that is easy to plug.


  Commit: 6c1e1a8f52ac49ea69c56d3cd3b3c0f4773e60fe
      https://github.com/Perl/perl5/commit/6c1e1a8f52ac49ea69c56d3cd3b3c0f4773e60fe
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M perl.h
    M proto.h

  Log Message:
  -----------
  Add a common locale panic macro and functions

This will make sure that all the necessary clean up gets done.


  Commit: de0105535948944bf7717e809a2bcc64c0b9fa9b
      https://github.com/Perl/perl5/commit/de0105535948944bf7717e809a2bcc64c0b9fa9b
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Revamp sync_locale()

This rarely used function was actually failing to do what it purported
in some Configurations.


  Commit: cbf37286f1f52e3c10f7484d3457eb086b803f8c
      https://github.com/Perl/perl5/commit/cbf37286f1f52e3c10f7484d3457eb086b803f8c
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Clean up thread_locale_init()

We can use internal functions to this file instead of the API ones here.
This commit also calls  sync_locale() to avoid repeated logic.


  Commit: aa5bb457d27783117e351a67071867a05033ca57
      https://github.com/Perl/perl5/commit/aa5bb457d27783117e351a67071867a05033ca57
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  Revamp switch_to_global_locale()

Prior to this commit, the global locale was not always getting populated
with the values from the thread being switched.


  Commit: 1350e16e4bd2d1b6562154aeed65bdf7573c5f2a
      https://github.com/Perl/perl5/commit/1350e16e4bd2d1b6562154aeed65bdf7573c5f2a
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Omit an extra copy

In this case in Perl_setlocale(), we can just return the plain result
from setlocale(), as, if something further needs to be done that would
destroy it, that is taken care of already at the time.

On per-thread locale platforms, the result already is in a per-category
buffer.


  Commit: f4f743f245e8444ac10e2c1f46277584cd887812
      https://github.com/Perl/perl5/commit/f4f743f245e8444ac10e2c1f46277584cd887812
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embedvar.h
    M intrpvar.h
    M locale.c
    M makedef.pl
    M perl.c
    M sv.c

  Log Message:
  -----------
  locale.c: Cache the current LC_CTYPE locale name

This is now used as a cache of length 1 to avoid having to lookup up the
UTF-8ness as often.

There was a complicated cache previously, but changes to the logic
caused that to be much less necessary, and it is no longer actually
used, and will be removed in a later commit.

But it's pretty easy to keep this single value around to cut further
down the new scheme's need to look it up


  Commit: 7cd2eff17d8766449d68cc23217a1f38ee9e928b
      https://github.com/Perl/perl5/commit/7cd2eff17d8766449d68cc23217a1f38ee9e928b
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M intrpvar.h

  Log Message:
  -----------
  intrpvar.h: Initialize a variable

I don't believe there is a bug with this PL_numeric_name being
uninitialized, but this is an easy precaution.


  Commit: 41bd8f820b66b2f6d8791670a1bd79b7d78b36f5
      https://github.com/Perl/perl5/commit/41bd8f820b66b2f6d8791670a1bd79b7d78b36f5
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c
    M perl.h

  Log Message:
  -----------
  Swap the ordering of two locale category indices

Perl internally uses a mapping of locale category values into a
consecutive sequence of indices starting at 0.  These are used as
indexes into arrays.  The reason is that the category numbers are
opaque, vary by platform, aren't necessarily sequential, and hence are
hard to make table driven code for.

This commit makes the LC_CTYPE index 0, and LC_NUMERIC equal to 1;
swapping them.  The reason is to cause LC_CTYPE to get done first in the
many loops through the categories.  The UTF8ness of categories is an
often needed value, and most of the time the categories will have the
same locale.  LC_CTYPE is needed to calculate the UTF8ness, and by doing
it first and caching the result, the other categories likely
automatically will use the same value, without having to recalculate.


  Commit: f583f18c9bc6cc1c68474b819d8ad10ee5a5e08c
      https://github.com/Perl/perl5/commit/f583f18c9bc6cc1c68474b819d8ad10ee5a5e08c
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Use new mechanism to save/restore errno

Instead of explicitly saving the errno around debugging statements, the
new more general mechanism is used.


  Commit: 72756ea1d21eb86dfd2c62af37bb95089e258e69
      https://github.com/Perl/perl5/commit/72756ea1d21eb86dfd2c62af37bb95089e258e69
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Move DEBUG location info

This commit takes advantage of the new mechanism to add common DEBUGGING
code to print the __FILE__ and __LINE__ of every debugging statement.
This allows those to be removed from each statement, and have them
implicitly added.

This make things consistent, and easier to read and add new statements.


  Commit: 55705e7fa76034a5b7c3677823771bc015e0fda8
      https://github.com/Perl/perl5/commit/55705e7fa76034a5b7c3677823771bc015e0fda8
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Add some asserts


  Commit: 23c69ae748f63331aa34db7791663e4f3e2f79a1
      https://github.com/Perl/perl5/commit/23c69ae748f63331aa34db7791663e4f3e2f79a1
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Reorder code, rmv unneeded conditional

Previous commits have made the conditional about being able to find the
radix character unnecessary.  The called function my_langinfo_c()
handles the case properly.

This commit also makes the trivial case first in a conditional, as that
is easier to comprehend.


  Commit: a5ab4226fa118f1377bb0d1d8d48c9ce6d679baa
      https://github.com/Perl/perl5/commit/a5ab4226fa118f1377bb0d1d8d48c9ce6d679baa
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Reorder 'if' branches

It's better for understandability to have positive tests than negative
ones


  Commit: 6c2e793b35b72da35003f037c487407931722961
      https://github.com/Perl/perl5/commit/6c2e793b35b72da35003f037c487407931722961
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Refactor a static function

S_new_numeric() is called after the LC_NUMERIC category is changed, to
update various ancillary information Perl keeps.

This reorders the function so that on POSIX 2008 platforms, the numeric
object is created earlier.  This allows for fewer operations on those
platforms, as we already have the correct value in place for querying
what the radix and thousands separator characters are.

Explanatory comments are also added.


  Commit: be351198ed4a89bd4a8a88974ab9091ac0138b25
      https://github.com/Perl/perl5/commit/be351198ed4a89bd4a8a88974ab9091ac0138b25
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Change assert() into STATIC_ASSERT()


  Commit: 46a3c33e2e0da7a920adfdc81650f7ca1fda9cbf
      https://github.com/Perl/perl5/commit/46a3c33e2e0da7a920adfdc81650f7ca1fda9cbf
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Use standard fold table for C locale

Copy the standard compiled-in ASCII fold table when the locale is C or
POSIX, instead of looping through all 256 characters and computing them.
This saves some time as well as ensures that any platform bugs become
irrelevant.


  Commit: ebd2becc402eb30f0a5bd181c47ce94dadc2d5c8
      https://github.com/Perl/perl5/commit/ebd2becc402eb30f0a5bd181c47ce94dadc2d5c8
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Add check that strxfrm didn't fail

The code failed to take into account that strxfrm() can fail for reasons
besides buffer length.  It does not return errors, and the only way to
check is to set errno to 0 beforehand, and check that it is still 0
afterwards.


  Commit: 1d59771f4134da54e65ddb06d7a806273680aa3c
      https://github.com/Perl/perl5/commit/1d59771f4134da54e65ddb06d7a806273680aa3c
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Don't assume LC_CTYPE, LC_COLLATE are same

This code is using isCNTRL_LC which depends on LC_CTYPE to verify that
something in the LC_COLLATE locale is a control.  That only works
properly if the two locales are the same.  This commit adds code to
ensure they are.


  Commit: 6fe31313701b1dc2af6d0765cfffcab593468c84
      https://github.com/Perl/perl5/commit/6fe31313701b1dc2af6d0765cfffcab593468c84
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: strxfrm() requires LC_CTYPE eq LC_COLLATE

The libc functions strxfrm() on some platforms requires the LC_CTYPE
locale to be the same as the LC_COLLATE locale (or rather, probably that
they have the same code set, but checking for locale is cheaper).
Otherwise mojibake would result, or more likely the function will fail,
setting errno.

This commit brings the locales into alignment if necessary


  Commit: bba04ba8cd75ca07ffdfe259261cf5b654ca8934
      https://github.com/Perl/perl5/commit/bba04ba8cd75ca07ffdfe259261cf5b654ca8934
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M Configure
    M Cross/config.sh-arm-linux
    M Cross/config.sh-arm-linux-n770
    M NetWare/config.wc
    M Porting/config.sh
    M config_h.SH
    M configure.com
    M metaconfig.h
    M plan9/config_sh.sample
    M uconfig.h
    M uconfig.sh
    M uconfig64.sh
    M win32/config.gc
    M win32/config.vc

  Log Message:
  -----------
  Configure: strxfrm_l


  Commit: 5cebb58477265d8f5031adf16265639293224817
      https://github.com/Perl/perl5/commit/5cebb58477265d8f5031adf16265639293224817
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M lib/locale.t

  Log Message:
  -----------
  XXX temp: Windows debug


  Commit: 42fcfdfe6badf67eaa68fca517fb408448b58cce
      https://github.com/Perl/perl5/commit/42fcfdfe6badf67eaa68fca517fb408448b58cce
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Use strxfrm_l() if available

This more modern version of the function doesn't require us to change
locales.


  Commit: c8baa2c2c91be23f01ea458e12846d089b4dadd6
      https://github.com/Perl/perl5/commit/c8baa2c2c91be23f01ea458e12846d089b4dadd6
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  locale.c: Print code point in hex, not decimal

Hex is the more familiar form


  Commit: 40ee61f443772c2599ec9429ee7e6c0d3b61c6ce
      https://github.com/Perl/perl5/commit/40ee61f443772c2599ec9429ee7e6c0d3b61c6ce
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  extra debug


  Commit: 7d984914b598aee619010994149cea2e914a5791
      https://github.com/Perl/perl5/commit/7d984914b598aee619010994149cea2e914a5791
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M ext/POSIX/POSIX.xs
    M locale.c
    M perl.h

  Log Message:
  -----------
  Mark certain mutex lock macros as private

mbtowc() mblen(), and wctomb() should not be directly used by XS
writers; instead use the POSIX versions.  Don't encourage the direct use
by having public macros to aid in their use.


  Commit: d94680c2746011bce0ebd9a199ac0458c1e5988e
      https://github.com/Perl/perl5/commit/d94680c2746011bce0ebd9a199ac0458c1e5988e
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c

  Log Message:
  -----------
  XXX f inRANGE


  Commit: c8657d89c8ff83618a4c6804ef7bb66902060092
      https://github.com/Perl/perl5/commit/c8657d89c8ff83618a4c6804ef7bb66902060092
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M perl.h

  Log Message:
  -----------
  perl.h: Move some code around

This is purely to make future commits have smaller real difference
listings, and involves a temporary (complemented) copy of a preprocessor
conditional.


  Commit: 3e830f6270d3dad43012ef890ca1d01ed7695885
      https://github.com/Perl/perl5/commit/3e830f6270d3dad43012ef890ca1d01ed7695885
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embedvar.h
    M intrpvar.h
    M locale.c
    M makedef.pl
    M perl.h
    M sv.c

  Log Message:
  -----------
  Make the locale mutex a general semaphore

Future commits will use this new capability, and in Configurations where
no locale locking is currently necessary.


  Commit: 1b9572fd2c2a06eda3fefc5b1bcd6c4d4161907f
      https://github.com/Perl/perl5/commit/1b9572fd2c2a06eda3fefc5b1bcd6c4d4161907f
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embedvar.h
    M intrpvar.h
    M makedef.pl
    M perl.h
    M perlvars.h
    M sv.c

  Log Message:
  -----------
  Use general locale mutex for numeric operations

This commit removes the separate mutex for locking locale-related
numeric operations on threaded perls; instead using the general locale
one.  The previous commit made that a general semaphore, so now suitable
for use for this purpose as well.

This means that the locale can be locked for the duration of some
sprintf operations, longer than before this commit.  But on most modern
platforms, thread-safe locales cause this lock to expand just to a
no-op; so there is no effect on these.  And on the impacted platforms,
one is not supposed to be using locales and threads in combination, as
races can occur.  This lock is used on those perls to keep Perl's
manipulation of LC_NUMERIC thread-safe.  And for those there is also no
effect, as they already lock around those sprintf's.


  Commit: bde6f2807b197c9e18e81e478ccac2bc36503c18
      https://github.com/Perl/perl5/commit/bde6f2807b197c9e18e81e478ccac2bc36503c18
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M perl.h

  Log Message:
  -----------
  Add locale macro to wrap static space using fncs

Some functions return a result in a global-to-the-program buffer, or
they have an internal global buffer.  Other threads must be kept from
simultaneously using that function.  This macro is to be used for all
such ones dealing with locales.  Ideally, there would be a separate mutex
for each such buffer space.  But these functions also have to lock the
locale from changing during their execution, and there aren't that many
such functions, and they actually are rarely executed.  So a single lock
will do.

This will allow future commits to have more targeted locking for
functions that don't affect the global locale.


  Commit: b5a867505be75e5487d453241259e5e5e5711095
      https://github.com/Perl/perl5/commit/b5a867505be75e5487d453241259e5e5e5711095
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M perl.h

  Log Message:
  -----------
  Redefine the POSIX.xs locale macros using prev commit

This commit uses the new macro introduced in the previous commit to
define the internal locale mutex macros in POSIX.xs


  Commit: 20c0f923585a9fe31da0c92d76bccc1577f6a2d6
      https://github.com/Perl/perl5/commit/20c0f923585a9fe31da0c92d76bccc1577f6a2d6
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c
    M perl.h

  Log Message:
  -----------
  perl.h: Remove NL_LANGINFO_LOCK

This is needed in precisely one place in the code, so move it to there.


  Commit: c6e0b5992c8c8624fde7d5f6c5d6fa43a25a1973
      https://github.com/Perl/perl5/commit/c6e0b5992c8c8624fde7d5f6c5d6fa43a25a1973
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c
    M perl.h

  Log Message:
  -----------
  perl.h: Remove LOCALECONV_LOCK

This is needed in just one function, in locale.c, so more it there.


  Commit: e0906fbfa050fa95838e019f45a8b499d315e71e
      https://github.com/Perl/perl5/commit/e0906fbfa050fa95838e019f45a8b499d315e71e
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M locale.c
    M perl.h

  Log Message:
  -----------
  Add PORCELAIN_SETLOCALE_LOCK/UNLOCK

This macro is used to surround raw setlocale() calls so that the return
value in a global static buffer can be saved without interference with
other threads.

There are a few very rarely occurring instances in locale.c that are
converted to use this.  These previously could have been races.

The raw setlocalwes in the initialization function are not guarded, as
these happen early in the Perl process initialization, before threading
is enabled.

This is buggy if there are multiple embedded perls.  It can't be helped.
perlembed is being updated to indicate this.


  Commit: fc746a676af3d4614fbb85d7cd20f322e052cd49
      https://github.com/Perl/perl5/commit/fc746a676af3d4614fbb85d7cd20f322e052cd49
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M perl.h

  Log Message:
  -----------
  perl.h: Move #defining SETLOCALE_LOCK

This simplifies slightly, and will allow further simplification


  Commit: dcdf34c7f2e64195287b90cbddd592fe15715e38
      https://github.com/Perl/perl5/commit/dcdf34c7f2e64195287b90cbddd592fe15715e38
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M perl.h

  Log Message:
  -----------
  perl.h: Move LOCALE_READ_LOCK #definition

To enable future simplifications


  Commit: 59d75f007203afed1259e0915b81444465f6aafb
      https://github.com/Perl/perl5/commit/59d75f007203afed1259e0915b81444465f6aafb
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M perl.h

  Log Message:
  -----------
  perl.h Simplify some locale-related defns

This removes some conditionals made redundant by previous commits.


  Commit: cc60e12c56dbcba819b3f429791ca1e04666031c
      https://github.com/Perl/perl5/commit/cc60e12c56dbcba819b3f429791ca1e04666031c
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M locale.c
    M proto.h

  Log Message:
  -----------
  locale.c: Mitigate unsafe threaded locales

This a new set of macros and functions to do locale changing and
querying for platforms where perl is compiled with threads, but the
platform doesn't have thread-safe locale handling.

All it does is:

1) The return of setlocale() is always safely saved in a per-thread
buffer, and
2) setlocale() is protected by a mutex from other threads which are
using perl's locale functions.

This isn't much, but it might be enough to get some programs to work on
such platforms which rarely change or query the locale.


  Commit: cdb898b1769aba8ecb0d48de35b467d391e2d592
      https://github.com/Perl/perl5/commit/cdb898b1769aba8ecb0d48de35b467d391e2d592
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M embed.fnc
    M embed.h
    M embedvar.h
    M ext/POSIX/POSIX.xs
    M handy.h
    M inline.h
    M intrpvar.h
    M lib/locale_threads.t
    M locale.c
    M makedef.pl
    M perl.c
    M perl.h
    M proto.h
    M sv.c
    M util.c

  Log Message:
  -----------
  Emul


  Commit: d46089619a6fb3878126fa3743dea2dd03203731
      https://github.com/Perl/perl5/commit/d46089619a6fb3878126fa3743dea2dd03203731
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M t/loc_tools.pl

  Log Message:
  -----------
  loc tools after emulation


  Commit: a989772c26d2df2836fd6d1663a8ce4a8ef1cfe8
      https://github.com/Perl/perl5/commit/a989772c26d2df2836fd6d1663a8ce4a8ef1cfe8
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M pp.c

  Log Message:
  -----------
  XXX pp.c: do %g print under mutex,


  Commit: b4cdf9ac2f70511eac5f5da008b3b9008b59a19d
      https://github.com/Perl/perl5/commit/b4cdf9ac2f70511eac5f5da008b3b9008b59a19d
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M ebcdic_tables.h
    M embedvar.h
    M globvar.sym
    M intrpvar.h
    M perl.h
    M regen/ebcdic.pl

  Log Message:
  -----------
  XXX finish fold_locale

tests, copy in thread create


  Commit: cc1997aeb18a29a20bb1c922c6c91db209618a83
      https://github.com/Perl/perl5/commit/cc1997aeb18a29a20bb1c922c6c91db209618a83
  Author: Karl Williamson <khw@cpan.org>
  Date:   2021-03-10 (Wed, 10 Mar 2021)

  Changed paths:
    M inline.h

  Log Message:
  -----------
  XXX temp debug? inline.h:foldEQ_locale


Compare: https://github.com/Perl/perl5/compare/92dde7462c4e...cc1997aeb18a



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About