summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorache <ache@FreeBSD.org>2016-08-26 21:19:23 +0000
committerache <ache@FreeBSD.org>2016-08-26 21:19:23 +0000
commit44a2fcec2fdaabcd0d1098de82edc7c928352d9e (patch)
tree4410343f65915f725c89a2fec73f3c20a14b897b /include
parent362ce96b2d5b504bc8ddd6a4ba942265bde07a3c (diff)
downloadFreeBSD-src-44a2fcec2fdaabcd0d1098de82edc7c928352d9e.zip
FreeBSD-src-44a2fcec2fdaabcd0d1098de82edc7c928352d9e.tar.gz
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
Diffstat (limited to 'include')
-rw-r--r--include/xlocale/_locale.h9
1 files changed, 5 insertions, 4 deletions
diff --git a/include/xlocale/_locale.h b/include/xlocale/_locale.h
index f8aafb8..2b4387b 100644
--- a/include/xlocale/_locale.h
+++ b/include/xlocale/_locale.h
@@ -32,12 +32,13 @@
#ifndef _XLOCALE_LOCALE_H
#define _XLOCALE_LOCALE_H
+/* Bit shifting order of LC_*_MASK should match XLC_* and LC_* order. */
#define LC_COLLATE_MASK (1<<0)
#define LC_CTYPE_MASK (1<<1)
-#define LC_MESSAGES_MASK (1<<2)
-#define LC_MONETARY_MASK (1<<3)
-#define LC_NUMERIC_MASK (1<<4)
-#define LC_TIME_MASK (1<<5)
+#define LC_MONETARY_MASK (1<<2)
+#define LC_NUMERIC_MASK (1<<3)
+#define LC_TIME_MASK (1<<4)
+#define LC_MESSAGES_MASK (1<<5)
#define LC_ALL_MASK (LC_COLLATE_MASK | LC_CTYPE_MASK | LC_MESSAGES_MASK | \
LC_MONETARY_MASK | LC_NUMERIC_MASK | LC_TIME_MASK)
#define LC_GLOBAL_LOCALE ((locale_t)-1)
OpenPOWER on IntegriCloud