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, 29 insertions(+), 14 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index bb85301bce6..a39b15c6707 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1176,7 +1176,7 @@ @ cdecl _mbspbrk(str str) @ stub _mbspbrk_l @ cdecl _mbsrchr(str long) -@ stub _mbsrchr_l +@ cdecl _mbsrchr_l(str long ptr) @ cdecl _mbsrev(str) @ stub _mbsrev_l @ cdecl _mbsset(ptr long) diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 29a16dbdc40..a48d98455ce 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1533,7 +1533,7 @@ @ cdecl _mbspbrk(str str) @ stub _mbspbrk_l @ cdecl _mbsrchr(str long) -@ stub _mbsrchr_l +@ cdecl _mbsrchr_l(str long ptr) @ cdecl _mbsrev(str) @ stub _mbsrev_l @ cdecl _mbsset(ptr long) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 97331627485..b23663783a7 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1544,7 +1544,7 @@ @ cdecl _mbspbrk(str str) @ stub _mbspbrk_l @ cdecl _mbsrchr(str long) -@ stub _mbsrchr_l +@ cdecl _mbsrchr_l(str long ptr) @ cdecl _mbsrev(str) @ stub _mbsrev_l @ cdecl _mbsset(ptr long) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 55f058965d5..ec570c8ab1f 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -848,7 +848,7 @@ @ cdecl _mbspbrk(str str) @ stub _mbspbrk_l @ cdecl _mbsrchr(str long) -@ stub _mbsrchr_l +@ cdecl _mbsrchr_l(str long ptr) @ cdecl _mbsrev(str) @ stub _mbsrev_l @ cdecl _mbsset(ptr long) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index cdd0117aeb4..b7d60374372 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -826,7 +826,7 @@ @ cdecl _mbspbrk(str str) @ stub _mbspbrk_l @ cdecl _mbsrchr(str long) -@ stub _mbsrchr_l +@ cdecl _mbsrchr_l(str long ptr) @ cdecl _mbsrev(str) @ stub _mbsrev_l @ cdecl _mbsset(ptr long) diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index 6992a4f1c58..d38469c7cac 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -1442,18 +1442,25 @@ unsigned char* CDECL _mbschr(const unsigned char* s, unsigned int x) }
/********************************************************************* - * _mbsrchr(MSVCRT.@) + * _mbsrchr_l(MSVCRT.@) */ -unsigned char* CDECL _mbsrchr(const unsigned char* s, unsigned int x) +unsigned char* CDECL _mbsrchr_l(const unsigned char* s, unsigned int x, _locale_t locale) { - if(get_mbcinfo()->ismbcodepage) + pthreadmbcinfo mbcinfo; + + if(!MSVCRT_CHECK_PMT(s)) + return NULL; + + if(locale) + mbcinfo = locale->mbcinfo; + else + mbcinfo = get_mbcinfo(); + if(mbcinfo->ismbcodepage) { unsigned int c; unsigned char* match=NULL; - if(!s) - return NULL; while (1) { - c = _mbsnextc(s); + c = _mbsnextc_l(s, locale); if (c == x) match=(unsigned char*)s; if (!c) @@ -1464,6 +1471,14 @@ unsigned char* CDECL _mbsrchr(const unsigned char* s, unsigned int x) return u_strrchr(s, x); }
+/********************************************************************* + * _mbsrchr(MSVCRT.@) + */ +unsigned char* CDECL _mbsrchr(const unsigned char* s, unsigned int x) +{ + return _mbsrchr_l(s, x, NULL); +} + /********************************************************************* * _mbstok_s_l(MSVCRT.@) */ diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index bce48873271..fae66edf6a4 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -797,7 +797,7 @@ @ cdecl _mbspbrk(str str) # stub _mbspbrk_l(str str ptr) @ cdecl _mbsrchr(str long) -# stub _mbsrchr_l(str long ptr) +@ cdecl _mbsrchr_l(str long ptr) @ cdecl _mbsrev(str) # stub _mbsrev_l(str ptr) @ cdecl _mbsset(ptr long) diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index 28805ceb98f..5b4c2beb491 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -692,7 +692,7 @@ @ cdecl _mbspbrk(str str) @ stub _mbspbrk_l @ cdecl _mbsrchr(str long) -@ stub _mbsrchr_l +@ cdecl _mbsrchr_l(str long ptr) @ cdecl _mbsrev(str) @ stub _mbsrev_l @ cdecl _mbsset(ptr long) @@ -1261,7 +1261,7 @@ @ cdecl _o__mbspbrk(str str) _mbspbrk @ stub _o__mbspbrk_l @ cdecl _o__mbsrchr(str long) _mbsrchr -@ stub _o__mbsrchr_l +@ cdecl _o__mbsrchr_l(str long ptr) _mbsrchr_l @ cdecl _o__mbsrev(str) _mbsrev @ stub _o__mbsrev_l @ cdecl _o__mbsset(ptr long) _mbsset