From: Bartosz Kosiorek gang65@poczta.onet.pl
--- dlls/msvcr100/msvcr100.spec | 2 +- dlls/msvcr110/msvcr110.spec | 2 +- dlls/msvcr120/msvcr120.spec | 2 +- dlls/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.spec | 2 +- dlls/msvcrt/mbcs.c | 27 ++++++++++++++++++++++----- 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 3b053698f0c..6b0865b5ad7 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1112,7 +1112,7 @@ @ cdecl _mbsdec(ptr ptr) @ stub _mbsdec_l @ cdecl _mbsicmp(str str) -@ stub _mbsicmp_l +@ cdecl _mbsicmp_l(str str ptr) @ cdecl _mbsicoll(str str) @ cdecl _mbsicoll_l(str str ptr) @ cdecl _mbsinc(str) diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index c57eca5d678..35256da6664 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1469,7 +1469,7 @@ @ cdecl _mbsdec(ptr ptr) @ stub _mbsdec_l @ cdecl _mbsicmp(str str) -@ stub _mbsicmp_l +@ cdecl _mbsicmp_l(str str ptr) @ cdecl _mbsicoll(str str) @ cdecl _mbsicoll_l(str str ptr) @ cdecl _mbsinc(str) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index b4503c10d2b..bf924f8d2b0 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1480,7 +1480,7 @@ @ cdecl _mbsdec(ptr ptr) @ stub _mbsdec_l @ cdecl _mbsicmp(str str) -@ stub _mbsicmp_l +@ cdecl _mbsicmp_l(str str ptr) @ cdecl _mbsicoll(str str) @ cdecl _mbsicoll_l(str str ptr) @ cdecl _mbsinc(str) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index bf63a33ed07..d1d2f8e32f0 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -784,7 +784,7 @@ @ cdecl _mbsdec(ptr ptr) @ stub _mbsdec_l @ cdecl _mbsicmp(str str) -@ stub _mbsicmp_l +@ cdecl _mbsicmp_l(str str ptr) @ cdecl _mbsicoll(str str) @ cdecl _mbsicoll_l(str str ptr) @ cdecl _mbsinc(str) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 377cbe7684b..ef5124a66c9 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -762,7 +762,7 @@ @ cdecl _mbsdec(ptr ptr) @ stub _mbsdec_l @ cdecl _mbsicmp(str str) -@ stub _mbsicmp_l +@ cdecl _mbsicmp_l(str str ptr) @ cdecl _mbsicoll(str str) @ cdecl _mbsicoll_l(str str ptr) @ cdecl _mbsinc(str) diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index e5e80a26de1..5902bb313da 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -1098,11 +1098,20 @@ int CDECL _mbscoll(const unsigned char* str, const unsigned char* cmp) }
/********************************************************************* - * _mbsicmp(MSVCRT.@) + * _mbsicmp_l(MSVCRT.@) */ -int CDECL _mbsicmp(const unsigned char* str, const unsigned char* cmp) +int CDECL _mbsicmp_l(const unsigned char* str, const unsigned char* cmp, _locale_t locale) { - if(get_mbcinfo()->ismbcodepage) + pthreadmbcinfo mbcinfo; + + if(!MSVCRT_CHECK_PMT(str && cmp)) + return _NLSCMPERROR; + + if(!locale) + mbcinfo = get_mbcinfo(); + else + mbcinfo = locale->mbcinfo; + if(mbcinfo->ismbcodepage) { unsigned int strc, cmpc; do { @@ -1110,8 +1119,8 @@ int CDECL _mbsicmp(const unsigned char* str, const unsigned char* cmp) return *cmp ? -1 : 0; if(!*cmp) return 1; - strc = _mbctolower(_mbsnextc(str)); - cmpc = _mbctolower(_mbsnextc(cmp)); + strc = _mbctolower_l(_mbsnextc_l(str, locale), locale); + cmpc = _mbctolower_l(_mbsnextc_l(cmp, locale), locale); if(strc != cmpc) return strc < cmpc ? -1 : 1; str +=(strc > 255) ? 2 : 1; @@ -1121,6 +1130,14 @@ int CDECL _mbsicmp(const unsigned char* str, const unsigned char* cmp) return u_strcasecmp(str, cmp); /* ASCII CP */ }
+/********************************************************************* + * _mbsicmp(MSVCRT.@) + */ +int CDECL _mbsicmp(const unsigned char* str, const unsigned char* cmp) +{ + return _mbsicmp_l(str, cmp, NULL); +} + /********************************************************************* * _mbsncmp(MSVCRT.@) */ diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 4c9363ddbf8..5e412c422a4 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -733,7 +733,7 @@ @ cdecl _mbsdup(str) _strdup # stub _strdup_dbg(str long str long) @ cdecl _mbsicmp(str str) -# stub _mbsicmp_l(str str ptr) +@ cdecl _mbsicmp_l(str str ptr) @ cdecl _mbsicoll(str str) @ cdecl _mbsicoll_l(str str ptr) @ cdecl _mbsinc(str) diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index b84229efb1b..46f943b940e 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -627,7 +627,7 @@ @ stub _mbsdec_l @ cdecl _mbsdup(str) _strdup @ cdecl _mbsicmp(str str) -@ stub _mbsicmp_l +@ cdecl _mbsicmp_l(str str ptr) @ cdecl _mbsicoll(str str) @ cdecl _mbsicoll_l(str str ptr) @ cdecl _mbsinc(str) @@ -1196,7 +1196,7 @@ @ cdecl _o__mbsdec(ptr ptr) _mbsdec @ stub _o__mbsdec_l @ cdecl _o__mbsicmp(str str) _mbsicmp -@ stub _o__mbsicmp_l +@ cdecl _o__mbsicmp_l(str str ptr) _mbsicmp_l @ cdecl _o__mbsicoll(str str) _mbsicoll @ cdecl _o__mbsicoll_l(str str ptr) _mbsicoll_l @ cdecl _o__mbsinc(str) _mbsinc