Signed-off-by: Martin Storsjö <mar...@martin.st> --- This fixes a testcase like this:
#include <stdio.h> #include <locale.h> #include <ctype.h> int main(int argc, char const *argv[]) { _locale_t loc = _create_locale(LC_ALL, "C"); int ret = _isdigit_l('3', loc); printf ("%d\n", ret); return 0; } --- mingw-w64-headers/crt/crtdefs.h | 6 ++++++ mingw-w64-headers/crt/ctype.h | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/mingw-w64-headers/crt/crtdefs.h b/mingw-w64-headers/crt/crtdefs.h index 20ba574..84c0455 100644 --- a/mingw-w64-headers/crt/crtdefs.h +++ b/mingw-w64-headers/crt/crtdefs.h @@ -442,6 +442,11 @@ typedef struct tagLC_ID { #ifndef _THREADLOCALEINFO #define _THREADLOCALEINFO typedef struct threadlocaleinfostruct { +#ifdef __MSVCRT_VERSION__ >= 0x1400 + const unsigned short *_locale_pctype; + int _locale_mb_cur_max; + unsigned int _locale_lc_codepage; +#else int refcount; unsigned int lc_codepage; unsigned int lc_collate_cp; @@ -465,6 +470,7 @@ typedef struct threadlocaleinfostruct { const unsigned char *pclmap; const unsigned char *pcumap; struct __lc_time_data *lc_time_curr; +#endif } threadlocinfo; #endif /* _THREADLOCALEINFO */ diff --git a/mingw-w64-headers/crt/ctype.h b/mingw-w64-headers/crt/ctype.h index a85ad96..e6449b3 100644 --- a/mingw-w64-headers/crt/ctype.h +++ b/mingw-w64-headers/crt/ctype.h @@ -209,8 +209,13 @@ _CRTIMP int __cdecl ___mb_cur_max_func(void); #endif #define __chvalidchk(a,b) (__PCTYPE_FUNC[(unsigned char)(a)] & (b)) +#ifdef __MSVCRT_VERSION__ >= 0x1400 +#define _chvalidchk_l(_Char,_Flag,_Locale) (!_Locale ? __chvalidchk(_Char,_Flag) : ((_locale_t)_Locale)->locinfo->_locale_pctype[(unsigned char)(_Char)] & (_Flag)) +#define _ischartype_l(_Char,_Flag,_Locale) (((_Locale)!=NULL && (((_locale_t)(_Locale))->locinfo->_locale_mb_cur_max) > 1) ? _isctype_l(_Char,(_Flag),_Locale) : _chvalidchk_l(_Char,_Flag,_Locale)) +#else #define _chvalidchk_l(_Char,_Flag,_Locale) (!_Locale ? __chvalidchk(_Char,_Flag) : ((_locale_t)_Locale)->locinfo->pctype[(unsigned char)(_Char)] & (_Flag)) #define _ischartype_l(_Char,_Flag,_Locale) (((_Locale)!=NULL && (((_locale_t)(_Locale))->locinfo->mb_cur_max) > 1) ? _isctype_l(_Char,(_Flag),_Locale) : _chvalidchk_l(_Char,_Flag,_Locale)) +#endif #define _isalpha_l(_Char,_Locale) _ischartype_l(_Char,_ALPHA,_Locale) #define _isupper_l(_Char,_Locale) _ischartype_l(_Char,_UPPER,_Locale) #define _islower_l(_Char,_Locale) _ischartype_l(_Char,_LOWER,_Locale) -- 2.7.4 _______________________________________________ Mingw-w64-public mailing list Mingw-w64-public@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mingw-w64-public