overhaul locale internals to treat categories roughly uniformly
authorRich Felker <dalias@aerifal.cx>
Wed, 27 May 2015 07:22:52 +0000 (03:22 -0400)
committerRich Felker <dalias@aerifal.cx>
Wed, 27 May 2015 07:27:59 +0000 (03:27 -0400)
commit61a3364d246e72b903da8b76c2e27a225a51351e
tree8845c8e1798280285b6f0b27244d978eb602c300
parent63c188ec42e76ff768e81f6b65b11c68fc43351e
overhaul locale internals to treat categories roughly uniformly

previously, LC_MESSAGES was treated specially as the only category
which could be set to a locale name without a definition file, in
order to facilitate gettext message translations when no libc locale
was available. LC_NUMERIC was completely un-settable, and LC_CTYPE
stored a flag intended to be used for a possible future byte-based C
locale, instead of storing a __locale_map pointer like the other
categories use.

this patch changes all categories to be represented by pointers to
__locale_map structures, and allows locale names without definition
files to be treated as valid locales with trivial definition when used
in any category. outwardly visible functional changes should be minor,
limited mainly to the strings read back from setlocale and the way
gettext handles translations in categories other than LC_MESSAGES.

various internal refactoring has also been performed, and improvements
in const correctness have been made.
src/internal/libc.h
src/internal/locale_impl.h
src/locale/__lctrans.c
src/locale/__setlocalecat.c
src/locale/dcngettext.c
src/locale/duplocale.c
src/locale/newlocale.c
src/locale/setlocale.c