This needs to be REQUIRED READING at the Open Group and the ISO C standards committees.
I'll quibble just a bit and say that:
a) the C locale should be a UTF-8 locale...
that tolerates invalid sequences (because
the C locale historically is a just-use-8
locale),
b) even with new functions that take a locale
handle, we need functions that use a global
one, however that global one should be set
once and NEVER changed in the life of the
process, and it should be set either before
main() starts, or before main() does anything
that needs a locale, or starts any threads.
I'll quibble just a bit and say that: