msvcrt: Add _mbsncmp_l implementation.

This commit is contained in:
Bartosz Kosiorek 2023-11-07 23:06:28 +01:00 committed by Alexandre Julliard
parent 8f30305049
commit f73d74c6df
8 changed files with 51 additions and 32 deletions

View file

@ -1152,7 +1152,7 @@
@ cdecl _mbsnccnt(str long)
@ cdecl _mbsnccnt_l(str long ptr)
@ cdecl _mbsncmp(str str long)
@ stub _mbsncmp_l
@ cdecl _mbsncmp_l(str str long ptr)
@ stub _mbsncoll(str str long)
@ stub _mbsncoll_l
@ cdecl _mbsncpy(ptr str long)

View file

@ -1509,7 +1509,7 @@
@ cdecl _mbsnccnt(str long)
@ cdecl _mbsnccnt_l(str long ptr)
@ cdecl _mbsncmp(str str long)
@ stub _mbsncmp_l
@ cdecl _mbsncmp_l(str str long ptr)
@ stub _mbsncoll(str str long)
@ stub _mbsncoll_l
@ cdecl _mbsncpy(ptr str long)

View file

@ -1520,7 +1520,7 @@
@ cdecl _mbsnccnt(str long)
@ cdecl _mbsnccnt_l(str long ptr)
@ cdecl _mbsncmp(str str long)
@ stub _mbsncmp_l
@ cdecl _mbsncmp_l(str str long ptr)
@ stub _mbsncoll(str str long)
@ stub _mbsncoll_l
@ cdecl _mbsncpy(ptr str long)

View file

@ -824,7 +824,7 @@
@ cdecl _mbsnccnt(str long)
@ cdecl _mbsnccnt_l(str long ptr)
@ cdecl _mbsncmp(str str long)
@ stub _mbsncmp_l
@ cdecl _mbsncmp_l(str str long ptr)
@ stub _mbsncoll(str str long)
@ stub _mbsncoll_l
@ cdecl _mbsncpy(ptr str long)

View file

@ -802,7 +802,7 @@
@ cdecl _mbsnccnt(str long)
@ cdecl _mbsnccnt_l(str long ptr)
@ cdecl _mbsncmp(str str long)
@ stub _mbsncmp_l
@ cdecl _mbsncmp_l(str str long ptr)
@ stub _mbsncoll(str str long)
@ stub _mbsncoll_l
@ cdecl _mbsncpy(ptr str long)

View file

@ -1224,35 +1224,54 @@ int CDECL _mbsicmp(const unsigned char* str, const unsigned char* cmp)
return _mbsicmp_l(str, cmp, NULL);
}
/*********************************************************************
* _mbsncmp_l(MSVCRT.@)
*/
int CDECL _mbsncmp_l(const unsigned char* str, const unsigned char* cmp,
size_t len, _locale_t locale)
{
pthreadmbcinfo mbcinfo;
unsigned int strc, cmpc;
if (!len)
return 0;
if (locale)
mbcinfo = locale->mbcinfo;
else
mbcinfo = get_mbcinfo();
if (!mbcinfo->ismbcodepage)
return u_strncmp(str, cmp, len); /* ASCII CP */
if (!MSVCRT_CHECK_PMT(str && cmp))
return _NLSCMPERROR;
while (len--)
{
int inc;
if (!*str)
return *cmp ? -1 : 0;
if (!*cmp)
return 1;
strc = _mbsnextc_l(str, locale);
cmpc = _mbsnextc_l(cmp, locale);
if (strc != cmpc)
return strc < cmpc ? -1 : 1;
inc = (strc > 255) ? 2 : 1; /* Equal, use same increment */
str += inc;
cmp += inc;
}
return 0; /* Matched len chars */
}
/*********************************************************************
* _mbsncmp(MSVCRT.@)
*/
int CDECL _mbsncmp(const unsigned char* str, const unsigned char* cmp, size_t len)
{
if(!len)
return 0;
if(get_mbcinfo()->ismbcodepage)
{
unsigned int strc, cmpc;
while(len--)
{
int inc;
if(!*str)
return *cmp ? -1 : 0;
if(!*cmp)
return 1;
strc = _mbsnextc(str);
cmpc = _mbsnextc(cmp);
if(strc != cmpc)
return strc < cmpc ? -1 : 1;
inc=(strc > 255) ? 2 : 1; /* Equal, use same increment */
str += inc;
cmp += inc;
}
return 0; /* Matched len chars */
}
return u_strncmp(str, cmp, len); /* ASCII CP */
return _mbsncmp_l(str, cmp, len, NULL);
}
/*********************************************************************

View file

@ -773,7 +773,7 @@
@ cdecl _mbsnccnt(str long)
@ cdecl _mbsnccnt_l(str long ptr)
@ cdecl _mbsncmp(str str long)
# stub _mbsncmp_l(str str long ptr)
@ cdecl _mbsncmp_l(str str long ptr)
@ stub _mbsncoll(str str long)
# stub _mbsncoll_l(str str long ptr)
@ cdecl _mbsncpy(ptr str long)

View file

@ -668,7 +668,7 @@
@ cdecl _mbsnccnt(str long)
@ cdecl _mbsnccnt_l(str long ptr)
@ cdecl _mbsncmp(str str long)
@ stub _mbsncmp_l
@ cdecl _mbsncmp_l(str str long ptr)
@ stub _mbsncoll(str str long)
@ stub _mbsncoll_l
@ cdecl _mbsncpy(ptr str long)
@ -1237,7 +1237,7 @@
@ cdecl _o__mbsnccnt(str long) _mbsnccnt
@ cdecl _o__mbsnccnt_l(str long ptr) _mbsnccnt_l
@ cdecl _o__mbsncmp(str str long) _mbsncmp
@ stub _o__mbsncmp_l
@ cdecl _o__mbsncmp_l(str str long ptr) _mbsncmp_l
@ stub _o__mbsncoll
@ stub _o__mbsncoll_l
@ cdecl _o__mbsncpy(ptr str long) _mbsncpy