In perl.git, the branch smoke-me/khw-locale has been created
<http://perl5.git.perl.org/perl.git/commitdiff/9e0c2370f6319df6b1ec24cb5f6baab5c0d21584?hp=0000000000000000000000000000000000000000>
at 9e0c2370f6319df6b1ec24cb5f6baab5c0d21584 (commit)
- Log -----------------------------------------------------------------
commit 9e0c2370f6319df6b1ec24cb5f6baab5c0d21584
Author: Karl Williamson <[email protected]>
Date: Wed Dec 11 23:33:22 2013 -0700
XXX audit posix.t: Correct saving/restoring locales
This code assumed that setlocale returned the old locale. Instead it
returns the new one. A separate setlocale() call is needed to get the
previous locale value.
M ext/POSIX/t/posix.t
commit e092e284ebba01793107e6c9f21af17a15abcb2d
Author: Karl Williamson <[email protected]>
Date: Wed Dec 11 23:15:25 2013 -0700
toke.c: Set locale for all scan_num() calls; restore instead of reset
One call of Perl_scan_num changes the locale around it. However, this
function is called in several places, including from outside the file.
It is better to set the locale within scan_num() at the point where
it matters. And, instead of setting the locale unconditionally, it is
better to change it only if it needs to be changed, and restore it to
the original. Otherwise the locale can be changed to something
unexpected.
M toke.c
commit 13ce66c9dc73b11ac8cc1ba3b64b4c5e12f9a811
Author: Karl Williamson <[email protected]>
Date: Wed Dec 11 23:12:19 2013 -0700
sv.c, util.c: Use existing macros instead of reinventing them
If there had been documentation referring to these macros, I would have
known they existed instead of reinventing them (not as well as the
originals).
M sv.c
M util.c
commit d5ef2d05f257e57257acb3cee2c025ac2213a5be
Author: Karl Williamson <[email protected]>
Date: Wed Dec 11 23:04:40 2013 -0700
POSIX:strtod() should restore the locale it changed
Prior to this commit, the locale remained as strtod() set it to. I
could not find a case where this actually was a problem, as the other
code is good about checking for and changing the locale where needed.
But uses of atoi(), strtol() in locales where there are spaces in
numbers likely would break.
M ext/POSIX/POSIX.xs
M perl.h
M t/run/locale.t
commit 94a1053889b3322d8da49d06bf5aaaddf335e93e
Author: Karl Williamson <[email protected]>
Date: Wed Dec 11 22:55:43 2013 -0700
perl.h: Revise another locale setting macro
We generally don't want to switch to the default underlying locale
unless we are in the scope of some form of 'use locale'. Prior to this
commit, this code did not allow the switch for
'use locale ":not_characters"'.
M perl.h
M t/run/locale.t
commit a7d3e2a1a1222404adc17a801822274b99b11a62
Author: Karl Williamson <[email protected]>
Date: Wed Dec 11 22:50:28 2013 -0700
perl.h: Revise a locale setting macro
This macro toggles to the C locale. It should not depend on being in
the scope of 'use locale' to do that, so remove the check. I couldn't
figure out a test case for this, but I'm pretty sure there is a some
convoluted scheme that this change averts a bug from.
M perl.h
commit 5394fd0e8c45ee42aa357679e575e5c0e8b528d6
Author: Karl Williamson <[email protected]>
Date: Wed Dec 11 19:00:15 2013 -0700
locale.c: Avoid writing libc static storage
I don't believe this code was causing any problem, but it can overwrite
static storage returned by setlocale(). It's safer to create a copy
first.
M locale.c
commit 7a4bb68d3df99bf1ba6c14e738f7bef10754dacc
Author: Karl Williamson <[email protected]>
Date: Wed Dec 11 18:04:47 2013 -0700
Hide some undocumented functions from perlapi
These functions should not be called from any other places than they are
now. They have been marked in the public API as undocumented. I
presume they are there because they are called from various parts of the
Perl core, so can't be static. But this suppresses them from being
listed so people won't be tempted to use them.
M embed.fnc
commit 293739341bea8cd2824a8664c297783e2732190b
Author: Karl Williamson <[email protected]>
Date: Wed Dec 11 16:53:25 2013 -0700
locale.c, perl.h: Add comments
This documents much of what I learned about how things work while
tracking down [perl #120723].
M locale.c
M perl.h
commit ecafa12caaf69fa192ffceeda2dba35c31aed9ec
Author: Karl Williamson <[email protected]>
Date: Wed Dec 11 17:58:52 2013 -0700
perl.c: Remove no-longer necessary function call
This call during initialization toggles the LC_NUMERIC locale to the C
locale, where it usually stays. But the previous commmit added doing
this to the central calls for changing locales, where it should have
been all along, so this is no longer necessary.
M perl.c
commit 8b717c916352d30be036ed3228817fbc399da7a5
Author: Karl Williamson <[email protected]>
Date: Wed Dec 11 16:25:02 2013 -0700
PATCH: [perl #120723] Setting LC_NUMERIC breaks parsing of constants
LC_NUMERIC is handled differently than the other locale categories,
in that for this category, Perl normally stays in the C locale,
converting to the underlying locale for brief periods, only when
necessary. This is undocumented (until the commit following this one).
The problem was that when POSIX::setlocale() is called, it changes the
locale, which is correct only if called during those places where the
underlying locale is supposed to be in effect, or if the new locale is
the C locale.
This commit simply adds code to change the locale back to the C locale
if appropriate.
M locale.c
M t/run/locale.t
commit 7f14898b60d8435baa6f84845b9d7aa20e62387e
Author: Karl Williamson <[email protected]>
Date: Wed Dec 11 16:22:17 2013 -0700
locale.c: White-space only.
This outdents code removed from a block by the previous commit
M locale.c
commit a28bb948cc89f08e5ccbf9df36657278bd9148e3
Author: Karl Williamson <[email protected]>
Date: Wed Dec 11 14:30:45 2013 -0700
locale.c: Always set state variables for a new locale
This function is called when a new underlying LC_NUMERIC locale has been
set. If that locale is the same as the current underlying one, some
setup is skipped. However, prior to this commit, more was skipped than
should have been. The reason is that even if the underlying locale is
the same, it could be that LC_NUMERIC has been toggled to the "C"
locale, and so the information could be inconsistent. By always setting
the information, we ensure consistency.
This commit ia a portion of the fix for [perl #120723]. Tests will be
added with the final commit for it.
M locale.c
commit 2c39ea4019800e6619b3ba3c6965398c6a7a8639
Author: Karl Williamson <[email protected]>
Date: Wed Dec 11 16:54:49 2013 -0700
perl.h: Move some macro definitions
This places related definitions together in the file.
M perl.h
commit 67970d89f9c265a516dca10cacc818eedb89546e
Author: Karl Williamson <[email protected]>
Date: Wed Dec 11 11:26:02 2013 -0700
perllocale: Note that LC_MESSAGES affects $^E
M pod/perllocale.pod
commit 35f575693f3ad5c7a525666a8242f509d84f91b0
Author: Karl Williamson <[email protected]>
Date: Wed Dec 11 09:03:03 2013 -0700
run/locale.t: Fix bareword error
This string should be in quotes to be properly eval'd. Prior to this
patch this .t failed when run by hand as the bareword warning is made
fatal.
M t/run/locale.t
commit 95e364d113046e5c3a3ab4a0526b59f11e6eb056
Author: Karl Williamson <[email protected]>
Date: Sun Dec 8 09:34:18 2013 -0700
lib/locale.t: Add tests
Commit b99851e1941e002dd4816ee6c76fd49bbee1d7f3 should have added tests
in two places. This adds them in the second place, plus a cautionary
comment. The reason for the two places is the alternative I can think
of is to use a string eval, but that perturbs the test environment so
might affect the outcome.
M lib/locale.t
commit cf8a38c07d4af888159da722ce55e76c5fca7cf3
Author: Karl Williamson <[email protected]>
Date: Sun Dec 8 08:42:49 2013 -0700
lib/locale.t: Move some lines
Commit b99851e1941e002dd4816ee6c76fd49bbee1d7f3 should have added tests
at the end of the block. This moves them.
M lib/locale.t
-----------------------------------------------------------------------
--
Perl5 Master Repository