msvcrt: Add _mbsrchr_l implementation.

This commit is contained in:
Bartosz Kosiorek 2023-10-30 20:21:27 +01:00 committed by Alexandre Julliard
parent 3c9419622a
commit 2853352cc8
8 changed files with 42 additions and 24 deletions

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -1441,27 +1441,45 @@ unsigned char* CDECL _mbschr(const unsigned char* s, unsigned int x)
return _mbschr_l(s, x, NULL);
}
/*********************************************************************
* _mbsrchr_l(MSVCRT.@)
*/
unsigned char* CDECL _mbsrchr_l(const unsigned char *s, unsigned int x, _locale_t locale)
{
pthreadmbcinfo mbcinfo;
if (!MSVCRT_CHECK_PMT(s))
return NULL;
if (locale)
mbcinfo = locale->mbcinfo;
else
mbcinfo = get_mbcinfo();
if (mbcinfo->ismbcodepage)
{
unsigned char *match = NULL;
unsigned int c;
while (1)
{
c = _mbsnextc_l(s, locale);
if (c == x)
match = (unsigned char *)s;
if (!c)
return match;
s += (c > 255) ? 2 : 1;
}
}
return u_strrchr(s, x);
}
/*********************************************************************
* _mbsrchr(MSVCRT.@)
*/
unsigned char* CDECL _mbsrchr(const unsigned char* s, unsigned int x)
{
if(get_mbcinfo()->ismbcodepage)
{
unsigned int c;
unsigned char* match=NULL;
if(!s)
return NULL;
while (1) {
c = _mbsnextc(s);
if (c == x)
match=(unsigned char*)s;
if (!c)
return match;
s +=(c > 255) ? 2 : 1;
}
}
return u_strrchr(s, x);
return _mbsrchr_l(s, x, NULL);
}
/*********************************************************************

View file

@ -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)

View file

@ -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