Fix and speedup __libcpp_locale_guard on Windows

The old implementation assumed the POSIX `setlocale()` API where the old
locale is returned.  On Windows, the _new_ locale is returned.  This meant
that `__libcpp_locale_guard` wasn't resetting the locale on destruction.

The new implementation fixes the above issue and takes advantage of
`setlocale(LC_ALL)` to reduce the number of calls, and also avoids setting
the locale at all if it's not necessary.

Differential Revision: https://reviews.llvm.org/D59572


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@357104 91177308-0d34-0410-b5e6-96231b3b80d8
1 file changed