]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/commit
MFC r304703, r304755
authorache <ache@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Fri, 26 Aug 2016 21:19:23 +0000 (21:19 +0000)
committerache <ache@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Fri, 26 Aug 2016 21:19:23 +0000 (21:19 +0000)
commitde5e37229cd46add2892a577feedc5b4306eda38
tree4410343f65915f725c89a2fec73f3c20a14b897b
parentb19aed0acd0ce5adbdc890c7ae6e4db063105d49
MFC r304703, r304755

1) _locale.h
LC_*_MASK bit shifting order was partially broken from the initial commit
time at year 2012. Only LC_COLLATE_MASK and LC_CTYPE_MASK are in the
right order.

The order here should match XLC_* from "xlocale_private.h" which, in turn,
match LC_* publicly visible order from <locale.h> which determines how
locale components are stored in the structure.
LC_*_MASK -> XLC_* translation done as "ffs(mask) - 1" in the querylocale()
and equivalent shift loop in the newlocale(), so mapped to some wrong
components (excluding two mentioned above).

Formally the fix is ABI breakage, but old code using those masks
never works properly in any case.
Only newlocale() and querylocale() are affected.

2) msgcat.c
Use current locale (f.e. set by thread). It was global locale always
previously.

PR:     211743

git-svn-id: svn://svn.freebsd.org/base/stable/10@304862 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
include/xlocale/_locale.h
lib/libc/nls/msgcat.c