forked from OSchip/llvm-project
locale: update ctype access for MSVC CRT 14+
Visual C++ 14 and newer split msvcrt into msvcrt and ucrt with flavours of the ucrt for different environments. This changed the access to the ctype table by introducing the `__pctype_func` and `__pwctype_func` accessors. Use this rather than directly accessing `_ctype` which allows us to be safer in threaded situations by going through the libc locking. llvm-svn: 290823
This commit is contained in:
parent
841261624d
commit
8bcade547a
|
@ -11,8 +11,12 @@
|
|||
#ifndef _LIBCPP_SUPPORT_WIN32_LOCALE_WIN32_H
|
||||
#define _LIBCPP_SUPPORT_WIN32_LOCALE_WIN32_H
|
||||
|
||||
#include <crtversion.h>
|
||||
|
||||
#if _VC_CRT_MAJOR_VERSION < 14
|
||||
// ctype mask table defined in msvcrt.dll
|
||||
extern "C" unsigned short __declspec(dllimport) _ctype[];
|
||||
extern "C" unsigned short __declspec(dllimport) _ctype[];
|
||||
#endif
|
||||
|
||||
#include "support/win32/support.h"
|
||||
#include "support/win32/locale_mgmt_win32.h"
|
||||
|
|
|
@ -24,6 +24,9 @@
|
|||
#endif
|
||||
#include "clocale"
|
||||
#include "cstring"
|
||||
#if defined(_LIBCPP_MSVCRT)
|
||||
#define _CTYPE_DISABLE_MACROS
|
||||
#endif
|
||||
#include "cwctype"
|
||||
#include "__sso_allocator"
|
||||
#if defined(_LIBCPP_MSVCRT) || defined(__MINGW32__)
|
||||
|
@ -1108,9 +1111,13 @@ ctype<char>::classic_table() _NOEXCEPT
|
|||
#elif __sun__
|
||||
return __ctype_mask;
|
||||
#elif defined(_LIBCPP_MSVCRT) || defined(__MINGW32__)
|
||||
#if _VC_CRT_MAJOR_VERSION < 14
|
||||
// This is assumed to be safe, which is a nonsense assumption because we're
|
||||
// going to end up dereferencing it later...
|
||||
return _ctype+1; // internal ctype mask table defined in msvcrt.dll
|
||||
// This is assumed to be safe, which is a nonsense assumption because we're
|
||||
// going to end up dereferencing it later...
|
||||
#else
|
||||
return __pctype_func();
|
||||
#endif
|
||||
#elif defined(__EMSCRIPTEN__)
|
||||
return *__ctype_b_loc();
|
||||
#elif defined(_NEWLIB_VERSION)
|
||||
|
|
Loading…
Reference in New Issue