From: Bartosz Kosiorek gang65@poczta.onet.pl
--- dlls/msvcr100/msvcr100.spec | 4 ++-- dlls/msvcr110/msvcr110.spec | 2 +- dlls/msvcr120/msvcr120.spec | 2 +- dlls/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.spec | 2 +- dlls/msvcrt/mbcs.c | 25 +++++++++++++++++++++---- dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 4 ++-- 8 files changed, 30 insertions(+), 13 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index d4fa4e38b7b..8f24047e8b5 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1007,9 +1007,9 @@ @ cdecl _ismbcupper(long) @ cdecl _ismbcupper_l(long ptr) @ cdecl _ismbslead(ptr ptr) -@ stub _ismbslead_l +@ cdecl _ismbslead_l(ptr ptr ptr) @ cdecl _ismbstrail(ptr ptr) -@ stub _ismbstrail_l +@ stub _ismbstrail_l(ptr ptr ptr) @ cdecl _isnan(double) @ cdecl -arch=x86_64 _isnanf(float) @ cdecl _isprint_l(long ptr) diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index a27a4487608..160dce837d9 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1353,7 +1353,7 @@ @ cdecl _ismbcupper(long) @ cdecl _ismbcupper_l(long ptr) @ cdecl _ismbslead(ptr ptr) -@ stub _ismbslead_l +@ cdecl _ismbslead_l(ptr ptr ptr) @ cdecl _ismbstrail(ptr ptr) @ stub _ismbstrail_l @ cdecl _isnan(double) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index cb673976e61..268c6db59d7 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1359,7 +1359,7 @@ @ cdecl _ismbcupper(long) @ cdecl _ismbcupper_l(long ptr) @ cdecl _ismbslead(ptr ptr) -@ stub _ismbslead_l +@ cdecl _ismbslead_l(ptr ptr ptr) @ cdecl _ismbstrail(ptr ptr) @ stub _ismbstrail_l @ cdecl _isnan(double) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index ca32dac7285..cafb0a8f644 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -679,7 +679,7 @@ @ cdecl _ismbcupper(long) @ cdecl _ismbcupper_l(long ptr) @ cdecl _ismbslead(ptr ptr) -@ stub _ismbslead_l +@ cdecl _ismbslead_l(ptr ptr ptr) @ cdecl _ismbstrail(ptr ptr) @ stub _ismbstrail_l @ cdecl _isnan(double) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index ce0ddfb6168..2773762b176 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -657,7 +657,7 @@ @ cdecl _ismbcupper(long) @ cdecl _ismbcupper_l(long ptr) @ cdecl _ismbslead(ptr ptr) -@ stub _ismbslead_l +@ cdecl _ismbslead_l(ptr ptr ptr) @ cdecl _ismbstrail(ptr ptr) @ stub _ismbstrail_l @ cdecl _isnan(double) diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index 1754a732cb6..0e6e0bdcc7f 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -1808,13 +1808,22 @@ int CDECL _ismbclegal(unsigned int c) }
/********************************************************************* - * _ismbslead(MSVCRT.@) + * _ismbslead_l(MSVCRT.@) */ -int CDECL _ismbslead(const unsigned char* start, const unsigned char* str) +int CDECL _ismbslead_l(const unsigned char* start, const unsigned char* str, _locale_t locale) { + pthreadmbcinfo mbcinfo; int lead = 0;
- if(!get_mbcinfo()->ismbcodepage) + if (!MSVCRT_CHECK_PMT(start && str)) + return 0; + + if(locale) + mbcinfo = locale->mbcinfo; + else + mbcinfo = get_mbcinfo(); + + if(!mbcinfo->ismbcodepage) return 0;
/* Lead bytes can also be trail bytes so we need to analyse the string @@ -1823,13 +1832,21 @@ int CDECL _ismbslead(const unsigned char* start, const unsigned char* str) { if (!*start) return 0; - lead = !lead && _ismbblead(*start); + lead = !lead && _ismbblead_l(*start, locale); start++; }
return lead ? -1 : 0; }
+/********************************************************************* + * _ismbslead(MSVCRT.@) + */ +int CDECL _ismbslead(const unsigned char* start, const unsigned char* str) +{ + return _ismbslead_l(start, str, NULL); +} + /********************************************************************* * _ismbstrail(MSVCRT.@) */ diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 430835f4422..ae70c2619b6 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -628,7 +628,7 @@ @ cdecl _ismbcupper(long) @ cdecl _ismbcupper_l(long ptr) @ cdecl _ismbslead(ptr ptr) -# stub _ismbslead_l(long ptr) +@ cdecl _ismbslead_l(ptr ptr ptr) @ cdecl _ismbstrail(ptr ptr) # stub _ismbstrail_l(long ptr) @ cdecl _isnan(double) diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index 969487c2b1e..4d0e69fc57b 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -499,7 +499,7 @@ @ cdecl _ismbcupper(long) @ cdecl _ismbcupper_l(long ptr) @ cdecl _ismbslead(ptr ptr) -@ stub _ismbslead_l +@ cdecl _ismbslead_l(ptr ptr ptr) @ cdecl _ismbstrail(ptr ptr) @ stub _ismbstrail_l @ cdecl _isnan(double) @@ -1098,7 +1098,7 @@ @ cdecl _o__ismbcupper(long) _ismbcupper @ cdecl _o__ismbcupper_l(long ptr) _ismbcupper_l @ cdecl _o__ismbslead(ptr ptr) _ismbslead -@ stub _o__ismbslead_l +@ cdecl _o__ismbslead_l(ptr ptr ptr) _ismbslead_l @ cdecl _o__ismbstrail(ptr ptr) _ismbstrail @ stub _o__ismbstrail_l @ cdecl _o__iswctype_l(long long ptr) _iswctype_l